在Java bean类中使用JAXB(xjc)进行转换

时间:2013-08-27 13:55:41

标签: java

我的问题是: 我必须从头开始实现Web要素服务服务器,我想从XSD精确地获得:

ħ**号码://schemas.opengis.net/wfs/1.1.0/wfs.xsd

我运行命令:

xjc h**p://schemas.opengis.net/wfs/1.1.0/wfs.xsd

[ERROR] Property "Title" is already defined. Use <jaxb:property> to resolve this conflict.
  line 232 of h**p://www.w3.org/1999/xlink.xsd

[ERROR] The following location is relevant to the above error
  line 219 of h**p://www.w3.org/1999/xlink.xsd

[ERROR] Property "Title" is already defined. Use <jaxb:property> to resolve this conflict.
  line 261 of h**p://www.w3.org/1999/xlink.xsd

[ERROR] The following location is relevant to the above error
  line 246 of h**p://www.w3.org/1999/xlink.xsd

Failed to parse a schema.

然而,当我跑:

xjc h**p://schemas.opengis.net/ows/1.1.0/owsGetCapabilities.xsd 

该过程100%成功。

hw p://www.w3.org/1999/xlink.xsd的片段部分是:

    <xs:attributeGroup name="locatorAttrs">
  <xs:attribute ref="xlink:type" fixed="locator" use="required"/>
  <xs:attribute ref="xlink:href" use="required"/>
  <xs:attribute ref="xlink:role"/>
  <xs:attribute ref="xlink:title"/>
  <xs:attribute ref="xlink:label">
   <xs:annotation>
    <xs:documentation>
     label is not required, but locators have no particular
     XLink function if they are not labeled.
    </xs:documentation>
   </xs:annotation>
  </xs:attribute>
 </xs:attributeGroup>

 <xs:group name="locatorModel">
  <xs:sequence>
   <xs:element ref="xlink:title" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:group>

 <xs:complexType name="locatorType">
  <xs:group ref="xlink:locatorModel"/>
  <xs:attributeGroup ref="xlink:locatorAttrs"/>
 </xs:complexType>

 <xs:element name="arc" type="xlink:arcType" abstract="true"/>

 <xs:attributeGroup name="arcAttrs">
  <xs:attribute ref="xlink:type" fixed="arc" use="required"/>
  <xs:attribute ref="xlink:arcrole"/>
  <xs:attribute ref="xlink:title"/>
  <xs:attribute ref="xlink:show"/>
  <xs:attribute ref="xlink:actuate"/>
  <xs:attribute ref="xlink:from"/>
  <xs:attribute ref="xlink:to">
   <xs:annotation>
    <xs:documentation>
     from and to have default behavior when values are missing
    </xs:documentation>
   </xs:annotation>
  </xs:attribute>
 </xs:attributeGroup>

 <xs:group name="arcModel">
  <xs:sequence>
   <xs:element ref="xlink:title" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:group>

怎么了?

1 个答案:

答案 0 :(得分:5)

问题在于xmlns:xlink =“http://www.w3.org/1999/xlink”

解决方案: 创建并使用binding.xjb:

<jxb:bindings version="2.0"
      xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
      xmlns:xs="http://www.w3.org/2001/XMLSchema" >

    <jxb:bindings schemaLocation="http://www.w3.org/1999/xlink.xsd" node="/xs:schema">

        <jxb:bindings node="//xs:attributeGroup[@name='locatorAttrs']">
            <jxb:bindings node=".//xs:attribute[@ref='xlink:title']">
                <jxb:property name="title1"/>
            </jxb:bindings>
        </jxb:bindings>

        <jxb:bindings node="//xs:attributeGroup[@name='arcAttrs']">           
            <jxb:bindings node=".//xs:attribute[@ref='xlink:title']">
                <jxb:property name="title2"/>
            </jxb:bindings>            
        </jxb:bindings>              
    </jxb:bindings>          

</jxb:bindings>

working ant任务(build.xml和binding.xjb在同一个文件夹中):

<xjc schema="${src.folder.xsd}\${src.file.xsd}" package="${src.package}" destdir="${src.folder}" binding="binding.xjb">
        <produces dir="${src.folder}\${src.package}" includes="**/*.java" />
</xjc>