Umberto Palo
Umberto Palo

Reputation: 41

convert with JAXB (xjc) at a java bean class

my problem is this: I have to implement a Web Feature Service server from scratch, I wanted to get from XSD precise:

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

I run the command:

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.

However, when i run:

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

the process is 100% successful.

the fragment section of h**p://www.w3.org/1999/xlink.xsd is:

    <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>

What's wrong?

Upvotes: 4

Views: 3375

Answers (1)

Rafał Oleksiak
Rafał Oleksiak

Reputation: 119

Problem is with xmlns:xlink="http://www.w3.org/1999/xlink"

Solution: Create and use 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 task (build.xml and binding.xjb are in the same folder):

<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>

Upvotes: 6

Related Questions