Problema generación de Java de SOAP cliente de servicios web con wsimport herramienta JDK desde un WSDL generado por una aplicación .NET 2.0

StackOverflow https://stackoverflow.com/questions/785945

Pregunta

Estoy tratando de generar un cliente para algunos servicios web SOAP utilizando la herramienta wsimport JDK 6. El WSDL fue generada por una aplicación de .NET 2.0. Para aplicaciones .NET 3.x, que trabaja muy bien.

Cuando corro

wsimport -keep -p mypackage http://myservice?wsdl

que muestra varios mensajes de error como este:

  

[ERROR] Una clase / interfaz con el mismo nombre "mypackage.SomeClass" ya está en uso.   Utilice una personalización de clase para resolver este conflicto. línea ?? de http: // myservice WSDL

Cuando genero del cliente de servicios web utilizando Axis 1.4 (utilizando el Eclipse WebTools plug-in).

¿Alguien sabe qué puedo hacer con el fin de utilizar la herramienta wsimport? Realmente no entiendo qué es lo más "clase personalización" es.

¿Fue útil?

Solución

No sé si esto era cada vez resuelto, pero pasé un tiempo buscando en Google para una solución a este mismo problema.

He encontrado una solución aquí - https: // jax- ws.dev.java.net/issues/show_bug.cgi?id=228

La solución es ejecutar wsimport con el -B-XautoNameResolution (sin espacios)

Otros consejos

Para cualquier persona experta en la lectura de este usando, esta es la forma de agregarlo al archivo .pom. Tenga en cuenta los args en la sección de configuración. Esto no se encuentra fácilmente en la documentación. Muchas gracias a Isaac Stephens por su ayuda con esto.

<!-- definition for ERPStandardWork service -->
<execution>
  <id>ERPStandardWorkService</id>
  <goals>
    <goal>wsimport</goal>
  </goals>
  <configuration>
    <!-- this resolves naming conflicts within the wsdl - there are several copies of fault report objects which clash otherwise. -->
    <args>
       <arg>-B-XautoNameResolution</arg>
    </args>
    <wsdlDirectory>${basedir}/src/main/resources/META-INF/wsdl</wsdlDirectory>
    <wsdlFiles>
        <wsdlFile>ERPStandardWork.wsdl</wsdlFile>
    </wsdlFiles>
      <wsdlLocation>${basedir}/src/main/resources/META-INF/wsdl/ERPStandardWork.wsdl
    </wsdlLocation>
    <staleFile>${project.build.directory}/jaxws/ERPStandardWork/.staleFlag
    </staleFile>
  </configuration>
</execution>

La respuesta aceptada por encima resolvería su problema, pero wouldnt corregir la causa subyacente.

El problema ocurre porque una operación en su archivo WSDL tiene el mismo nombre que un xsd: complexType en su archivo xsd - como el ejemplo a continuación. Todos los tipos y las operaciones deben tener nombres únicos.

<xsd:complexType name="SearchDocuments">
      <xsd:sequence>
        <xsd:element name="document" type="ns0:SearchDocumentById" maxOccurs="unbounded"/>
      </xsd:sequence>
</xsd:complexType>

<operation name="SearchDocuments">
      <input wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsRequest" message="tns:searchDocumentsRequest"/>
      <output wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsResponse" message="tns:searchDocumentsResponse"/>
</operation>

A fin de comprobar sus operaciones y tipos. Asegúrese de que ninguno de ellos tiene el mismo nombre, es decir no hay nombres duplicados.

Usted está posiblemente generando todas las clases desde el archivo WSDL en el mismo paquete. Si ese es el caso, intente especificar un paquete de destino diferente para cada archivo WSDL con la opción -p de wsimport.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top