java - wsimport-Dos declaraciones causan una colisión, la misma línea dada
xsd jaxb (1)
wsimport
usar wsimport
para generar un cliente para un punto final SOAP. El WSDL y todos los archivos XSD utilizados son copias locales.
Este es el comando que se está ejecutando:
wsimport ./bwWsdl.xml -p com.generated -Xnocompile -d ../src -extension -keep -XadditionalHeaders -B-XautoNameResolution
Lo que da este error:
[ERROR] Two declarations cause a collision in the ObjectFactory class.
line 16 of file:/schemas/newSchema.xsd
[ERROR] (Related to above error) This is the other declaration.
line 16 of file:/schemas/newSchema.xsd
Tenga en cuenta que el número de línea es el mismo para la colisión informada.
Aquí está el esquema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
version="2.004" id="OTA2003A2009A">
<xs:complexType name="TPA_ExtensionsType">
<xs:annotation>
<xs:documentation xml:lang="en">Description here.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:element name="TPA_Extensions" type="TPA_ExtensionsType">
<xs:annotation>
<xs:documentation xml:lang="en">More description here.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
He intentado eliminar la definición de tipo, pero se hace referencia en muchos otros lugares.
¿Podría alguien ofrecer consejos sobre cómo hacer que esto funcione?
Gracias
Editar:
Aquí están las líneas donde WSDL importa estos esquemas:
<definitions name=''ResLookupGet'' targetNamespace=''http://org.jboss.ws/resLookupGet'' xmlns=''http://schemas.xmlsoap.org/wsdl/'' xmlns:http=''http://schemas.xmlsoap.org/wsdl/http/'' xmlns:mime=''http://schemas.xmlsoap.org/wsdl/mime/'' xmlns:ns=''http://www.opentravel.org/OTA/2003/05/beta'' xmlns:rq=''http://www.opentravel.org/OTA/2003/05/betarq'' xmlns:rs=''http://www.opentravel.org/OTA/2003/05/betars'' xmlns:soap=''http://schemas.xmlsoap.org/wsdl/soap/'' xmlns:tns=''http://org.jboss.ws/resLookupGet'' xmlns:xsd=''http://www.w3.org/2001/XMLSchema''>
<types>
<xsd:schema targetNamespace=''http://org.jboss.ws/resLookupGet'' xmlns:tns=''http://org.jboss.ws/resLookupGet'' xmlns:xsd=''http://www.w3.org/2001/XMLSchema''>
<xsd:import namespace=''http://www.opentravel.org/OTA/2003/05/betarq'' schemaLocation=''./schemas/FooAffiliateHeaderRQ.xsd''/>
<xsd:import namespace=''http://www.opentravel.org/OTA/2003/05/betarq'' schemaLocation=''./schemas/FooResLookupGetRQ.xsd''/>
<xsd:import namespace=''http://www.opentravel.org/OTA/2003/05/betars'' schemaLocation=''./schemas/FooResLookupGetRS.xsd''/>
</xsd:schema>
</types>
<message name=''ResLookupGetRQ''>
<part element=''rq:FooResLookupGetRQ'' name=''FooResLookupGetRQ''></part>
</message>
<message name=''ResLookupGetRS''>
<part element=''rs:FooResLookupGetRS'' name=''FooResLookupGetRS''></part>
</message>
Gracias a la ayuda de @Petru Gardea, finalmente pude superar esto omitiendo la -p com.generated
paquete -p com.generated
para wsimport. Así que esto es lo que eventualmente pude ejecutar para superar este problema:
wsimport ./bwWsdl.xml -Xnocompile -d ../src -extension -keep -XadditionalHeaders -B-XautoNameResolution
El razonamiento es que wsimport
intenta generar clases en el mismo paquete con el mismo nombre y / o métodos, lo que obviamente no puede hacer.
Por lo tanto, al omitir la declaración del paquete forzado, wsimport
puede colocar las clases en los paquetes que desee, lo que resulta en 3 paquetes diferentes según la <xsd:schema>
en el WSDL.
Gracias de nuevo @Petru!