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
- Planifique la estrategia de migración. Hay dos modos de portar un cliente de Apache SOAP al cliente de
servicios web JAX-RPC:
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.
- 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.
- 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.- 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.
- 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.
- 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"));
- 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.
- 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
- 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.
- 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) ...
- 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.