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

Para completar esta tarea, es necesario disponer de un cliente de servicios web que puede habilitar el envío de cabeceras SOAP implícitas.
Una cabecera SOAP implícita es una cabecera SOAP que encaja en una de las descripciones siguientes:
  • 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

  1. Cree un objeto java.util.HashMap.
  2. Añada una entrada al objeto HashMap para cada cabecera SOAP implícita que el cliente desee enviar. La clave de entrada HashMap es el QName de la cabecera SOAP. El valor de la entrada HashMap es un objeto SAAJ SOAPElement o una serie que contiene el texto XML de todo el elemento de cabecera SOAP.
  3. Configure el objeto HashMap como propiedad en el objeto Stub o Call. El nombre de la propiedad es com.ibm.websphere.webservices.Constants.REQUEST_SOAP_HEADERS. El valor de la propiedad es HashMap.
  4. Emita las llamadas de método remoto utilizando el objeto Stub o Call. Las cabeceras del objeto HashMap se envían en el mensaje saliente.
    Se puede producir un error JAXRPCException si se cumple alguna de estas condiciones:
    • El objeto HashMap contiene un valor que no es un objeto QName, o bien el objeto HashMap contiene un valor que no es un objeto String o SOAPElement.
    • El objeto HashMap contiene una clave que representa una cabecera SOAP que el propio componente ha declarado como protegida.

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.


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_reqsoaphead
File name: twbs_reqsoaphead.html