1. Получил странную ошибку при генерации: Two declarations cause a collision in the ObjectFactory class.
2. Непонятно где ошибка, поскольку xsd без перевода строки
3. Скачал локально, отформатировал, переписал все импорты в xsd и wsdl
4. Проблемных мест было два, в первой xsd:
первое объявление
<xs:element name="PersonAddress" nillable="true" type="tns:PersonAddress"/>
второе объявление
<xs:complexType name="Person">
<xs:sequence>
<xs:element minOccurs="0" name="Address" nillable="true" type="tns:PersonAddress"/>
skip
во второй:
<xs:element name="BankFlags" nillable="true" type="tns:BankFlags"/>
<xs:complexType name="Bank">
<xs:sequence>
<xs:element minOccurs="0" name="Flags" nillable="true" type="tns:BankFlags"/>
skip
т.е ObjectFactory генерируется не совсем корректно для подобных случаев.
5. Решение нашлось тут: http://stackoverflow.com/questions/13422253/xjc-two-declarations-cause-a-collision-in-the-objectfactory-class
6. Создал фалы биндингов для этих случаев:
jaxb-binding-xsd4.xml
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0">
<jaxb:bindings schemaLocation="xsd4.xsd">
<jaxb:bindings node="//xs:element[@name='PersonAddress']">
<jaxb:factoryMethod name="TypePersonAddress"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
и
jaxb-binding-xsd9.xml
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0">
<jaxb:bindings schemaLocation="xsd9.xsd">
<jaxb:bindings node="//xs:element[@name='BankFlags']">
<jaxb:factoryMethod name="TypeBankFlags"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
7. Прописываем параметры в pom.xml
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.7.3</version>
<executions>
<execution>
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<sourceRoot>${basedir}/target/generated-sources</sourceRoot>
<wsdlOptions>
<wsdlOption>
<extraargs>
<extraarg>-verbose</extraarg> <extraarg>-b</extraarg>
<extraarg>${basedir}/src/main/resources/jaxb-binding-xsd4.xml</extraarg>
<extraarg>-b</extraarg>
<extraarg>${basedir}/src/main/resources/jaxb-binding-xsd9.xml</extraarg>
</extraargs>
<wsdl>
${basedir}/src/main/resources/service.wsdl
</wsdl>
<wsdlLocation>classpath:service.wsdl</wsdlLocation>
</wsdlOption>
</wsdlOptions>
</configuration>
</execution>
</executions>
</plugin>
8. Классы сгенерировались, ура!
Комментариев нет:
Отправить комментарий