XSD 到 Java 使用 XJC (JAXB) 的对象导致 [ERROR] 属性 "Value" 已定义。使用 <jaxb:属性> 来解决这个冲突

XSD to Java objects using the XJC (JAXB) results in [ERROR] Property "Value" is already defined. Use &lt;jaxb:property> to resolve this conflict

有很多与此相关的答案,但出于某种原因,我仍然感到困惑,无法为我的 XSD.

获取 Java 对象

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

[ERROR] Property "Value" is already defined. Use &lt;jaxb:property> 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>

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

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

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

在尝试了很多东西之后,这段代码终于对我有用了。但是,我只发布了 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 中注意到的另一个问题。如果您也遇到类似问题,那么以下内容可能会有所帮助:

确保作为输入传递的 XSD 文件没有任何字段名称作为值。 在我的例子中,我有一个字段 name = "value".

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

我替换成

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