我们有大量使用JAXB进行序列化的类,并且在编组或解组过程中没有对它们使用任何验证。 正在探索JAXB的内置机制,以便使用set schema方法进行验证。现在因为我有大量的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"));
我已按照链接Is it possible to generate a XSD from a JAXB-annotated class?为MyClass.java自动生成了schema1.xsd 现在,在我的情况下,除了MyClass.java之外还有许多其他模型JAXB类,因此为所有那些表示我不想要的错误的事件引发了事件。 我怎么能只限制单个JAXB类的模式?这有可能吗? 提前致谢