2012-08-09 43 views
12

Intentando usar wsimport para generar un cliente para un punto final SOAP. El WSDL y todos los archivos XSD utilizados son copias locales.wsimport - Dos declaraciones causan una colisión, se da la misma línea

Este es el comando que se está ejecutando:

wsimport ./bwWsdl.xml -p com.generated -Xnocompile -d ../src -extension -keep -XadditionalHeaders -B-XautoNameResolution 

cual 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 

Nota el número de línea es el mismo para la colisión informado.

He aquí 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 quitar la definición del tipo, pero es referenciado en una serie de otros lugares.

¿Alguien podría ofrecer algún consejo sobre cómo hacer que esto funcione?

Gracias

Editar:

He aquí las líneas donde el 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> 
+0

¿Hay alguna posibilidad de que publique un conjunto de archivos que darían lo mismo? Este mensaje de error suele ser causado al cargar la misma definición dos o más veces de manera que confunde al cargador con respecto al URI base. –

+0

No lo creo-- hay 136 esquemas totales que lo están haciendo referencia ... – Cuga

+0

Intentaré visualizar/rastrear las rutas en el archivo XSD que está causando el problema. Si esto se basa en Open Travel Alliance ... supongo que construiste el WSDL; ¿Puedes indicar la estructura de alto nivel, es decir, si importas OTA xsds desde tu WSDL, defines contenido de XSD en WSDL o importas un XSD externo que a su vez hace referencia a todos los demás? –

Respuesta

14

Gracias a la ayuda de @Petru Gardea yo era capaz de conseguir el tiempo más allá de este omitiendo la especificación del paquete -p com.generated en wsimport. Así que esto es lo que finalmente fue capaz de correr a superar este problema:

wsimport ./bwWsdl.xml -Xnocompile -d ../src -extension -keep -XadditionalHeaders -B-XautoNameResolution 

El razonamiento para que se wsimport está tratando de generar clases en el mismo paquete con el mismo nombre y/o métodos, que, obviamente, no puedo hacer.

omitiendo la declaración de paquete forzado, wsimport puede colocar las clases en los paquetes que desee, que resultan ser 3 paquetes diferentes según la definición <xsd:schema> en el WSDL.

Gracias de nuevo @Petru!

+1

En JDK 1.8, esto ha llegado a ser útil también: 'wsimport wsdlName.xml -J-Djavax.xml.accessExternalDTD = all ... 'Además de' wsimport wsdlName.xml -J-Djavax.xml.accessExternalSchema = all ... ' – Cuga

Cuestiones relacionadas