Generación de artefactos Java para aplicaciones JAX-WS
Utilice las herramientas JAX-WS (API de Java™ para servicios web XML) para generar los artefactos de Java y JAXB (arquitectura Java para enlaces XML) necesarios para las aplicaciones de servicios web JAX-WS cuando se inicia desde JavaBeans o componentes de enterprise beans.
Antes de empezar
Acerca de esta tarea
- Las clases JAXB (arquitectura Java para enlaces XML) necesarias para clasificar y desclasificar el contenido de los mensajes.
- un archivo WSDL (Web Services Description Language) si se especifica el argumento -wsdl opcional.


No es necesario desarrollar un archivo WSDL, si se desarrollan servicios web JAX-WS que utilizan el enfoque ascendente de inicio con JavaBeans. El uso de anotaciones proporciona toda la información necesaria de WSDL para configurar el punto final de servicio del cliente. El servidor de aplicaciones admite los documentos WSDL 1.1 que cumplen las especificaciones Web Services-Interoperability (WS-I) Basic Profile 1.1 y que son documentos del estilo Documento/Literal o del estilo RPC/Literal. De forma adicional, los documentos WSDL con enlaces que declaran un atributo USE de valor LITERAL están soportados, mientras que no se da soporte a ENCODED. Para los documentos WSDL que implementan un patrón de envoltura Documento/Literal, se declara un elemento raíz en el esquema XML y se utiliza como una envoltura de operaciones para un flujo de mensaje. Existen definiciones individuales de elemento de envoltura tanto para la solicitud como para la respuesta.
Para garantizar que al mandato wsgen no le faltan métodos heredados en un bean de implementación del punto final de servicio, debe añadir la anotación @WebService a la superclase deseada o puede alterar temporalmente el método heredado en la clase de implementación con una llamada al método de superclase.
Aunque el archivo WSDL suele ser opcional cuando se desarrolla un bean de implementación de servicio web, es necesario si los puntos finales JAX-WS se exponen utilizando el transporte SOAP sobre JMS y si se está publicando el archivo WSDL. Si está desarrollando un bean de implementación de servicio JavaBeans empresarial que se invoca utilizando el transporte SOAP sobre y desea publicar el WSDL de manera que el archivo WSDL publicado contenga el URL de punto final JMS totalmente resuelto, haga que la herramienta wsgen genere el archivo WSDL especificando el argumento -wsdl . En este caso de ejemplo, debe empaquetar el archivo WSDL con la aplicación de servicio web.
Además de utilizar las herramientas desde la línea de mandatos, puede invocar estas herramientas JAX-WS desde entornos de compilación Ant. Utilice la tarea Ant com.sun.tools.ws.ant.WsGen desde el entorno de compilación Ant para invocar la herramienta wsgen. Para que funcione debidamente, esta tarea Ant requiere que se invoque Ant mediante el script ws_ant.
Procedimiento
Resultados
Tiene los artefactos Java necesarios para crear un servicio web JAX-WS.

Error: dos clases tiene el mismo nombre de tipo XML ....
Utilice @XmlType.name y @XmlType.namespace para asignarles nombres diferentes...
Este error indica
que tiene valores de @XMLType.name con el mismo nombre contenidos en paquetes
Java diferentes. Para evitar este error,
añada la clase @XML.Type.namespace a la anotación @XMLType existente para diferenciar
entre los tipos XML.gotchaCon las aplicaciones JAX-WS, la herramienta de línea de mandatos wsgen no puede ubicar los archivos de clase compartidos. Puede especificar la ubicación de estos archivos de clase utilizando la propiedad personalizada com.ibm.websphere.webservices.WSDL_Generation_Extra_ClassPath . Para obtener más información, consulte la documentación acerca de propiedades personalizadas de la máquina virtual Java .
Ejemplo
- Copie el archivo de clase de implementación del servicio EchoServicePortTypeImpl de ejemplo y el archivo de clase de la interfaz de servicio EchoServicePortType asociado en un directorio. El directorio debe contener una estructura de árbol de directorios que corresponda al nombre del paquete com.ibm.was.wssample.echo del archivo de clase.
/* Se trata de un archivo EchoServicePortTypeImpl.java de ejemplo. */ package com.ibm.was.wssample.echo; @javax.jws.WebService(serviceName = "EchoService", endpointInterface = "com.ibm.was.wssample.echo.EchoServicePortType", targetNamespace="http://com/ibm/was/wssample/echo/", portName="EchoServicePort") public class EchoServicePortTypeImpl implements EchoServicePortType { public EchoServicePortTypeImpl() { } public String invoke(String obj) { System.out.println(">> JAXB Provider Service: Request received.\n"); String str = "Failed"; if (obj != null) { try { str = obj; } catch(Exception e) { e.printStackTrace(); } } return str; } }
/* Se trata de un archivo EchoServicePortType.java de ejemplo. */ package com.ibm.was.wssample.echo; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.ws.RequestWrapper; import javax.xml.ws.ResponseWrapper; @WebService(name = "EchoServicePortType", targetNamespace = "http://com/ibm/was/wssample/echo/", wsdlLocation="WEB-INF/wsdl/Echo.wsdl") public interface EchoServicePortType { /** * * @param arg0 * @return * returns java.lang.String */ @WebMethod @WebResult(name = "response", targetNamespace = "http://com/ibm/was/wssample/echo/") @RequestWrapper(localName = "invoke", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.Invoke") @ResponseWrapper(localName = "echoStringResponse", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.EchoStringResponse") public String invoke( @WebParam(name = "arg0", targetNamespace = "http://com/ibm/was/wssample/echo/") String arg0); }
- Ejecute el mandato wsgen desde el directorio raíz_servidor_aplic\bin\. La opción -cp especifica la ubicación del archivo de clase de implementación del servicio. La opción -s especifica el directorio de los archivos de origen generados. La opción -d especifica el directorio de los archivos de salida generados. Cuando se utilizan las opciones -s o -d, en primer lugar, debe crear el directorio para los archivos de salida generados.
raíz_servidor_aplic\bin\wsgen.bat -wsdl -s c:\origen_generado\ -cp c:\mi_aplicación\classes\ com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:\artefactos_generados\
Ejecute el mandato wsgen; por ejemplo:
raíz_servidor_aplic/bin/wsgen.sh -wsdl -s c:/origen_generado/ -cp c:/mi_aplicación/classes/ com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:/artefactos_generados/
/origen_generado/com/ibm/was/wssample/echo/EchoStringResponse.java
/origen_generado/com/ibm/was/wssample/echo/Invoke.java
/artefactos_generados/EchoService.wsdl
/artefactos_generados/EchoService_schema1.xsd
/artefactos_generados/com/ibm/was/wssample/echo/EchoStringResponse.class
/artefactos_generados/com/ibm/was/wssample/echo/Invoke.class
Los archivos EchoStringResponse.java e Invoke.java son los archivos de clase Java generados. Las versiones compiladas de los archivos Java generados son los archivos Invoke.class y EchoStringResponse.class. Los archivos EchoService.wsdl y EchoService_schema1.xsd se generan porque se ha especificado la opción -wsdl.
Qué hacer a continuación
Complete la implementación de la aplicación de servicio web JAX-WS.