JAXB:当存在多个XSD时,如何知道要解组到哪个Java类?

JAXB:当存在多个XSD时,如何知道要解组到哪个Java类?,java,jaxb,Java,Jaxb,我有几个XSD文件,我使用XJC处理这些文件来生成Java类 我想读取任意XML文件,并根据XML文件的内容,将其转换为生成的Java类之一 不检查XML本身的内容,不让JAXB框架完成所有工作,是否可以做到这一点 例如,假设我有以下XSD文件: dog.xsd cat.xsd 我使用XJC编译它们以生成Dog.java和Cat.java 现在,我阅读了一些任意XML,并创建了Dog或Cat的实例,具体取决于它匹配的模式 谢谢。一个可能有效的简单解决方案是尝试对其中一个进行解组,如果处理正常,那

我有几个XSD文件,我使用XJC处理这些文件来生成Java类

我想读取任意XML文件,并根据XML文件的内容,将其转换为生成的Java类之一

不检查XML本身的内容,不让JAXB框架完成所有工作,是否可以做到这一点

例如,假设我有以下XSD文件:

dog.xsd cat.xsd

我使用XJC编译它们以生成Dog.java和Cat.java

现在,我阅读了一些任意XML,并创建了Dog或Cat的实例,具体取决于它匹配的模式


谢谢。

一个可能有效的简单解决方案是尝试对其中一个进行解组,如果处理正常,那么它就是正确的,如果您得到了一个异常,您应该使用它作为第二个异常。

XJC根据模式中的类型而不是模式本身生成类。它将生成的类放入基于该目标名称空间的包中。如果将多个模式加载到JAXBContext中,它将自动解组为正确的类型。这几乎就是JAXB的全部要点。如果您的两个模式在同一命名空间中具有相同名称的类型,那么XJC将失败。

+1。但是,确保每个名称空间都有自己的包是非常重要的,否则package-info.java将被覆盖,并且解组将无法正常工作。