2010-04-19 33 views
25

Chúng tôi có JAXB này chú thích:JAXB cần = true dường như không đòi hỏi

@XmlElement(name = "Strategy", required = true) 
protected List<Strategy> strategy; 

Nếu không có Strategy yếu tố hiện tại, không có ngoại lệ được ném .. tại sao điều này? Chúng ta không nên có ngoại lệ sao?

Trả lời

32

Triển khai tham chiếu JAXB không sử dụng thuộc tính này để xác thực, nó hoàn toàn có cho mục đích tài liệu.

Nếu bạn cần xác thực tài liệu, bạn cần xác định một lược đồ XML và chèn nó vào Marshaller hoặc Unmarshaller, sử dụng SchemaFactory.

+0

xem [this] (http://stackoverflow.com/a/2696765/12604) để biết ví dụ về tải 'Schema' từ 'JAXBContext' của bạn để sử dụng trong' Marshaller'/'Unmarshaller'. –

+0

Tôi sẽ không nói đó là hoàn toàn cho documen - nó cũng được sử dụng cho việc tạo lược đồ. Khi bạn tạo một XSD từ các lớp Java của bạn và bạn có 'required = true' thì khai báo phần tử trong XSD sẽ được tạo ra với' minOccurs = "1" '. Sau đó, bạn có thể sử dụng XSD để xác nhận hợp lệ XML. – Jesper

1

Ngoài ra, bạn có thể sử dụng các phương thức beforeMarshalafterUnmarshal để xác thực các yếu tố đầu vào như được mô tả trong MarshallerUnmarshaller.

Đề án mà theo đó các phương pháp này được truy cập cũng sẽ cho phép bạn thêm một mệnh đề throws tùy ý vào khai báo phương pháp. Điều này có nghĩa là khi triển khai các phương pháp này, bạn có thể sử dụng an toàn javax.xml.bind.MarshalExceptionjavax.xml.bind.UnmarshalException(hoặc bất kỳ loại Exception nào bạn muốn) để báo hiệu lỗi xác thực.

Các vấn đề liên quan