【问题标题】:XSD to Java objects using the XJC (JAXB) results in [ERROR] Property "Value" is already defined. Use &lt;jaxb:property> to resolve this conflict使用 XJC (JAXB) 将 XSD 转换为 Java 对象会导致 [ERROR] 属性“值”已定义。使用 <jaxb:property> 解决此冲突
【发布时间】:2021-04-19 15:59:58
【问题描述】:

有很多与此相关的答案,但由于某种原因,我仍然感到困惑,无法为我的 XSD 获取 Java 对象。

我正在尝试使用 XJC JAXB 从 XSD 创建 Java 对象,但是当我运行 XJC 命令时会导致错误

[ERROR] Property "Value" is already defined. Use &amp;lt;jaxb:property&gt; to resolve this conflict.

因此,根据我的研究,我发现我需要编写绑定文件,所以我编写了绑定文件,但我仍然收到相同的错误,这意味着我在绑定文件中弄乱了一些东西。由于即使经过多次尝试也无法使其正常工作,所以我想发布它并获得一些解决方案。

以下是我的 XSD,它根据 XJC 命令失败消息 foo.xsd 失败:

  <xsd:complexType name="DocumentExtensionType">
    <xsd:sequence>
      <xsd:any namespace="##local" processContents="lax" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:anyAttribute processContents="lax"/>
  </xsd:complexType>

以下是我尝试并执行但仍然导致错误的JAXB 绑定:foo.xjb

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">

    <jxb:bindings schemaLocation="foo.xsd">
        <jxb:bindings
            node="//xsd:complexType[@name='DocumentExtensionType']/xsd:sequence/xsd:choice/xsd:any[@namespace='http://checklists.nist.gov/sccf/0.1']">
            <jxb:property name="any2" />
        </jxb:bindings>
    </jxb:bindings>

</jxb:bindings>

以下是我尝试过的另一个 JAXB 绑定:foo.xjb

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          version="2.1">

    <bindings schemaLocation="foo.xsd" version="1.0">
        <schemaBindings>
            <package name="com.track.doc"/>
        </schemaBindings>    
        <bindings node="//xsd:complexType[@name='DocumentExtensionType']/xsd:sequence/xsd:any[@namespace='']">
            <property name="any2"/>
        </bindings>
    </bindings>
    
</bindings>

以下是我在终端中运行的命令:

xjc -p "com.track.doc" -d "/Users/batman/Downloads/XSD" -b foo.xjb foo.xsd

有人可以指导我做错了什么吗?

【问题讨论】:

    标签: java xml xsd jaxb xjc


    【解决方案1】:

    在尝试了很多事情之后,这段代码终于为我工作了。但是,我只发布了一块 XSD,当我为这个小块运行它时它失败了,然后它可以工作,但是当我为整个 XSD 运行它时它仍然失败。不完全确定出了什么问题。

    <?xml version="1.0" encoding="UTF-8"?>
    <bindings xmlns="http://java.sun.com/xml/ns/jaxb"
              xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
              xmlns:xsd="http://www.w3.org/2001/XMLSchema"
              version="2.1">
    
        <bindings schemaLocation="foo.xsd" version="1.0">
            <schemaBindings>
                <package name="com.track.doc"/>
            </schemaBindings>    
            <bindings node="//xsd:complexType[@name='DocumentExtensionType']/xsd:sequence">
                <property name="seq1"/>
            </bindings>
        </bindings>
        
    </bindings>
    

    【讨论】:

    • 另外,请确保您作为输入传递的XSD 文件没有任何name 字段为value。就我而言,我有一个带有name = "value" 的字段。 &lt;xsd:attribute type="xsd:float" name="value" use="optional"/&gt;我把它换成了&lt;xsd:attribute type="xsd:float" name="floatValue" use="optional"/&gt;
    【解决方案2】:

    我在 XSD 中注意到的另一个问题。如果您也遇到类似的问题,那么以下可能会有所帮助:

    确保您作为输入传递的 XSD 文件没有任何名称为值的字段。 就我而言,我有一个带有name = "value" 的字段。

    <xsd:attribute type="xsd:float" name="value" use="optional"/> 
    

    我换成

    <xsd:attribute type="xsd:float" name="floatValue" use="optional"/>
    

    【讨论】:

      猜你喜欢
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2016-01-12
      • 2013-02-16
      • 2019-06-23
      • 1970-01-01
      • 2013-04-04
      相关资源
      最近更新 更多