是否可以在通过两个 xsd 解组时验证 xml?我知道您通过执行以下操作将 xml 解组为具有多个上下文的对象:
context = JAXBContext.newInstance("onepackagecontext:secondpackagecontext");
我可以使用一种模式进行验证:
unmarshaller.setSchema(getSchema(url));
我该怎么做才能使用两个 XSD 进行验证?
是否可以在通过两个 xsd 解组时验证 xml?我知道您通过执行以下操作将 xml 解组为具有多个上下文的对象:
context = JAXBContext.newInstance("onepackagecontext:secondpackagecontext");
我可以使用一种模式进行验证:
unmarshaller.setSchema(getSchema(url));
我该怎么做才能使用两个 XSD 进行验证?
你可以这样做:
final InputStream isMain = this.getClass().getResourceAsStream( "/real.xsd" );
final InputStream isImport=
this.getClass().getResourceAsStream( "/import.xsd" );
final InputStream isInclude =
this.getClass().getResourceAsStream( "/include.xsd" );
final Source include = new StreamSource( isInclude );
final Source imp = new StreamSource( isImport );
final Source main = new StreamSource( isMain );
final Source[] schemaFiles = new Source[] {
include, imp, main
};
final SchemaFactory sf = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
final Schema schema = sf.newSchema( schemaFiles );
final JAXBContext jc =
JAXBContext.newInstance( YourJaxb.class );
final Unmarshaller unmarshaller = jc.createUnmarshaller();
final JAXBElement<YourJaxb> jaxbElement =
unmarshaller.unmarshal(
YourJaxb.class );
final JAXBSource source = new JAXBSource( jc, jaxbElement.getValue() );
final ValidationErrorHandler val = new ValidationErrorHandler();
final Validator validator = schema.newValidator();
validator.setErrorHandler( val );
validator.validate( source );
我看不出这应该起作用的原因。如果两个模式之间没有关系,这可能会出现问题
如果您看一下从 XSD 生成 Java 类的示例 - 如果您向生成器提供两个不相关的 XSD,则可能会导致尝试创建多重继承和问题像那样。我怀疑您在这里可能有一些糟糕的设计
我建议您重新访问这些模式,看看如何将它们统一到一个能够满足您需求的模式中。