Envío de cabeceras SOAP implícitas con JAX-WS

Puede habilitar un cliente de servicios web API de Java™ para servicios web XML) existente para que envíe los valores en las cabeceras SOAP implícitas. Si se modifica el código de cliente para enviar cabeceras SOAP implícitas, puede enviar información específica en una solicitud de servicio web de salida.

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).

Utilizando JAX-WS, no existe ninguna restricción en cuanto a los tipos de cabeceras que puede manipular.

Acerca de esta tarea

La aplicación cliente establece propiedades en el objeto Dispatch o Proxy para enviar y recibir cabeceras SOAP implícitas.

Procedimiento

  1. Cree un objeto java.util.HashMap<QName, List<String>>.
  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 List<String> y cada String es el texto XML de todo el elemento de cabecera SOAP. Utilizando el objeto List<String>, puede añadir varios elementos de cabecera SOAP que contengan el mismo objeto QName.
  3. Defina el objeto HashMap como propiedad en el contexto de solicitud del objeto Dispatch o Proxy. El nombre de la propiedad es com.ibm.wsspi.websvcs.Constants.JAXWS_OUTBOUND_SOAP_HEADERS. El valor de la propiedad es HashMap.
  4. Emita las llamadas de método remoto utilizando el objeto Dispatch o Proxy. Las cabeceras del objeto HashMap se envían en el mensaje saliente.
    Se puede producir un error WebServiceException si se cumple alguna de estas condiciones:
    • El objeto HashMap contiene una clave que no es un objeto QName, o bien el objeto HashMap contiene un valor que no es un objeto List<String>
    • String representa una cabecera SOAP que no es un mensaje XML compatible.
    • HashMap contiene una clave que representa una cabecera SOAP que se declara protegida por el propio componente.

Resultados

Tiene un cliente de servicios web JAX-WS configurado para enviar cabeceras SOAP implícitas.

Ejemplo

El ejemplo de programación siguiente muestra cómo establecer dos cabeceras SOAP de solicitud y recuperar una cabecera SOAP de respuesta de una solicitud de servicios web JAX-WS y un contexto de respuesta:
1  //Crear los mapas de totales para las cabeceras SOAP de salida
2  Map<QName, List<String>> outboundHeaders=new HashMap<QName, List<String>>(); 
3
4  //Añadir "AtmUuid1" y "AtmUuid2" a la correlación de salida
5  List<String> list1 = new ArrayList<String>();
6  list1.add("<AtmUuid1 xmlns=\"com.rotbank.security\"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid1>");
7  List<String> list2 = new ArrayList<String>();
8  list2.add("<AtmUuid2 xmlns=\"com.rotbank.security\"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid2>"
9  outboundHeaders.put(new QName("com.rotbank.security", "AtmUuid1"), list1);
10 outboundHeaders.put(new QName("com.rotbank.security", "AtmUuid2"), list2);
11 // Establecer la correlación de salida en el contexto de solicitud
12 dispatch.getRequestContext().put("jaxws.binding.soap.headers.outbound");
13 // Invocar la operación remota
14 dispatch.invoke(parm1);
15 // Obtener la correlación de cabecera de salida del contexto de respuesta
16 Map<QName,List<String>> inboundMap = dispatch.getResponseContext().get("jaxws.binding.soap.headers.outbound");
17 List<String> serverUuidList = inboundMap.get(new QName("com.rotbank.security","ServerUuid"));
18 String text = serverUiidList.get(0);
19 //Nota: el texto ahora es igual a un objeto XML que contiene una cabecera SOAP:
21//"<y:ServerUuid xmlns:y=\"com.rotbank.security\"><:uuid>ROTB-0A03519322FSA01
22  </y:uuid></y:ServerUuid.");

En la línea 2, cree la correlación de cabecera SOAP de salida.

En las líneas 5-10, se añaden los elementos de cabecera AtmUuid1 y AtmUuid2 a la correlación de salida.

En la línea 12, el mapa de salida se establece en el contexto de solicitud, lo que hace que las cabeceras AtmUuid1 y AtmUuid2 se añadan al mensaje de solicitud cuando se invoque la operación.

En la línea 14, invoque la operación remota.

En la línea 15, obtenga la correlación de cabecera de salida.

En las líneas 17 y 18, se recupera la cabecera serverUuid de la correlación de la respuesta. La correlación accede a la cabecera SOAP desde el mensaje de respuesta.


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_reqsoapheadjaxws
File name: twbs_reqsoapheadjaxws.html