2017-08-17 59 views
8

Khi bạn unmarshal cả XML với JAXB, bạn có thể thiết lập lược đồ XML để cho phép xác nhận trong phân tích cú pháp:JAXB Schema xác nhận khi unmarshalling không phải root yếu tố

//javax.xml.validation.Schema schema = ... 
jaxbUnmarshaller = JAXBContext.newInstance(SomeRootType.class).createUnmarshaller(); 
jaxbUnmarshaller.setSchema(schema); 

Mặt khác, khi bạn unmarshal danh sách NestedObjest s từ XML, từng người một (. ví dụ như giảm sử dụng bộ nhớ) phương pháp này thất bại (như Schema chỉ chấp nhận root) với một ngoại lệ:

org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 22; cvc-elt.1: Cannot find the declaration of element 'NestedObject' 

Nó thất bại ngay cả khi NestedObjectType là được xác định rõ trong XSD. Có tùy chọn nào để bật xác thực đối tượng lồng nhau không? Xin lưu ý rằng việc xác định lược đồ mới là một tùy chọn khốn khổ vì XSD là bên ngoài cho ứng dụng của tôi được duy trì bởi người khác.

+3

bạn có thể cung cấp một số đầu vào mẫu, nơi xảy ra lỗi này không? –

Trả lời

0

Bạn đã cố gắng chuyển sang phương thức unmarshal lớp của hạt bị ràng buộc? Giống như được giải thích trong Example 65. Unmarshalling into a known type

+0

Tôi đã làm. Không hoạt động. – jaskmar

+0

Bạn có thể sửa đổi mã nguồn xml không? ví dụ: thêm xsi: thuộc tính type –

+0

Tôi không thể sửa đổi xml/schema. Trong ví dụ bạn đã liên kết với teher thì không có xác thực nào được kích hoạt. – jaskmar

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