I used org.codehaus.mojo jaxb2-maven-plugin to generate xsd schema for my classes. Plugin site http://mojo.codehaus.org/jaxb2-maven-plugin/faq.html tell, that plugin uses JDK utility schemagen.exe to do generation. Problem is that order in generated xsd is not determined, and depends on machine you run plugin.
public class One {
public String field1;
}
public class Two {
public String field2;
}
And generated scheme:
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="two">
<xs:sequence>
<xs:element name="field2" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="one">
<xs:sequence>
<xs:element name="field1" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
But when my co-worker runs generation, he get another order:
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="one">
<xs:sequence>
<xs:element name="field1" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="two">
<xs:sequence>
<xs:element name="field2" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
We use
- JDK 1.6.0_26
- jaxb2-maven-plugin 1.3
- jaxb-impl version 2.1.12 (used by plugin)
Is there a way to control this order?
I had the same issue, and ended up applying an XSLT transform on the generated XSDs, that sorts the content, with the following XSL code :
I did the XSLT transform with the xml-maven-plugin :