from - Problema al generar el cliente de servicios web Java SOAP con la herramienta JDK wsimport de un WSDL generado por una aplicaciĆ³n.NET 2.0
invocar web service desde java (4)
La respuesta aceptada anteriormente resolvería su problema pero no arreglaría la causa subyacente.
El problema está sucediendo porque una operación en su archivo wsdl tiene el mismo nombre que xsd: complexType en su archivo xsd, como en el ejemplo siguiente. Todos los tipos y 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>
Así que revisa tus operaciones y tipos. Asegúrese de que ninguno de ellos tenga el mismo nombre, es decir, no tenga nombres duplicados.
wsimport
generar un cliente para algunos servicios web SOAP usando la herramienta wsimport
6 wsimport
. El WSDL fue generado por una aplicación .NET 2.0. Para aplicaciones .NET 3.X, funciona bien.
Cuando corro
wsimport -keep -p mypackage http://myservice?wsdl
muestra varios mensajes de error como este:
[ERROR] Una clase / interfaz con el mismo nombre "mypackage.SomeClass" ya está en uso. Use una personalización de clase para resolver este conflicto. línea ?? de http: // myservice? wsdl
Cuando genero el cliente de servicios web usando Axis 1.4 (usando el complemento Eclipse WebTools).
¿Alguien sabe qué puedo hacer para usar la herramienta wsimport
? Realmente no entiendo qué es la cosa de "personalización de clase".
No sé si esto alguna vez se resolvió, pero pasé un tiempo buscando en Google una solución para este mismo problema.
Encontré una solución aquí - https://jax-ws.dev.java.net/issues/show_bug.cgi?id=228
La solución es ejecutar wsimport con -B-XautoNameResolution
(sin espacios)
Para cualquiera que lea esto usando maven, esta es la forma de agregarlo al archivo .pom. Tenga en cuenta los argumentos en la sección de configuración. Esto no se encuentra muy 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>
Posiblemente esté generando todas las clases del 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.