Zum Inhalt springen

Unterstützen Sie SOAP MTOM/XOP-Nachrichten mit Jitterbit Integration Studio

Einführung

Dieses Entwurfsmuster richtet den SOAP Dienst ein Mechanismus zur Optimierung der Nachrichtenübertragung (MTOM) mit XML-binär optimierter Verpackung (XOP)-Unterstützung mithilfe des HTTP-Connectors.

Wichtig

Der SOAP Konnektor unterstützt diese Funktion nicht. Der HTTP-Connector dient als Workaround.

Entwurfsmuster und Beispiel

Diese beispielhafte Operation dient zur Veranschaulichung des Entwurfsmusters, dessen Hauptmerkmale im Folgenden beschrieben werden:

Beispiel für einen SOAP MTOM XOP- Workflow

  1. (Optional) Der Operation „SOAP -Anforderung erstellen“ wendet SOAP -Anforderungsheader (wie etwa einen OASIS-WSS- Header) nach Bedarf davorlegende dem Operation mit einem Script an:

    Example OASIS WSS header addition script:
    <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 definiert und direkt in der POST SOAP Anforderung verwendet werden.

  2. Die Operation POST SOAP Request führt die eigentliche SOAP Anfrage und das XOP-Parsing durch. Sie erfordert Folgendes:

    • Eine konfigurierte HTTP-Verbindung. Die Basis URL der Verbindung sollte auf den gewünschten SOAP Dienst verweisen. Beispiel: http://schemas.example.com/service.svc. Weitere Felder sind nicht erforderlich.
    • Eine HTTP-POST-Aktivität. Es sollte zwei Anfrageheader enthalten:

      • Content-Type: text/xml; charset="utf-8"
      • SOAPAction: "http://schemas.example.com/service/action"
    • Anforderungs- und Antwortvariablen für die Arbeit mit Ihren Nutzdaten (soap_request_body Und soap_response).

    • Ein Script, das die XOP- Payload zum Parsen nach Bedarf aufteilt:

      Example XOP parsing script:
      <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 treffen möglicherweise nicht auf Ihren Anwendungsfall zu. Wenden Sie Analyseregeln basierend auf dem aufgerufenen Webdienst an.

  3. Der Operation „SOAP -Antwort analysieren“ transformiert den Antwort-XOP, um Ihren Anwendungsfall weiter zu unterstützen.