jueves, enero 13, 2011

Incluir UsernameToken en cabecera SOAP

Algunos servicios web requieren autenticación mediante Web Service Security en la que se pasen parámetros como usuario y contraseña a través de la cabecera SOAP del mensaje. En principio, esta opción NO está recogida en el adaptador SOAP de XI, pero existen dos alternativas que nos permitirán informar dichos parámetros:
  1. A través del adaptador AXIS (requiere instalación previa y configuración)
  2. Mediante un mapeo XSLT
A continuación mostraré un ejemplo de mapeo XSL que añade la capa SOAP a un mensaje determinado. El objetivo es conseguir transformar el mensaje XML:



En el mensaje XML de salida siguiente, con la capa SOAP indicada:



Para ello se ha utilizado la siguiente transformación XSL:



Debido a que estamos incluyendo la capa SOAP en el mapeo del mensaje, habrá que indicar en el canal de recepción que no se incluya la capa SOAP de nuevo. Esto se consigue marcando la casilla  "Do Not Use SOAP Envelope" en el apartado Conversion Parameters del adaptador.


El marcar esta casilla, causará que el mensaje se envíe como tipo "application/xml", lo cual provocará en el receptor un mensaje de error HTTP 415 (Unsupported Media Type). Por ello será necesario incluir en el adaptador el módulo AF_Modules/MessageTransformBean, antes del propio módulo del adaptador, y configurar el parámetro Transform.ContentType con el valor text/xml. De este modo, el mensaje se enviará codificado como 'text/xml'.


 Enlaces de referencia:
Enlaces de interés:

    1 comentario:

    Genesaret Heredia dijo...

    But it is throwing an error at receiver comm channel saying the unknown message type in the http://schemas.test.com/test definitions from the webservice.

    Let me know if am doing anything wrong here