Mecanismo de Otimização de Transmissão de Mensagens
O SOAP MTOM (Message Transmission Optimization Mechanism) é um padrão desenvolvido pelo W3C (World Wide Web Consortium). O MTOM descreve um mecanismo para otimizar a transmissão ou o formato via rede de uma mensagem SOAP enquanto apresenta um Conjunto de Informações XML (Infoset) ao aplicativo SOAP.
- Codificar com a base64 sequencial na carga útil de SOAP. Contudo, a codificação sequencial tende a aumentar o tamanho da mensagem SOAP. Note que a codificação base64 pode dobrar o tamanho dos dados binários.
- Codificar as mensagens usando o SwA (SOAP with Attachments) e seguir o Perfil de Anexos do WS-I (Web Services Interoperability Organization). O WebSphere Application Server suporta atualmente esse método.
- Fornecer otimização do transporte de mensagem binária, usando o XOP (XML-binary Optimized Packaging). A otimização está disponível apenas para dados ou conteúdo binário. O MTOM usa o XOP no contexto de SOAP e MIME em HTTP.
O XOP define um mecanismo de serialização para o XML Infoset com o conteúdo binário que não é apenas aplicável ao SOAP e pacote MIME, mas a qualquer XML Infoset e qualquer mecanismo de pacote. Há uma serialização alternativa de XML semelhante a um pacote de multiparte/relacionado a MIME com um documento XML como parte raiz. Essa parte raiz é muito parecida com a serialização XML do documento, exceto pelo fato de os dados terem codificação base64 serem substituídos por uma referência a uma das partes MIME, que não tem codificação base64. Com essa referência, você pode evitar volume e código extra no processamento associado à codificação. A codificação é a única maneira de um dado binário poder se ajustar a um universo XML.
Se a geração de mapeamento de MTOM estiver desativada, o XOP será desativado. Se o XOP estiver desativado, os dados binários não serão enviados usando anexos MIME. Em vez disso, os dados binários se baseiam em codificação base64 como normalmente fazem.
- Um recurso abstrato para formato por transmissão ou via rede otimizado para mensagens SOAP. Esse recurso é abstrato pelo fato de a descrição da técnica de otimização, bem como o comportamento dos processadores SOAP do emissor, receptor e intermediários, ser genérica e não incluir nenhuma referência às tecnologias como MIM, HTTP e assim por diante. A técnica de otimização é centrada na garantia de uma visualização de Infoset do envelope SOAP para os processadores SOAP enquanto codifica seletivamente determinados conteúdos do Infoset de Envelope SOAP acessíveis como representação léxico-canônica do tipo de dado xs:base64Binary.
A implementação desses recursos abstratos requere especificação concreta de dois aspectos: o formato via rede otimizado e como o formato via rede otimizado flui em um transporte particular
- A segunda parte da especificação MTOM trata do aspecto de serialização e depende, de forma aceitável, do pacote XOP Multiparte/Relacionado a MIME. O aspecto de serialização é onde o MTOM está relacionado ao XOP.
- Como um recurso de nível de ligação SOAP HTTP concreto, o MTOM expande na serialização. Esta parte descreve como a ligação HTTP pode ser usada para transportar os pacotes XOP que mantêm as mensagens SOAP MTOM. Essa parte também impõe algumas restrições nas possíveis serializações das mensagens SOAP MTOM como pacotes XOP, como uso de apenas XML 1.0.
O JAX-WS (Java™ API for XML Web Services) inclui suporte para enviar anexos de dados binários usando o MTOM. O JAX-WS é uma peça central de uma pilha da API recentemente rearquitetada para o serviço da Web que inclui o JAX-WS 2.0, o JAXB 2.0 e o SAAJ 1.3. A pilha de API é ocasionalmente referida como uma pilha integrada. O JAX-WS foi projetado para ocupar o lugar do JAX-RPC em serviços da Web e aplicativos da Web.
Abordagem de Anexo
- Por valor é quando o conteúdo de dados obscuros está incorporado com um elemento ou como um atributo usando a abordagem de codificação base64 ou de texto hexadecimal, que é codificado no esquema XML como tipos de dados xs:base64Binary e xs:hexBinary, respectivamente.
- Por referência é quando o conteúdo dos dados opacos tem referência externa como elemento ou atributo, usando-se um URI, que está codificado no esquema XML como tipo de dado xs:anyURI.
U m padrão diferente é definido pelo W3C (World Wide Web Consortium) e é chamado SwA (SOAP with Attachments). O SwA foi desenvolvido como uma maneira de empacotar mensagens SOAP com anexos. Como alguns fornecedores não suportam SwA, ele pode ser substituído pelos mecanismos MTOM e XOP mais poderosos. O SwA e o MTOM são conceitualmente similares e ambos codificam dados binários como um anexo MIM em um documento MIME. O uso de anexos MIME aprimora o desempenho de transporte de grandes cargas úteis binárias.
- O MTOM usa um padrão chamado XOP, que define uma referência XOP existente na carga útil de SOAP. Essa referência aponta para o anexo MIME que contém os dados binários.
- Com MTOM, a referência de XOP inclui logicamente os dados binários no Conjunto de Informações XML (Infoset). Com SwA, os pontos href para os dados que não estão apenas fisicamente fora do documento, mas não estão logicamente incluídos dentro de seu Infoset.
- Com MTOM, os anexos binários podem ser logicamente assinados como se fizessem parte do documento XML SOAP.
- Além da IBM®, oMicrosoft .NET suporta MTOM, que elimina alguns dos problemas de interoperabilidade encontrados com SwA. A interoperabilidade foi criada como o principal objetivo quando os co-submetedores discutiram as modificações sugeridas.
SOAP 1.2 e SOAP 1.1
O SOAP 1.1 é baseado na especificação de XML. Provavelmente, a implementação do SOAP 1.1 continuará a existir por alguns anos. Para aqueles que ainda executam o SOAP 1.1, há agora uma maneira interoperável de usar o MTOM para suporte de anexos. SAP, Oracle, Microsoft, e IBM submeteram uma especificação SOAP 1.1 Binding for MTOM 1.0 ao W3C, que define como o MTOM pode ser utilizado com as cargas úteis do SOAP 1.1. A especificação detalha as modificações necessárias nas especificações do SOAP MTOM e do XOP para o uso bem-sucedido dessas tecnologias com SOAP 1.1. Consulte a especificação para saber mais detalhes.
MTOM é um recurso do SOAP Versão 1.2, que se baseia no Infoset. Consulte a documentação do conjunto de informações XML para saber mais.
Sem o MTOM, os dados são codificados em qualquer formato que estiver descrito no esquema (base64 ou hexadecimal) e, em seguida, aparecem no documento XML. O exemplo a seguir mostra uma mensagem SOAP com um elemento <xsd:base64Binary>:
... outros cabeçalho de transporte ...
Content-Type: text/xml; charset=UTF-8
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<sendImage xmlns="http://org/apache/axis2/jaxws/sample/mtom">
<input>
<imageData>R0lGODl ... mais dados codificados por base64 ... KTJk8giAAA7</imageData>
</input>
</sendImage>
</soapenv:Body>
</soapenv:Envelope>
Quando o MTOM é ativado, os dados binários que representam o anexo parcialmente são incluídos como um anexo MIME à mensagem SOAP. O exemplo a seguir mostra uma mensagem SOAP ativada por MTOM com dados de anexo:
... outros cabeçalho de transporte ...
Content-Type: multipart/related; boundary=MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812;
type="application/xop+xml"; start="<0.urn:uuid:0FE43E4D025F0BF3DC11582467646813@apache.org>";
start-info="text/xml"; charset=UTF-8
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812
content-type: application/xop+xml; charset=UTF-8; type="text/xml";
content-transfer-encoding: binary
content-id:
<0.urn:uuid:0FE43E4D025F0BF3DC11582467646813@apache.org>
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<sendImage xmlns="http://org/apache/axis2/jaxws/sample/mtom">
<input>
<imageData>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"
href="cid:1.urn:uuid:0FE43E4D025F0BF3DC11582467646811@apache.org"/>
</imageData>
</input>
</sendImage>
</soapenv:Body>
</soapenv:Envelope>
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812
content-type: text/plain
content-transfer-encoding: binary
content-id:
<1.urn:uuid:0FE43E4D025F0BF3DC11582467646811@apache.org>
n... binary data goes here ...
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812--