Protocolo SOAP em JMS Proprietário IBM (reprovado)
É possível utilizar um transporte de SOAP em JMS (Java™ Message Service) como uma alternativa para HTTP para comunicação de mensagens SOAP entre clientes e servidores. O mecanismo de serviços da Web suporta o uso de uma implementação proprietária IBM® bem como uma implementação padrão de mercado.

É possível usar o transporte SOAP sobre JMS se você precisar fornecer implementações para os componentes do cliente ou do servidor e se precisar certificar-se de que as implementações sejam interoperáveis com os componentes do cliente e do servidor fornecidas pelo mecanismo de serviços da Web no servidor de aplicativos. O protocolo SOAP em JMS proprietário IBM descreve requisitos de troca de mensagem específicos para os componentes do cliente e do servidor para que possam trocar mensagens de pedido e de resposta SOAP por meio do uso de APIs de JMS suportadas pelo servidor de aplicativos.
- O cliente deve utilizar um objeto TextMessage do JMS, por exemplo, javax.jms.TextMessage, ou um objeto BytesMessage, por exemplo, javax.jms.BytesMessage, para transmitir a mensagem de pedido SOAP para o servidor. Se a mensagem de pedido contiver anexos, um objeto BytesMessage deverá ser utilizado. Se a mensagem de pedido não contiver anexos, o cliente pode utilizar um objeto TextMessage ou BytesMessage. A implementação do cliente de servidor de aplicativos utiliza apenas uma objeto BytesMessage para a mensagem de pedido devido a necessidade potencial de transmitir anexos.
- O cliente deve configurar as seguintes propriedades na mensagem de pedido do JMS antes de enviar a mensagem para a fila ou tópico de destino:
- contentType: Esta propriedade é semelhante ao cabeçalho de Tipo de Conteúdo localizado na mensagem HTTP e usado para descrever o tipo de conteúdo da mensagem. Uma mensagem SOAP de texto apenas, por exemplo, uma mensagem sem nenhum
anexo, é gravada como segue:
A propriedade contentType numa mensagem de pedido SOAP contendo anexos deve ser configurado como segue:text/xml; charset="UTF-8"
Esse exemplo representa uma mensagem multipartes, em que a primeira parte é do tipo text/xml que contém a mensagem SOAP. As outras partes da mensagem de várias partes contém vários anexos. A especificação HTTP 1.1 contém mais informações sobre o cabeçalho Content-Type.multipart/related; type="text/xml"; start="<...content-id of first part...>"
- enableTransaction: Configure esta propriedade opcional para true no SOAP de saída sobre a mensagem de solicitação de JMS se o componente do servidor deve processar a solicitação de serviço da web sob a mesma transação que foi usada para receber a mensagem da fila de destino ou tópico. O componente do cliente deve configurar essa propriedade para true apenas
para uma solicitação unidirecional para evitar problemas de sincronização que podem ocorrer com uma solicitação
de serviço da Web bidirecional. Se essa propriedade não for
configurada ou for configurada para o valor padrão false,
o servidor suspenderá a transação que foi usada para receber a mensagem
de solicitação a partir da fila ou tópico de destino antes de chamar o mecanismo
de serviços da Web para processar a solicitação.
Evitar Problemas: O componente do cliente deve configurar esta propriedade como true apenas para um pedido unidirecional. Configurar essa propriedade para true para uma solicitação de servidor da Web bidirecional não é suportado devido a problemas de sincronização.gotcha
- endpointURL: Esta propriedade deve ser configurada para a URL de terminal JMS associada com a solicitação.
- soapAction: Esta propriedade opcional é configurada em um SOAP de saída SOAP sobre uma mensagem de solicitação JMS para indicar o valor soapAction associado à solicitação de serviço da web. Essa propriedade é semelhante ao cabeçalho SOAPAction HTTP usado quando transportar as solicitações de serviço da Web sobre um transporte HTTP. O valor da propriedade soapAction é um URI que identifica a intenção do pedido SOAP. Se a propriedade soapAction for especificada, ela será utilizada pelo componente de servidor para determinar o destino do pedido. A especificação SOAP não coloca nenhuma restrição sobre o formato ou a especificidade do URI ou que é resolvível. Normalmente, essa propriedade é configurada para o valor soapAction do documento WSDL.
- targetService: Esta propriedade deve ser configurada para o valor da propriedade targetService que é localizado na URL do local do terminal em estilo JMS para a solicitação. Esse valor é utilizado pelo componente do servidor para determinar o componente da porta no destino ao fazer um dispatch do pedido.
- transportVersion: Esta propriedade indica o númer de versão do protocolo usado pelo cliente e servidor. Configure o valor como 1 (um).
- contentType: Esta propriedade é semelhante ao cabeçalho de Tipo de Conteúdo localizado na mensagem HTTP e usado para descrever o tipo de conteúdo da mensagem. Uma mensagem SOAP de texto apenas, por exemplo, uma mensagem sem nenhum
anexo, é gravada como segue:
- Se a mensagem de pedido SOAP representar um pedido bidirecional, o componente do cliente deverá configurar a propriedade replyTo da mensagem JMS para especificar a fila usada para a mensagem de resposta. O método setJMSReplyTo da mensagem JMS é utilizado para isso. Pode ser benéfico configurar uma fila replyTo permanente no cliente para evitar que o cliente tenha que configurar a propriedade replyTo da mensagem JMS sempre que uma solicitação de serviço da Web seja feita.
- Se a mensagem de pedido SOAP representar um pedido unidirecional, o componente do cliente não deverá configurar a propriedade replyTo da mensagem JMS.
- O componente do cliente deve estar preparado para manusear uma mensagem de resposta que seja um objeto BytesMessage ou TextMessage, independentemente do tipo de mensagem JMS utilizado para transmitir o pedido SOAP. O componente de servidor de aplicativos responde com o mesmo tipo de mensagem JMS recebido do cliente, a não ser que a resposta contenha anexos e um objeto BytesMessage precise ser utilizado.
- O componente do cliente pode supor que o ID de correlação da mensagem de resposta corresponda ao ID da mensagem de pedido original.
- O servidor deve estar preparado para receber uma TextMessage ou BytesMessage. Se o pedido contiver anexos, uma ByteMessage deve ser utilizada. A implementação do produto WebSphere do componente do servidor responde no tipo ao enviar a mensagem de resposta novamente para o cliente, a não ser que a resposta contenha anexos e um BytesMessage seja utilizado.
- O componente do servidor deve processar o pedido SOAP apropriadamente para produzir uma mensagem de resposta SOAP apropriada.
- O componente do servidor deve enviar uma mensagem de resposta de volta para o cliente apenas se a propriedade replyTo da mensagem de pedido JMS estiver configurada.
- O componente do servidor deve configurar as seguintes propriedades na
mensagem de respostas JMS antes de enviar a mensagem para a fila replyTo:
- contentType: Consulte a descrição para esta propriedade na seção de responsabilidades do cliente.
- Configure o ID de correlação da mensagem de resposta do JMS com o ID da mensagem do pedido original do JMS. Isso é feito chamando-se o método setJMSCorrelationID da mensagem JMS.
- transportVersion: Esta propriedade indica o númer de versão do protocolo usado pelo cliente e servidor. Configure o valor como 1 (um).
O exemplo a seguir exibe os resultados da chamada do método toString da mensagem JMS de uma mensagem de pedido sem anexos:
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: ID:d438eebf04cb124aa25c5821110a134f0000000000000001
JMSTimestamp: 1092110476167
JMSCorrelationID: null
JMSDestination: topic://NewsGroupTopic?topicSpace=FvtTopicSpace
JMSReplyTo: null
JMSRedelivered: false
JMS_IBM_System_MessageID: 6B6765B36943A18C_11000001
transportVersion: 1
JMSXUserID:
targetService: NGConsumerJMS
JMSXAppID: Service Integration Bus
endpointURL: jms:/topic?destination=jms/NewsGroupTopic&connectionFactory;=jms/NewsGroupTCF&targetService;=NGConsumerJMS
contentType: text/xml; charset=utf-8
3c736f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f
736368656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e
...
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: ID:d438eebf04cb124aa25c5821110a134f0000000000000001
JMSTimestamp: 1092110476167
JMSCorrelationID: null
JMSDestination: topic://NewsGroupTopic?topicSpace=FvtTopicSpace
JMSReplyTo: null
JMSRedelivered: false
JMS_IBM_System_MessageID: 6B6765B36943A18C_11000001
transportVersion: 1
JMSXUserID:
targetService: NGConsumerJMS
JMSXAppID: Service Integration Bus
endpointURL: jms:/topic?destination=jms/NewsGroupTopic&connectionFactory;
=jms/NewsGroupTCF&targetService;=NGConsumerJMS
contentType: text/xml; charset=utf-8
3c736f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f
736368656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e
...
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<postMessage><ngName xsi:type="xsd:string">news.current.events</ngName>
<msg xsi:type="xsd:string">This is a sample news item.</msg>
</postMessage>
</soapenv:Body>
</soapenv:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<postMessage><ngName xsi:type="xsd:string">news.current.events</ngName>
<msg xsi:type="xsd:string">This is a sample news item.</msg>
</postMessage>
</soapenv:Body>
</soapenv:Envelope>
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 1
JMSExpiration: 1092086312310
JMSPriority: 4
JMSMessageID: ID:4bb64ed64e7d813d59ba5fec110a134f0000000000000001
JMSTimestamp: 1092086012310
JMSCorrelationID: null
JMSDestination: queue://Logger_Q
JMSReplyTo: queue://_Q_6B6765B36943A18C_00000385
JMSRedelivered: false
JMS_IBM_System_MessageID: 6B6765B36943A18C_10000001
transportVersion: 1
JMSXUserID:
targetService: WSLoggerJMS
JMSXAppID: Service Integration Bus
endpointURL: jms:/queue?
destination=jms/Logger_Q&connectionFactory=jms/Logger_CF&targetService=WSLoggerJMS
contentType: multipart/related; type="text/xml";
start="<945414389.1092086011970.IBM.WEBSERVICES@myhost1>";
boundary="----=_Part_0_247953397.1092086011970"
0d0a2d2d2d2d2d2d3d5f506172745f305f3234373935333339372e31303932303836303131393730
0d0a436f6e74656e742d547970653a20746578742f786d6c3b20636861727365743d5554462d380d
...
Content-Type: multipart/related; type="text/xml";
start="<945414389.1092086011970.IBM.WEBSERVICES@myhost1>";
boundary="----=_Part_0_247953397.1092086011970"
------=_Part_0_247953397.109208601190
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <945414389.1092086011970.IBM.WEBSERVICES@myhost1>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<p499:InternationalizationContext soapenv:mustUnderstand="0"
xmlns:p499="http://www.ibm.com/webservices/InternationalizationContext">
<Locales>
<Locale>
<LanguageCode>en</LanguageCode>
<CountryCode>US</CountryCode>
</Locale>
</Locales>
<TimeZoneId>America/Chicago</TimeZoneId>
</p499:InternationalizationContext>
</soapenv:Header>
<soapenv:Body>
<sendJpegImage/>
</soapenv:Body>
<soapenv:Envelope>
------=_Part_0_247953397.109208601190
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
Content-ID: <jpegImageRequest=81380956150.1092086011880.IBM.WEBSERVICES@myhost1>
<...contents of jpeg image file...>
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: null
JMSTimestamp: 0
JMSCorrelationID: ID:cdddb857f078a266eb9a972f110a134f0000000000000001
JMSDestination: null
JMSReplyTo: null
JMSRedelivered: false
contentType:
multipart/related;
type="text/xml";
start="<961368106530.1092112854745.IBM.WEBSERVICES@yackerjr>";
boundary="----=_Part_0_1655006754.1092112854745"
0d0a2d2d2d2d2d2d3d5f506172745f305f313635353030363735342e313039323131323835343734
350d0a436f6e74656e742d547970653a20746578742f786d6c3b20636861727365743d5554462d38
...