【问题标题】:Can I use JAXB to process XML schema through an xml schema?我可以使用 JAXB 通过 xml 模式处理 XML 模式吗?
【发布时间】:2011-10-07 16:41:52
【问题描述】:

我需要在 XSD 中处理类型及其关系(查找从抽象类型降序的所有具体类型等) 此页面声称可以通过 JAXB:http://www.antonioshome.net/blog/2009/20091012-1.php 但我收到 Java 6 附带的 xjc 错误。错误是:

[ERROR] Element "{http://www.w3.org/2001/XMLSchema}annotation" shows up in more
than one properties.
  line 248 of file:/C:/tmp/xsdProcessing/XMLSchema.xsd

[ERROR] The following location is relevant to the above error
  line 242 of file:/C:/tmp/xsdProcessing/XMLSchema.xsd

我看到了对问题的引用,但我没有看到对问题根源或解决方案的任何明确解释。 那么到今天为止,是否可以使用 JAXB 为 xml 模式处理 xml 模式?如果没有,还有什么替代方案? JAXB 如何处理模式以创建 Java 对象?

【问题讨论】:

    标签: java xsd jaxb


    【解决方案1】:

    您的 XMLSchema 似乎无效。您是否尝试过针对 XML 处理工具(例如带有 XML 插件或 XmlSpy 的 Notepad++)对其进行验证?

    【讨论】:

    • 我的 xml 架构是 w3.org/2001/XMLSchema.xsd w3 中 xml 架构的 xml 架构。我怀疑它有有效性问题。人们报告成功,请参阅我提供的链接。在我给出的地址处使用 Java 6 和 xml 架构,我看到了问题中包含的错误。
    【解决方案2】:

    是的,你可以让它与 xjc 一起工作。您遇到的问题是我在解决此问题时遇到的两个障碍中的第一个。

    我并不完全清楚问题的根源,但解决方案是 JAXB RI 中存在的“更简单和更好的绑定”扩展。它在某种程度上被描述为here,并且在Kohsuke Kawaguchi 的其他一些旧博客文章中我现在找不到。

    如果您在运行 xjc 时使用 -extension 标志和类似于 my answer to another question 中的绑定文件(我在尝试编译 XMLSchema.xsd 时遇到的第二个问题),那么您应该会成功。

    公平地说,我实际上还没有尝试(取消)编组任何导入 XML Schema 的 XML,所以可能还有更多我还没有遇到的问题。

    【讨论】:

      【解决方案3】:

      我在使用 JAXB 2.1.10 时遇到了同样的问题。这似乎是 Java 6 中 JAXB 的已知问题。使用以下 JAXB 绑定文件解决了该问题:

      <?xml version="1.0" encoding="UTF-8"?>
      <!-- bindings.xml -->
      <jaxb:bindings 
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
          xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
          jaxb:extensionBindingPrefixes="xjc"
          version="2.1">
      
          <jaxb:bindings schemaLocation="XMLSchema.xsd" node="//xs:element[@name='schema']/xs:complexType/xs:complexContent/xs:extension/xs:sequence[1]">
              <jaxb:property name="SchemaElements"/>
          </jaxb:bindings>
      </jaxb:bindings>
      

      输出:

      $ls
      XMLSchema.dtd  XMLSchema.xsd  bindings.xml  datatypes.dtd  src  xml.xsd
      
      $xjc -version
      xjc version "JAXB 2.1.10 in JDK 6"
      JavaTM Architecture for XML Binding(JAXB) Reference Implementation, (build JAXB 2.1.10 in JDK 6)
      
      $xjc -p com.example.document.xsd -d src -extension -b bindings.xml XMLSchema.xsd
      parsing a schema...
      compiling a schema...
      com\example\document\xsd\All.java
      com\example\document\xsd\Annotated.java
      com\example\document\xsd\Annotation.java
      

      【讨论】:

        猜你喜欢
        • 2011-05-09
        • 2012-09-24
        • 1970-01-01
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多