У меня есть несколько классов с аннотациями JAXB, я создал несколько экземпляров, и мне нужно проверить их на соответствие моим файлам XSD. Я должен иметь возможность получить подробную информацию о том, что не так, когда объекты недействительны.
Пока мне не повезло, я знаю об этом классе ValidationEventHandler, но, по-видимому, я могу использовать его с классом Unmarshaller, проблема в том, что мне нужно проверять объекты, а не необработанный XML.
У меня есть этот код:
MyClass myObject = new MyClass();
JAXBContext jaxbContext = JAXBContext.newInstance("x.y.z");
JAXBSource jaxbSource = new JAXBSource(jaxbContext, myObject);
SchemaFactory factory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source schemaFile = new StreamSource(getClass().getClassLoader()
.getResourceAsStream("mySchema.xsd"));
Schema schema = factory.newSchema(schemaFile);
Validator validator = schema.newValidator();
validator.validate(jaxbSource);
Этот код будет работать, он проверит объект и выдаст исключение с сообщением, примерно так:
cvc-pattern-valid: значение '12345678901' не является допустимым по аспекту относительно шаблона '\d{10}' для типа 'id'.]
Проблема в том, что мне нужны конкретные детали, с такой строкой мне пришлось бы анализировать все сообщения.