Migración de servicios web de Apache SOAP a servicios web JAX-RPC basados en estándares Java EE

Puede migrar servicios web desarrollados con Apache SOAP a servicios web JAX-RPC (API Java™ para RPC basadas en XML) desarrollados basándose en la especificación Web Services for Java EE (Java Platform, Enterprise Edition).

Antes de empezar

Si ha utilizado servicios web basados en Apache SOAP y, ahora, desea desarrollar e implementar servicios web que se basan en Java, tendrá que migrar las aplicaciones cliente desarrolladas con todas las versiones de 4.0 y 5.0 anteriores a la versión 5.0.2.

Acerca de esta tarea

Se ha eliminado SOAP-Security (firma digital XML) basado en la implementación Apache SOAP. En lugar de utilizar SOAP-Security, migre y vuelva a configurar la aplicación a la implementación JSR-109 de servicios web.

Para migrar estas aplicaciones cliente de acuerdo con los estándares Java:

Procedimiento

  1. Planifique la estrategia de migración. Hay dos modos de portar un cliente de Apache SOAP al cliente de servicios web JAX-RPC:
    • Si tiene o puede crear un documento WSDL (Web Services Description Language) para el servicio, puede utilizar la herramienta de mandatos WSDL2Java para generar enlaces para el servicio web. Significa más trabajo adaptar un cliente de Apache SOAP para que utilice los enlaces JAX-RPC generados pero el código de cliente resultante es mucho más potente y fácil de mantener.

      Para seguir este procedimiento, consulte el artículo sobre desarrollo de clientes de servicios web en el Information Center.

    • Si no tiene un documento WSDL para el servicio ni espera que el servicio cambie y desea portar el cliente de Apache SOAP con el mínimo esfuerzo, puede convertir el código de modo que utilice la interfaz de invocación dinámica DII (Dynamic Invocation Interface), que es similar a las API de Apache SOAP. Las API DII no utilizan WSDL ni enlaces generados.
    Dado que JAX-RPC no especifica una infraestructura para serializadores escritos por el usuario, JAX-RPC no permite que se utilicen serializadores personalizados. Si su aplicación no se ajusta a la correlación predeterminada entre Java, WSDL y la tecnología XML a la que WebSphere Application Server da soporte, no intente migrar la aplicación. En el resto de este tema se da por supuesto que ha decidido utilizar las API DII de interfaz de invocación dinámica JAX-RPC.
  2. Revise el ejemplo GetQuote. Hay un ejemplo de migración de servicios web en la Galería de ejemplos. Este ejemplo se encuentra en el archivo GetQuote.java que originalmente se escribió para usuarios de Apache SOAP y ahora incluye una descripción de los cambios necesarios para migrarlo a las interfaces DII de JAX-RPC. Para obtener más información, consulte la sección de ejemplos del Centro de información.
  3. Convierta la aplicación cliente desde la DII Apache SOAP a la DII JAX-RPC. Las estructuras de la API Apache SOAP y la API DII JAX-RPC son similares. En ambas puede crear una instancia y configurar un objeto call, establecer los parámetros, invocar la operación y procesar el resultado. Puede crear una instancia genérica de un objeto Service con el siguiente mandato:
    javax.xml.rpc.Service service = ServiceFactory.newInstance().createService(new QName(""));
    en JAX-RPC.
    1. Cree el objeto Call. Una instancia del objeto Call se crea con el siguiente código:
      org.apache.soap.rpc.Call call = new org.apache.soap.rpc.Call ()
      en Apache SOAP.
      Se crea una instancia del objeto Call mediante
      java.xml.rpc.Call call = service.createCall();
      en JAX-RPC.
    2. Especifique los URI (Uniform Resource Identifiers). El URI de destino de la operación se pasa como un parámetro a
      call.invoke:  call.invoke("http://...", "");
      en Apache SOAP.
      Se utiliza el método setTargetEndpointAddress como un parámetro para establecer
      call.setTargetEndpointAddress("http://...");
      en JAX-RPC.

      Apache SOAP tiene un método setTargetObjectURI en el objeto Call que contiene información de direccionamiento para la solicitud. JAX-RPC no tiene un método equivalente. La información de targetObjectURI se incluye en el URI targetEndpoint en JAX-RPC.

    3. Establezca el nombre de la operación. El nombre de la operación se configura en el objeto Call mediante
      call.setMethodName("opName");
      en Apache SOAP.
      En JAX-RPC se utiliza el método setOperationName, que acepta QName en un lugar de un parámetro String, como se indica en el siguiente ejemplo:
      call.setOperationName(new javax.xml.namespace.Qname("namespace", "opName"));
    4. Establezca el estilo de codificación. El estilo de codificación se configura en el objeto Call mediante:
      call.setEncodingStyleURI(org.apache.soap.Constants.NS_URI_SOAP_ENC);
      en Apache SOAP.
      El estilo de codificación se establece mediante una propiedad del objeto Call
      call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.
      xmlsoap.org/soap/encoding/");
      en JAX-RPC.
    5. Declare los parámetros y establezca los valores de los parámetros. Los tipos y los valores de los parámetros en Apache SOAP se describen mediante instancias de parámetros que se agrupan en un vector y se establecen en el objeto Call antes de la llamada, por ejemplo:
      Vector params = new Vector (); 
      params.addElement (new org.apache.soap.rpc.Parameter(name, type, value,  encodingURI)); 
      // repetir para parámetros adicionales... 
      call.setParams (params);
      En JAX-RPC, el objeto Call se configura con nombres y tipos de parámetros sin proporcionar sus valores, por ejemplo:
      call.addParameter(nombre, xmlType, modo);
      // repetir para parámetros adicionales 
      call.setReturnType(tipo);
      Donde
      • nombre (type java.lang.String) es el nombre del parámetro
      • xmlType (type javax.xml.namespace.QName) es el tipo XML del parámetro
      • modo (type javax.xml.rpc.ParameterMode) la modalidad del parámetro, por ejemplo, IN, OUT o INOUT
    6. Efectúe la llamada. La operación se invoca en el objeto Call mediante
      org.apache.soap.Response resp = call.invoke(endpointURI, "");
      en Apache SOAP.
      Los valores de los parámetros se recogen en una matriz que se pasa call.invoke, tal como se muestra en el siguiente ejemplo:
      Object resp = call.invoke(new Object[] {parm1, parm2,...});
      en JAX-RPC.
    7. Compruebe los errores. Puede comprobar si se ha producido un error de SOAP en la invocación comprobando la respuesta:
      if resp.generatedFault then {   
      org.apache.soap.Fault f = resp.getFault;   
      f.getFaultCode();   
      f.getFaultString(); 
      }
      en Apache SOAP.
      Un error java.rmi.RemoteException se visualiza en JAX-RPC si se produce un error de SOAP en la invocación.
      try {   
      ... call.invoke(...) 
      } catch (java.rmi.RemoteException) ...
    8. Recupere el resultado. En Apache SOAP, si la invocación es correcta se devuelve un resultado que se puede recuperar en el objeto Response.
      Parameter result = resp.getReturnValue(); return result.getValue();
      En JAX-RPC, el resultado de la invocación es el objeto devuelto cuando no se muestra una excepción:
      Object result = call.invoke(...);
       ... 
      return result;

Resultados

Ha migrado servicios web de Apache SOAP a servicios web JAX-RPC basados en la especificación Java EE.

Qué hacer a continuación

Desarrolle un cliente de servicios web basándose en la especificación Web Services for Java EE.

Pruebe los clientes habilitados para servicios web para asegurarse de que el proceso de migración es correcto y que puede implementar los servicios web en un entorno Java EE.


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_migratewbs
File name: twbs_migratewbs.html