Saltar al contenido

Soporte para mensajes SOAP MTOM/XOP utilizando Jitterbit Studio

Introducción

Este patrón de diseño configura el servicio SOAP Mecanismo de Optimización de Transmisión de Mensajes (MTOM) con soporte para Empaquetado Optimizado XML-binario (XOP) utilizando el conector HTTP.

Importante

El conector SOAP no soporta esta funcionalidad. Se utiliza el conector HTTP como una solución alternativa.

Patrón de diseño y ejemplo

Esta cadena de operaciones de ejemplo se utiliza para ilustrar el patrón de diseño, cuyas características clave se describen a continuación:

Ejemplo de flujo de trabajo SOAP MTOM XOP

  1. (Opcional) La operación Crear Solicitud SOAP aplica encabezados de solicitud SOAP (como un encabezado OASIS WSS) según sea necesario antes de la operación de solicitud con un script:

    Ejemplo de script para adición de encabezado OASIS WSS:
    <trans>
    WriteToOperationLog('Pre: ' + $soap_request_body);
    $soap_request_body=Replace($soap_request_body, '<?xml version="1.0" encoding="UTF-8"?>','');
    $soap_request_body=Replace($soap_request_body, '<root xmlns="http://www.jitterbit.com/XsdFromWsdl" xmlns:ns="http://schemas.example.com/2025/1/Test/Batch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">',
        '');
    $soap_request_body=Replace($soap_request_body,'<transaction>','');
    $soap_request_body=Replace($soap_request_body,'<body>','');
    $soap_request_body=Replace($soap_request_body,'</transaction>','');
    $soap_request_body=Replace($soap_request_body,'</body>','');
    $soap_request_body=Replace($soap_request_body,'</root>','');
    $soap_request_body=trim($soap_request_body);
    $soap_request_body='<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://schemas.example.com/2025/1/Test/Batch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <soapenv:Header>
            <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
                           soapenv:mustUnderstand="1">
                <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
                                    wsu:Id='+ $wss.id +'>
                    <wsse:Username>'+ $WSS.User +'</wsse:Username>
                    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">'+ $WSS.Password +'</wsse:Password>
                </wsse:UsernameToken>
            </wsse:Security>
        </soapenv:Header>
        <soapenv:Body>
      ' + $soap_request_body;
    $soap_request_body = $soap_request_body + '\r\n</soapenv:Body>
    </soapenv:Envelope>';
    WriteToOperationLog('Post: ' + $soap_request_body);
    </trans>
    

    Si estos encabezados no son necesarios, el cuerpo de la solicitud SOAP puede definirse y utilizarse directamente en la PUBLICAR SOLICITUD SOAP.

  2. La operación PUBLICAR SOLICITUD SOAP realiza la solicitud SOAP real y el análisis XOP. Requiere lo siguiente:

    • Una conexión HTTP configurada. La URL base de la conexión debe apuntar al servicio SOAP deseado. Por ejemplo, http://schemas.example.com/service.svc. No se requieren otros campos.
    • Una actividad HTTP POST. Debe contener dos encabezados de solicitud:

      • Content-Type: text/xml; charset="utf-8"
      • SOAPAction: "http://schemas.example.com/service/action"
    • Variables de solicitud y respuesta para trabajar con tus cargas útiles (soap_request_body y soap_response).

    • Un script que divide la carga útil de respuesta XOP para su análisis según sea necesario:
Ejemplo de script de análisis XOP:
        <trans>
        parseDelim=Split(trim($soap_response),"\n");
        arrayDelim=parseDelim[1];
        splitArray=Split($soap_response,arrayDelim);
        splitArray=split(splitArray[1],"\n");
        xml=splitArray[4];
        splitXml=split(xml,'<s:Body>');
        Xml=split(splitXml[1],'</s:Body>')[0];
        start='<?xml version="1.0" encoding="UTF-8"?>
        <root xmlns="http://www.jitterbit.com/XsdFromWsdl" xmlns:ns="http://schemas.example.com/2025/1/Test/Batch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <transaction>
                <response>
                    <body>';
        end='</body></response></transaction></root>';
        $soap_response =start+xml+end;
        WriteToOperationLog($soap_response);
        </trans>

Importante

Las llamadas a la función Split en el ejemplo anterior pueden no aplicarse a tu caso de uso. Aplica las reglas de análisis según el servicio web que estés llamando.

  1. La operación Analizar respuesta SOAP transforma la respuesta XOP para apoyar aún más tu caso de uso.