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

Para desarrollar una aplicación de servicio web JAX-WS (API de Java para servicios web basados en XML), debe desarrollar antes una implementación SEI (interfaz de punto final de servicio) que describa de manera explícita o implícita la SEI.

Acerca de esta tarea

Cuando utilice un enfoque ascendente para desarrollar servicios web JAX-WS, utilice la herramienta de línea de mandatos wsgen en la implementación de punto final de servicio existente. La herramienta wsgen procesa una clase de implementación de punto final compilada como entrada y genera los siguientes artefactos portátiles:
  • 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.
Supported configurations Supported configurations: Las herramientas de línea de mandatos wsimport, wsgen, schemagen y xjc no tienen soporte en la plataforma z/OS. Esta funcionalidad la proporcionan las herramientas de ensamblaje proporcionadas con WebSphere Application Server que se ejecutan en la plataforma z/OS. Obtenga información sobre estas herramientas de línea de mandatos para las aplicaciones JAX-WS para obtener más información sobre estas herramientas. sptcfg
Best practice Best practice: WebSphere Application Server proporciona la API Java para servicios web basados en XML (JAX-WS) y las herramientas de arquitectura Java para enlaces XML (JAXB). Las herramientas de línea de mandatos wsimport, wsgen, schemagen y xjc se encuentran en el directorio raíz_servidor_aplicaciones\bin\ de WebSphere Application Server tradicional. Los mandatos xjc y schemagen se encuentran en el directorio raíz_servidor_aplicaciones\jaxb\bin\ del perfil Liberty. En algunas ocasiones, los artefactos generados por las herramientas que proporcionan WebSphere Application Server y JDK dan soporte a los mismos niveles de las especificaciones. En general, los artefactos generados por las herramientas JDK tienen portabilidad en otros entornos de ejecución compatibles. Sin embargo, es más recomendable utilizar las herramientas que se proporcionan con este producto para alcanzar una integración sin interrupciones dentro del entorno de WebSphere Application Server y aprovechar las características que puedan estar soportadas únicamente en WebSphere Application Server. Para aprovechar las herramientas de JAX-WS y JAXB V2.2, utilice las herramientas que se proporcionan con el servidor de aplicaciones y que se encuentran en el directorio raíz_servidor_aplicaciones\bin\.bprac

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

  1. Localice el archivo de clase de implementación del punto final de servicio.
  2. Ejecute el mandato wsgen para generar los artefactos portátiles. La herramienta wsgen se halla en el directorio raíz_servidor_aplic/bin/.
    [Windows]
    raíz_servidor_aplicaciones\bin\wsgen.bat
    [opciones] clase_implementación_servicio
    [AIX][HP-UX][Linux][Solaris]
    raíz_servidor_aplicaciones/bin/
    wsgen.sh [opciones] clase_implementación_servicio
    [IBM i]
    raíz_servidor_aplicaciones/bin/
    wsgen [opciones] clase_implementación_servicio
    (Opcional) Utilice las opciones siguientes con el mandato wsgen:
    • Utilice la opción -verbose para ver una lista de los archivos generados, junto con mensajes de información adicionales.
    • Utilice la opción -keep para guardar los archivos Java generados.
    • Utilice la opción -wsdl para generar un archivo WSDL. Si está desarrollando un bean de implementación de servicio que se va a invocar utilizando el transporte HTTP, el archivo WSDL generado por la herramienta de línea de mandatos wsgen durante este paso será opcional. Sin embargo, si está desarrollando un bean de implementación que se va a invocar utilizando el transporte SOAP sobre JMS, el archivo WSDL generado por la herramienta wsgen durante este paso será necesario en los siguientes pasos de aplicaciones JAX-WS de desarrollo, por lo que deja de ser opcional.

    Consulte información sobre wsgen para conocer este mandato y las opciones adicionales que se pueden especificar.

Resultados

Tiene los artefactos Java necesarios para crear un servicio web JAX-WS.

Avoid trouble Avoid trouble: El mandato wsgen no distingue el espacio de nombres XML entre varias anotaciones XMLType que tienen el mismo nombre @XMLType definido en distintos paquetes Java. Cuando se produce este escenario, se genera el error siguiente:
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.gotcha

Con 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

En el ejemplo siguiente se muestra cómo utilizar el mandato wsgen para procesar la clase de implementación de punto final de servicio y generar artefactos JAX-WS. Esta clase de implementación del servicio EchoService de ejemplo utiliza un punto final de servicio JavaBeans explícito.
  1. 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);
    
    }
  2. 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.
    [Windows]
    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\
    [Linux][AIX][HP-UX][Solaris]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/
Después de generar los artefactos Java mediante el mandato wsgen, se generan los archivos siguientes:
/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.


Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_devjaxwsartifactsbean
File name: twbs_devjaxwsartifactsbean.html