Zum Inhalt springen

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:

Beispiel-Workflow für SOAP MTOM XOP

  1. (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.

  2. 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_body und soap_response).

    • Ein Skript, das die Antwort-XOP-Payload bei Bedarf für die Analyse aufteilt:
Beispiel XOP-Parsing-Skript:
        <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.

  1. Die SOAP-Antwort parsen Operation transformiert die Antwort XOP, um Ihren Anwendungsfall weiter zu unterstützen.