У нас есть большое количество классов, использующих JAXB для сериализации, и мы не использовали никаких проверок для них во время процесса маршалинга или демаршаллинга.
Изучал на JAXB встроенный механизм для проверки с использованием метода заданной схемы. Теперь, поскольку у меня есть большое количество классов моделей JAXB, генерация схемы для большого количества классов приведет к сложной схеме. Попытка выяснить, существует ли идеальный вариант, с помощью которого проверка может быть выполнена для определенного класса только в схеме, и игнорировать остальные?
У меня есть следующие строки кода,
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema;
JAXBContext jc;
try {
jc = JAXBContext.newInstance(MyClass.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
schema = sf.newSchema(new File("c:\\schema1.xsd"));
unmarshaller.setSchema(schema);
unmarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent event) {
if (event == null) {
return true;
}
String line = "unknown"; //$NON-NLS-1$
String col = "unknown"; //$NON-NLS-1$
ValidationEventLocator locator = event.getLocator();
if (locator != null) {
line = Integer.toString(locator.getLineNumber());
col = Integer.toString(locator.getColumnNumber());
}
return true;
}
});
unmarshaller.unmarshal(new File("C:\\Temp\\Test\\Test.xml"));
Я автоматически сгенерировал schema1.xsd для MyClass.java, перейдя по ссылке Можно ли сгенерировать XSD из класса, аннотированного JAXB?
Теперь, в моем случае, существует множество других классов JAXB модели, кроме MyClass.java, поэтому событие вызывается для всех тех, кто указывает на ошибку, которую я не хочу.
Как я могу ограничить схему только для одного класса JAXB? Это возможно?
Заранее спасибо