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 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
Resultados
Tiene un cliente de servicios web JAX-WS configurado para enviar cabeceras SOAP implícitas.
Ejemplo
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.