Sugerencias para la resolución de problemas de las herramientas de línea de mandatos de los servicios web
Utilice estas sugerencias para solucionar problemas de las herramientas de la línea de mandatos WSDL2Java y Java2WSDL que se utilizan al desarrollar servicios web JAX-RPC (Java™ API for XML-based RPC - API de Java para RPC basado en XML).
Cada sección de este tema muestra un problema que puede encontrar al utilizar la herramienta WSDL2Java o Java2WSDL. Se proporciona una solución para ayudarle a resolver el problema.
Las herramientas de línea de mandatos WSDL2Java y Java2WSDL no están soportadas en la plataforma
z/OS. Esta funcionalidad la proporcionan las herramientas de ensamblaje suministradas
con
WebSphere
Application Server ejecutándose en la plataforma
z/OS. Consulte la documentación sobre las herramientas de línea de mandatos WSDL2Java y Java2WSDL para aplicaciones JAX-RPC (API Java para llamadas a procedimiento remoto XML) para obtener más información sobre estas herramientas.
System.InvalidOperationException: el método AnnuityInteropService.wsListAnnuityByHolder no se puede reflejar.
System.InvalidOperationException: Se ha producido un error al reflejar wsListAnnuityByHolderResult.
System.InvalidOperationException: La propiedad Form no puede estar sin calificar cuando hay una propiedad de espacio de nombres explícita disponible.
El problema queda expuesto cuando el método del extremo del servidor devuelve un vector y el estilo del archivo WSDL (Web Services Description Language) es de documento/literal y Form no está calificado. De forma predeterminada, se genera Form sin calificar para el estilo de documento/literal debido a que elementFormDefault="unqualified".
Existe un problema en la infraestructura .NET que puede generar una clase de proxy de servicio web que no es válida cuando los métodos de servicios web contienen determinadas matrices como parámetros. La infraestructura añade un atributo XmlArrayAttribute al parámetro y el constructor del atributo contiene "Form=Unqualified" y una definición de espacio de nombres. Aunque el atributo es válido, no es válido combinar estos dos aspectos del atributo porque se genera la excepción System.InvalidOperationException.
Para evitar este problema, no utilice los parámetros de Vector en un método de servicio web que se despliegue en WebSphere Application Server. Los parámetros de vector en un método de servicio web no funcionan con un cliente .Net o un tipo de colección Java.
Cuando ejecuta la herramienta Habilitador de punto final en una máquina habilitada para hiperhebras, se genera un error en la vista Tareas para el proyecto de aplicación de empresa. El proyecto de aplicación de empresa no se puede suprimir hasta que reinicia el área de trabajo.
Este problema se puede producir si existe una condición de competencia entre la creación automática y el validador de proyectos EJB (Enterprise JavaBeans).
Para resolver el problema, desactive la creación automática del área de trabajo antes de ejecutar la herramienta Habilitador de punto final y vuelva a activarla después.
Se producen errores de validación de la especificación JRS (Java Specification Requests) 109 al desplegar un archivo EAR (Enterprise Archive) que contenga un archivo WSDL con enlaces http, jms y ejb generados por la herramienta de línea de mandatos Java2WSDL.
La especificación JSR 109 requiere que cada componente de puerto definido en el archivo de descriptor de despliegue webservices.xml haga referencia a los elementos exclusivos <servlet-class> del archivo web.xml para una implementación de JavaBeans, o un elemento <session> exclusivo en el archivo ejb-jar.xml para una implementación de EJB. El servlet y el EJB de sesión se encuentran en el archivo webservices.xml representado por el elemento <servlet-link> o <ejb-link>.
La herramienta de línea de mandatos WSDL2Java correlaciona los puertos encontrados en un archivo WSDL con los componentes de puerto en el archivo webservices.xml generado. Si un solo servicio web tiene varios enlaces, además de un puerto para cada uno de estos enlaces, el archivo webservices.xml contiene varios componentes de puerto todos los cuales deben apuntar a la misma implementación de módulo EJB (<session>) o de JavaBeans (<servlet-class>). A causa de las restricciones JSR 109, el archivo webservices.xml no es válido y se pueden producir errores durante el proceso de despliegue.
Error en <módulo> : CHKW6030E: Clase de implementación <clase> referenciada por los componentes de puerto
<port1> y <port2>. (JSR109 1.0: 7.1.2).
Éste
es el error con datos de ejemplo:Error en WebSvcsInSession20EJB.jar : CHKW6030E: Clase
de implementación WSMultiProtocol referenciada por los
componentes de puerto WSMultiProtocolJMS y WSMultiProtocolEJB. (JSR109 1.0: 7.1.2).
Puede eludir la restricción creando varias definiciones EJB de <sesión> en el archivo ejb-jar.xml que apunten, todas ellas, a la misma clase de implementación, interfaz de inicio e interfaz remota. Aún puede utilizar las mismas clases, pero las definiciones de <sesión> del archivo ejb-jar.xml que hacen referencia a las clases e interfaces deben duplicarse.
<webservices>
<webservice-description>
<webservice-description-name>WSMultiProtocolService</webservice-description-name>
<wsdl-file>META-INF/wsdl/WSMultiProtocol.wsdl</wsdl-file>
<jaxrpc-mapping file>META-INF/WSMultiProtocol_mapping.xml</jaxrpc-mapping file>
<port-component>
<port-component-name>WSMultiProtocolEjb</port-component-name>
<wsdl-port>
<namespaceURI>http://ejb.pli.tc.wssvt.ibm.com</namespaceURI>
<localpart>WSMultiProtocolEjb</localpart>
</wsdl-port>
<service-endpoint-interface>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol
</service-endpoint-interface>
<service-impl-bean>
<ejb-link>WSMultiProtocol</ejb-link>
</service-impl-bean>
</port-component>
<port-component>
<port-component-name>WSMultiProtocolJMS</port-component-name>
<wsdl-port>
<namespaceURI>http://ejb.pli.tc.wssvt.ibm.com</namespaceURI>
<localpart>WSMultiProtocolJMS</localpart>
</wsdlport>
<service-endpoint-interface>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol
</service-endpoint-interface>
<service-impl-bean>
<ejb-link>WSMultiProtocol_2</ejb-link>
</service-impl_bean>
</port-component>
<port-component>
<port-component-name>WSMultiProtocolJMS</port-component-name>
<wsdl-port>
<namespaceURI>http://ejb.pli.tc.wssvt.ibm.com</namespaceURI>
<localpart>WSMultiProtocolJMS</localpart>
</wsdlport>
<service-endpoint-interface>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol
</service-endpoint-interface>
<service-impl-bean>
<ejb-link>WSMultiProtocol_3</ejb-link>
</service-impl_bean>
</port-component>
</webservice-description>
</webservices>
A continuación se muestra un ejemplo del archivo ejb-jar.xml.
Busque
las clases y las interfaces y cómo están duplicadas:<ejb-jar-id="ejb-jar_ID">
<display-name>WebSvcsInsSession20EJB</display-name>
<enterprise-beans>
<session-id="WSMultiProtocol">
<ejb-name>WSMultiProtocol</ejb-name>
<home>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolHome</home>
<remote>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol</remote>
<ejb-class>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolWebSvcsBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<ejb-ref-id="EjbRef_1082407586720">
<description></description>
<ejb-ref-name>ejb/BeneficiarySession</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.ibm.wssvt.tc.pli.ejb.BeneficiarySessionHome</home>
<remote>com.ibm.wssvt.tc.pli.ejb.BeneficiarySession</remote>
<ejb-link>PolicySession20EJB.jar#BeneficiarySession</ejb-link>
</ejb-ref>
<ejb-ref-id="EjbRef_1082407586790">
<description></description>
<ejb-ref-name>ejb/PolicySession</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.ibm.wssvt.tc.pli.ejb.PolicySessionHome</home>
<remote>com.ibm.wssvt.tc.pli.ejb.PolicySession</remote>
<ejb-link>PolicySession20EJB.jar#PolicySession</ejb-link>
</ejb-ref>
<session-id="WSMultiProtocol_2">
<ejb-name>WSMultiProtocol_2</ejb-name>
<home>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolHome</home>
<remote>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol</remote>
<ejb-class>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolWebSvcsBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<ejb-ref-id="EjbRef_1082407586720_2">
<description></description>
<ejb-ref-name>ejb/BeneficiarySession</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.ibm.wssvt.tc.pli.ejb.BeneficiarySessionHome</home>
<remote>com.ibm.wssvt.tc.pli.ejb.BeneficiarySession</remote>
<ejb-link>PolicySession20EJB.jar#BeneficiarySession</ejb-link>
</ejb-ref>
<ejb-ref-id="EjbRef_1082407586790_2">
<description></description>
<ejb-ref-name>ejb/PolicySession</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.ibm.wssvt.tc.pli.ejb.PolicySessionHome</home>
<remote>com.ibm.wssvt.tc.pli.ejb.PolicySession</remote>
<ejb-link>PolicySession20EJB.jar#PolicySession</ejb-link>
</ejb-ref>
<session-id="WSMultiProtocol_3">
<ejb-name>WSMultiProtocol_3</ejb-name>
<home>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolHome</home>
<remote>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol</remote>
<ejb-class>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolWebSvcsBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<ejb-ref-id="EjbRef_1082407586790_3">
<description></description>
<ejb-ref-name>ejb/BeneficiarySession</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.ibm.wssvt.tc.pli.ejb.BeneficiarySessionHome</home>
<remote>com.ibm.wssvt.tc.pli.ejb.BeneficiarySession</remote>
<ejb-link>PolicySession20EJB.jar#BeneficiarySession</ejb-link>
</ejb-ref>
<ejb-ref-id="EjbRef_1082407586790_3">
<description></description>
<ejb-ref-name>ejb/PolicySession</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.ibm.wssvt.tc.pli.ejb.PolicySessionHome</home>
<remote>com.ibm.wssvt.tc.pli.ejb.PolicySession</remote>
<ejb-link>PolicySession20EJB.jar#PolicySession</ejb-link>
</ejb-ref>
</session>
Si una aplicación utiliza funciones proporcionadas por un determinado arreglo que se elimina posteriormente, la aplicación muestra un mensaje de error. Si elimina un arreglo, asegúrese de volver a probar las aplicaciones para comprobar si hay errores. Vuelva a desplegar cualquier aplicación que muestre mensaje de error debido a la falta de un arreglo.
Por ejemplo, suponga que instala un fixpack en WebSphere Application Server y crea el servicio web de cotización en bolsa StockQuote. La herramienta de línea de mandatos WSDL2Java se utiliza en un rol de desplegador y genera una clase ServiceLocator que amplía la clase AgnosticService.
java.lang.NoClassDefFoundError:
Error al definir la clase:
com.ibm.ws.wsfvt.test.stockquote.StockQuoteServiceLocator
Este error indica que la clase:
com.ibm.webservices.multiprotocol.AgnosticService
no se ha podido localizar al definir la clase:
com.ibm.ws.wsfvt.test.stockquote.StockQuoteServiceLocator
Necesita
volver a desplegar la aplicación en
WebSphere Application
Server para emitir código que no utilice la versión de
WebSphere Application
Server no soportada por la clase de servicios web que se utilizan.Si utiliza un entorno que requiere un servidor proxy para acceder a Internet durante la ejecución del mandato WSDL2Java, es posible que el mandato WSDL2Java no encuentre la información de Internet, dado que el servidor proxy puede exceder el tiempo de espera. Por ejemplo, si el archivo WSDL de entrada está ubicado en Internet en lugar de en una unidad local y tiene que recuperarlo de Internet, el mandato WSDL2Java no podrá encontrarlo porque el servidor proxy excede el tiempo de espera.
Puede solucionar
este problema editando el archivo WSDL2Java.bat si utiliza el sistema operativo Windows o el archivo WSDL2Java.sh si utiliza el sistema operativo Linux o AIX. Estos archivos se encuentran en el directorio <raíz_instalación>/WebSphere/AppServer/bin.
![[Windows]](../images/windows.gif)
![[z/OS]](../images/ngzos.gif)
PROXY_INFO="-Dproxy.httpHost=suSistPrpalProxy -Dproxy.httpPort=suPuertoProxy
![[Linux]](../images/linux.gif)
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Solaris]](../images/solaris.gif)
![[z/OS]](../images/ngzos.gif)
PROXY_INFO="-Dproxy.httpHost=suSistPrpalProxy -Dproxy.httpPort=suPuertoProxy
![[IBM i]](../images/iseries.gif)
- Edite el archivo raíz_perfil/bin/WSDL2Java y añada la línea siguiente al principio del archivo:
Si utiliza esta opción, se debe invocar el mandato WSDL2Java, localizado en el directorio raíz_perfil/bin.export PROXY_INFO="-Dproxy.httpHost=yourProxyHost -Dproxy.httpPort=yourProxyPort"
- Establezca la variable de entorno PROXY_INFO en la sesión Qshell antes de invocar el mandato WSDL2Java como se indica a continuación:
Si utiliza esta opción, debe ejecutar el mandato cada vez que se inicia una sesión QSHELL nueva. Si no desea iniciar una sesión QSHELL cada vez, puede añadir el mandato al perfil.$ export PROXY_INFO ="-Dproxy.httpHost=yourProxyHost -Dproxy.httpPort=yourProxyPort"
Si ejecuta la herramienta de línea de mandatos WSDL2Java en un
documento WSDL que contiene una dirección web de punto final de estilo JMS, por
ejemplo, jms:/..., el archivo urlprotocols.jar
que contiene el manejador de protocolo personalizado para el protocolo JMS debe
estar en la declaración de variable CLASSPATH. El error WSWS3099E:
Error: Error de emisor. Se evita la dirección de punto final no válida del puerto <x> en el servicio <y>: <jms-url-string> asegurándose de que el archivo urlprotocols.jar está en la sentencia de la variable CLASSPATH.
Para añadir el archivo urlprotocols.jar a la declaración de variable CLASSPATH:
En plataformas
Windows,
edite el archivo raíz_instalación\bin\setupCmdLine.bat y
localice la línea que establece la variable de entorno WAS_CLASSPATH. Añada
%raíz_instalación%\lib\urlprotocols.jar al final de la línea
que establece la variable de entorno WAS_CLASSPATH.
En sistemas operativos
Linux,
AIX,
HP-UX y Solaris, edite el archivo raíz_instalación/bin/setupCmdLine.sh y añada
$raíz_instalación/lib/urlprotocols.jar al final de la línea que establece la variable de
entorno WAS_CLASSPATH.
Asegúrese de utilizar el carácter delimitador adecuado para la plataforma. Por ejemplo, utilice un punto y coma (;) para las plataformas de Windows y dos puntos (:) para los sistemas operativos Linux, AIX, HP-UX y Solaris.