Можно ли проверить XML-код с JAXB 2.0?
По-видимому, в версии 2 JAXB - класс валидатора устарел - означает ли это, что маршаллер автоматически проверяет ваш XML? Если это так, похоже, не жалуется на некоторые неправильные XML, которые я формирую! Может ли кто-нибудь дать мне несколько советов о том, как я могу проверить маршаллированный XML, чтобы убедиться, что он соответствует схеме XSD.
Большое спасибо.
Ответы
Ответ 1
Возможности проверки были расширены в JAXB 2.0 с помощью схемы проверки схемы JAXP 1.3.
Где вы это делали:
unmarshaller.setValidating(true);
теперь вам нужно сделать:
SchemaFactory sf = SchemaFactory.newInstance(
javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("myschema.xsd"));
unmarshaller.setSchema(schema);
Если вы передаете null в setSchema
, он отключает проверку.
Пожалуйста, проверьте эту ссылку.
Ответ 2
Если вы хотите проверить, что объекты Java генерируют действительный XML в соответствии со схемой, посмотрите проект JAXB-Verification:
https://jaxb-verification.dev.java.net/
Это плагин JAXB RI для xjc, который будет генерировать реализацию ObjectVerifier для схемы XML. Это позволяет избежать маршализации объектов Java для проверки XML.