2013-12-14 4 views
1

У меня есть метод, как это: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.

+0

Я сказал, что хочу, чтобы валидатор был обрезан. schema.newValidator() проверяет xsd. Я хочу сделать некоторые другие проверки, чем определено в xsd. – ffddani

ответ

0

Я полагаю, что если правила проверки не могут быть описаны в xsd, то это не относится к сфере применения JAXB. Но если вы создадите структуру, когда вы можете получить собственный объект проверки, основанный на классе, вы можете добавить эту логику в конце вашего метода, чтобы сохранить качество его инкапсуляции.

Смежные вопросы