Ir para o conteúdo

Suporte a mensagens SOAP MTOM/XOP usando o Jitterbit Integration Studio

Introdução

Este padrão de design configura o serviço SOAP Mecanismo de Otimização de Transmissão de Mensagens (MTOM) com Empacotamento otimizado XML-binário Suporte (XOP) usando o conector HTTP.

Importante

O conector SOAP não oferece suporte a essa funcionalidade. O conector HTTP é usado como solução alternativa.

Padrão de design e exemplo

Esta cadeia de operação de exemplo é usada para ilustrar o padrão de design, cujas principais características são descritas abaixo:

Exemplo de workflow SOAP MTOM XOP

  1. (Opcional) A operação Criar solicitação SOAP aplica cabeçalhos de solicitação SOAP (como um cabeçalho OASIS WSS) conforme necessário acima na cadeia da operação de solicitação com um script:

    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>
    

    Se esses cabeçalhos não forem necessários, o corpo da solicitação SOAP pode ser definido e usado diretamente na Solicitação POST SOAP.

  2. A operação POST SOAP Request realiza a solicitação SOAP e a análise XOP. Ela requer o seguinte:

    • Uma conexão HTTP configurada. A URL base da conexão deve apontar para o serviço SOAP desejado. Por exemplo, http://schemas.example.com/service.svc. Nenhum outro campo é obrigatório.
    • Uma atividade HTTP POST. Deve conter dois cabeçalhos de solicitação:

      • Content-Type: text/xml; charset="utf-8"
      • SOAPAction: "http://schemas.example.com/service/action"
    • Variáveis de solicitação e resposta para trabalhar com seus payloads (soap_request_body e soap_response).

    • Um script que divide a payload do XOP de resposta para análise conforme necessário:

      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>
      

      Importante

      O Split chamadas de função no exemplo acima podem não se aplicar ao seu caso de uso. Aplique regras de análise com base no serviço web que você está chamando.

  3. A operação Parse SOAP Response transforma o XOP de resposta para dar mais suporte ao seu caso de uso.