Envío de cabeceras SOAP implícitas con JAX-RPC
Puede habilitar un cliente de servicios web JAX-RPC (API de Java™ para RPC basado en XML) existente para que envíe los valores en las cabeceras SOAP implícitas. Si se modifica el código de cliente de modo que envíe cabeceras SOAP implícitas, puede enviar información específica dentro de una solicitud de servicio web saliente.
Antes de empezar
- Una parte del mensaje que se declara como cabecera SOAP en el enlace del archivo WSDL (Web Services Description Language), pero no es el elemento portType del archivo WSDL el que hace referencia a la definición del mensaje.
- Un elemento que no está incluido en el archivo WSDL.
Los manejadores y los puntos finales de servicio pueden manipular cabeceras SOAP implícitas o explícitas utilizando el modelo de datos SAAJ (SOAP with Attachments API for Java).
No puede manipular cabeceras SOAP protegidas. Una cabecera SOAP que se declara protegida por su propio componente, por ejemplo, Web Services Security, no es accesible en aplicaciones de cliente. Se produce una excepción si intenta manipular cabeceras SOAP protegidas.
Acerca de esta tarea
La aplicación cliente establece propiedades en el objeto Stub o Call para enviar y recibir cabeceras SOAP implícitas.
Procedimiento
Resultados
Tiene un cliente de servicios web JAX-RPC configurado para enviar cabeceras SOAP implícitas.
Ejemplo
El ejemplo de programación siguiente ilustra cómo se envían dos solicitudes de cabeceras SOAP y se recibe una respuesta de cabecera SOAP en una solicitud y respuesta de servicios web.
1 //Crear los mapas de totales de control de solicitud y respuesta.
2 HashMap requestHeaders=new HashMap();
3 HashMap responseHeaders=new HashMap();
4
5 //Añadir "AtmUuid1" y "AtmUuid2" al mapa de totales de control de solicitud.
6 requestHeaders.put(new QName("com.rotbank.security", "AtmUuid1"),
7 "<AtmUuid1 xmlns=\"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid1>");
8 requestHeaders.put(new QName("com.rotbank.security", "AtmUuid2"),
9 ((IBMSOAPFactory)SOAPFactory.newInstance()).createElementFromXMLString(
10 "x:AtmUuid2 xmlns:x=\"com.rotbank.security\"><x:uuid>ROTB-0A01254385FCA09
</x:uuid><x:AtmUuid2>"));
11
12 //Añadir "ServerUuid" al mapa de totales de control de respuesta.
13 //Si "responseHeaders" está vacío, todas las cabeceras SOAP
14 //se extraen del mensaje de respuesta.
15 responseHeaders.put(new QName("com.rotbank.security","ServerUuid"), null);
16
17 //Establezca las propiedades en el objeto Stub.
18 stub.setProperty(Constants.REQUEST_SOAP_HEADERS.requestHeaders);
19 stub.setProperty(Constants.RESPONSE_SOAP_HEADERS.responseHeaders);
20
21 //Invoque la operación en el objeto Stub.
22 stub.foo(parm2, parm2);
23
24 //Recuperar "ServerUuid" del mapa de totales de control de la respuesta.
25 SOAPElement serverUuid =
26 (SOAPElement) responseHeaders.get(new QName("com.rotbank.security","ServerUuid"));
27
28 //Nota: Ahora "serverUuid" es igual a un objeto SOAPElement que representa
29 //el código siguiente:
30//"<y:ServerUuid xmlns:y=\"com.rotbank.security\"><:uuid>ROTB-0A03519322FSA01
</y:uuid></y:ServerUuid.");
En las líneas 2-3, se crean mapas de totales de control nuevos que se utilizan para las cabeceras SOAP de solicitud y respuesta.
En las líneas 6-10, se añaden los elementos de cabecera AtmUuid1 y AtmUuid2 al mapa de totales de control de la solicitud.
En la línea 15, se añade el nombre del elemento de cabecera ServerUuid junto con un valor nulo, al mapa de totales de control de la respuesta.
En la línea 18, el mapa de totales de control de la solicitud se establece en una propiedad del objeto Stub. Esto hace que las cabeceras AtmUuid1 y AtmUuid2 se añadan a cada mensaje de solicitud asociado con una operación que se invoca en el objeto Stub.
En la línea 19, el mapa de totales de control se establece en la propiedad del objeto Stub. Esto hace que la cabecera ServerUuid se tenga que extraer de cada mensaje de respuesta asociado a una operación que se invoca en el objeto Stub.
En la línea 22, se invoca la operación de servicios web en el objeto Stub.
En las líneas 25 y 26, se recupera la cabecera serverUuid del mapa de totales de control de la respuesta. La cabecera se extrae del mensaje de respuesta y se inserta en el mapa de totales de control mediante el motor de servicios web.