У меня есть метод, как это:JAXB валидатор
private static <T> T readXML(final String file, final String schemaFile, final Class<T> clazz) {
try {
final JAXBContext context = JAXBContext.newInstance(clazz);
final Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setEventHandler(new EventHandler());
final SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
final String directory = System.getProperty("schema.dir");
unmarshaller.setSchema(schemaFactory.newSchema(new File(directory, schemaFile)));
return clazz.cast(unmarshaller.unmarshal(new File(directory, file)));
} catch (final Exception ex) {
ex.printStackTrace();
}
System.exit(1);
return null;
}
и я использую его так:
private static final Primitives primitives = readXML("primitives.xml", "primitives.xsd", Primitives.class);
Мой вопрос заключается в том, что это возможно, чтобы добавить пользовательские валидатор в unmarshaller? Я имею в виду, что позволяет сказать, что у меня есть complexType под названием Foo. И я хочу, чтобы сделать некоторые валидации на нем, которые я не могу описать в файле XSD, так что я хочу сделать что-то вроде этого:
unmarshaller.setCustomValidator(Foo.class, new MyCustomValidator());
Так MyCustomValidator будет называться каждый JAXB читает Foo. Или если я не могу описать некоторые проверки в файле xsd, то я должен проверить проверенные классы после завершения чтения JAXB?
О, btw ... Я создал классы JAXB из xsd с xjc.
Я сказал, что хочу, чтобы валидатор был обрезан. schema.newValidator() проверяет xsd. Я хочу сделать некоторые другие проверки, чем определено в xsd. – ffddani