【问题标题】:JAXB: How to know which Java class to unmarshal to when there are multiple XSDs?JAXB:当有多个 XSD 时,如何知道要解组到哪个 Java 类?
【发布时间】:2011-10-06 23:24:11
【问题描述】:

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

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

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

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

dog.xsd cat.xsd

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

我现在读取一些任意 XML,并创建一个 Dog 或 Cat 的实例,具体取决于它匹配的架构。

谢谢。

【问题讨论】:

    标签: java jaxb


    【解决方案1】:

    一个可能可行的简单解决方案是尝试解组其中一个,如果它没问题,那么它是正确的,如果你得到一个例外,它是你应该使用的第二个。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • +1。确保每个命名空间都有自己的包非常重要,否则 package-info.java 将被覆盖并且解组将无法正常工作。
      猜你喜欢
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2021-04-07
      相关资源
      最近更新 更多