Cześć.
Przychodzę do was z następującym problemem mianowicie, załóżmy że mamy dostarczonego XSD z klasami kontraktowymi:
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xsd:complexType name="LogonReference">
<xsd:sequence>
<xsd:element name="user" type="xsd:string" minOccurs="0"/>
<xsd:element name="password" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Logon">
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string" minOccurs="0"/>
<xsd:element name="reference">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="data" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Do generowania klas używam plugina mavenowego:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>
<executions>
<execution>
<id>xsd-to-java</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<packageName>com.matadini.data</packageName>
<sources>src/main/resources/xsd</sources>
</configuration>
</plugin>
Niestety, próba generowania klas z tej schemy klas, kończy się niepowodzeniem gdyż trafia się błąd:
[ERROR] file:/C:/Users/janusz_nosacz/IdeaProjects/jaxb-bug/src/main/resources/xsd/mydata.xsd [4,44]
com.sun.istack.SAXParseException2: Two declarations cause a collision in the ObjectFactory class.
Zauważyłem że jeżeli zmienię wartość name
z LogonReference
na np. LogonReferences
problem nie występuje. IMHO wygląda to tak że konflikt wynika z tego że klasa zagnieżdżona z Logon
generuje nazwę logonReference
i tym samym kłóci się ze wcześniej zadeklarowanym typem LogonReference
.
I moje pytanie brzmi: jak to rozwiązać? Czy ktoś się już z tym spotkał? Próbowałem coś kombinować z binding.xml
ale bez skutku. Będę wdzięczny za pomoc. ;)
Edit:
Dodam jeszcze informacyjnie że XSD nie może zostać zmodyfikowany gdyż pochodzi od firmy zewnętrznej, fajne przez poufne itp itd.