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:

-
(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.
-
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_bodyysoap_response). - Un script que divide la carga útil de respuesta XOP para su análisis según sea necesario:
- Una conexión HTTP configurada. La URL base de la conexión debe apuntar al servicio SOAP deseado. Por ejemplo,
<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.
- La operación Analizar respuesta SOAP transforma la respuesta XOP para apoyar aún más tu caso de uso.