Unterstützung von SOAP MTOM/XOP-Nachrichten mit Jitterbit Studio
Einführung
Dieses Entwurfsmuster richtet einen SOAP-Dienst Message Transmission Optimization Mechanism (MTOM) mit Unterstützung für XML-binary Optimized Packaging (XOP) unter Verwendung des HTTP-Connectors ein.
Wichtig
Der SOAP-Connector unterstützt diese Funktionalität nicht. Der HTTP-Connector wird als Workaround verwendet.
Entwurfsmuster und Beispiel
Diese Beispiel-Operationkette wird verwendet, um das Entwurfsmuster zu veranschaulichen, dessen Hauptmerkmale im Folgenden beschrieben sind:

-
(Optional) Die SOAP-Anforderungs erstellen-Operation wendet bei Bedarf SOAP-Anforderungsheader (wie einen OASIS WSS-Header) stromaufwärts der Anforderungsoperation mit einem Skript an:
Beispiel-Skript zur Hinzufügung eines OASIS WSS-Headers:<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>Wenn diese Header nicht erforderlich sind, kann der SOAP-Anforderungstext direkt in der POST SOAP-Anforderung definiert und verwendet werden.
-
Die POST SOAP-Anforderung-Operation führt die tatsächliche SOAP-Anforderung und die XOP-Analyse durch. Sie erfordert Folgendes:
- Eine konfigurierte HTTP-Verbindung. Die Basis-URL der Verbindung sollte auf den gewünschten SOAP-Dienst zeigen. Zum Beispiel
http://schemas.example.com/service.svc. Keine weiteren Felder sind erforderlich. -
Eine HTTP POST-Aktivität. Sie sollte zwei Anforderungsheader enthalten:
Content-Type:text/xml; charset="utf-8"SOAPAction:"http://schemas.example.com/service/action"
-
Anforderungs- und Antwortvariablen, um mit Ihren Payloads zu arbeiten (
soap_request_bodyundsoap_response). - Ein Skript, das die Antwort-XOP-Payload bei Bedarf für die Analyse aufteilt:
- Eine konfigurierte HTTP-Verbindung. Die Basis-URL der Verbindung sollte auf den gewünschten SOAP-Dienst zeigen. Zum Beispiel
<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>
Wichtig
Die Split Funktionsaufrufe im obigen Beispiel gelten möglicherweise nicht für Ihren Anwendungsfall. Wenden Sie Parsing-Regeln basierend auf dem Webdienst an, den Sie aufrufen.
- Die SOAP-Antwort parsen Operation transformiert die Antwort XOP, um Ihren Anwendungsfall weiter zu unterstützen.