Java JAXB。用两个xsd验证XML

Java JAXB。用两个xsd验证XML,java,jakarta-ee,jaxb,Java,Jakarta Ee,Jaxb,在用两个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进行验证呢?

我看不出有什么理由可以这样做。 如果两个模式之间没有关系,这可能会有问题
如果以从XSD生成Java类为例—如果向生成器提供两个不相关的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 );
final InputStream isMain=this.getClass().getResourceAsStream(“/real.xsd”);
最终输入流为导入=
this.getClass().getResourceAsStream(“/import.xsd”);
最终输入流包括=
this.getClass().getResourceAsStream(“/include.xsd”);
最终来源包括=新来源(包括);
最终源imp=新的流源(isImport);
最终水源干管=新水源(isMain);
最终源[]schemaFiles=新源[]{
包括,imp,main
};
final SchemaFactory sf=SchemaFactory.newInstance(xmlstants.W3C\u XML\u SCHEMA\u NS\u URI);
最终模式=sf.newSchema(模式文件);
最终jaxbcontextjc=
newInstance(YourJaxb.class);
final Unmarshaller Unmarshaller=jc.createUnmarshaller();
最终JAXBElement JAXBElement=
解组器。解组器(
(b.class);
final-JAXBSource-source=new-JAXBSource(jc,jaxbElement.getValue());
最终ValidationErrorHandler val=新的ValidationErrorHandler();
final Validator Validator=schema.newValidator();
validator.setErrorHandler(val);
validator.validate(源代码);

这两个XML模式是否相关(一个导入/包含另一个)?感谢您的回复!不,他们没有。谢谢你的回答。我认为合并XSD是最好的变体。