Protocolo SOAP sobre JMS
O mecanismo de serviços da Web suporta o uso de um transporte de sistema de mensagens compatível com SOAP sobre Java™ Message Service (JMS) padrão de mercado emergente como uma alternativa para o HTTP se comunicar com as mensagens SOAP entre os clientes e servidores.

A IBM® e outros fornecedores têm trabalhado na especificação SOAP em JMS proposta desde 2005. A especificação foi submetida à W3C, e um grupo de trabalho foi estabelecido. A submissão de membro atual dessa especificação de rascunho foi publicada conjuntamente em outubro de 2007. Consulte a especificação SOAP em JMS para obter detalhes sobre esse padrão de mercado.
Use o protocolo de transporte SOAP via JMS se for necessário fornecer implementações para os componentes do cliente ou do servidor. Além disso, é necessário certificar-se de que as implementações sejam interoperáveis com os componentes do cliente e do servidor fornecidos pelo mecanismo de serviços da Web no WebSphere Application Server.
- O cliente deve usar o objeto javax.jms.BytesMessage ou um objeto javax.jms.TextMessage para transmitir a mensagem de pedido SOAP para o servidor.
- 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:
- SOAPJMS_contentType: Essa propriedade é semelhante ao
cabeçalho Content-Type localizado em uma mensagem HTTP e é utilizada para descrever o
tipo de conteúdo da mensagem. Uma mensagem SOAP apenas de texto, por exemplo, uma mensagem
sem anexos, tem o seguinte valor configurado para essa propriedade de mensagem JMS:
text/xml; charset="UTF-8"
Para uma mensagem SOAP contendo anexos, utilize o seguinte código para configurar a propriedade SOAPJMS_contentType na mensagem JMS:
Esse exemplo representa uma mensagem multipartes, em que a primeira parte é do tipo text/xml e contém o envelope SOAP. As outras partes da mensagem multipartes contêm vários anexos. A especificação HTTP 1.1 contém informações adicionais sobre o cabeçalho Content-Type.multipart/related; type="text/xml"; start="<...content-id_of_first_ part...>"
- enableTransaction: Configure essa propriedade
opcional para true em uma mensagem de solicitação JMS de saída se
desejar que o componente do servidor processe a solicitação de serviço da Web na mesma
transação que foi usada para receber a mensagem da fila ou do tópico
de destino. Esta propriedade é uma extensão IBM para
a especificação SOAP sobre JMS.
Boas Práticas: Para os componentes do cliente, configure essa propriedade para true apenas para solicitações assíncronas unidirecionais ou bidirecionais para evitar problemas de sincronização que possam ocorrer com solicitações de serviço da Web síncronas bidirecionais. 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.bprac
- SOAPJMS_requestURI: Você deve configurar essa propriedade com a URL do terminal JMS associada ao pedido.
- SOAPJMS_soapAction: Essa propriedade opcional é configurada em uma mensagem de solicitação JMS de saída para indicar o valor soapAction associado à solicitação de serviços 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 SOAPJMS_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 nem a especificação requer que seja possível resolver o URI. Normalmente, essa propriedade é configurada para o valor soapAction do documento WSDL.
- SOAPJMS_targetService: Você deve configurar essa propriedade em uma mensagem de pedido do JMS de saída, e o valor deve corresponder ao valor da propriedade targetService localizado na URL do terminal JMS do pedido. Esse valor é utilizado pelo componente de servidor para determinar o componente da porta para o qual o pedido é despachado.
- SOAPJMS_bindingVersion: Essa propriedade indica o número da versão do protocolo utilizado pelo cliente e pelo servidor. Configure o valor como 1.0.
- SOAPJMS_contentType: Essa propriedade é semelhante ao
cabeçalho Content-Type localizado em uma mensagem HTTP e é utilizada para descrever o
tipo de conteúdo da mensagem. Uma mensagem SOAP apenas de texto, por exemplo, uma mensagem
sem anexos, tem o seguinte valor configurado para essa propriedade de mensagem JMS:
- Se a mensagem representar um pedido bidirecional, ou seja, uma resposta é esperada, o componente de cliente deverá configurar a propriedade JMSReplyTo da mensagem JMS para especificar a fila utilizada para a mensagem de resposta. O método setJMSReplyTo da mensagem JMS é utilizado para especificar a fila. É possível beneficiar-se da configuração de uma fila de resposta permanente no cliente para evitar que o cliente tenha que criar uma fila temporária sempre que uma solicitação de serviço da Web seja feita. Consulte sobre a configuração de uma fila de resposta permanente para os serviços da Web usando o SOAP sobre JMS para aprender mais sobre a criação dessa fila especial.
- Se a mensagem de pedido do SOAP representar um pedido unidirecional, ou seja, uma mensagem de resposta não é esperada, o componente de cliente não deverá configurar a propriedade JMSReplyTo da mensagem JMS.
- O componente de cliente pode supor que uma mensagem de resposta seja um objeto BytesMessage do JMS.
- O componente do cliente pode supor que o ID de correlação da mensagem de resposta corresponda ao ID da mensagem do pedido original.
- O componente de servidor pode esperar receber uma BytesMessage do JMS. Se algum outro, além de um BytesMessage, for recebido pelo componente do servidor, uma falha com o subcódigo unsupportedJMSMessageFormat será retornada ao cliente se uma resposta for esperada.
- O componente do servidor pode esperar receber um objeto javax.jms.BytesMessage ou um objeto javax.jms.TextMessage. Se algum outro diferente de BytesMessage ou TextMessage for recebido pelo componente do servidor, uma falha com o subcódigo unsupportedJMSMessageFormat será retornada ao cliente se uma resposta for esperada.
- 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 JMSReplyTo da mensagem de pedido JMS estiver configurada. O método getJMSReplyTo da mensagem JMS é utilizado para recuperar o valor da propriedade JMSReplyTo a partir da mensagem JMS. Esse valor da propriedade indica o destino da resposta.
- Ao enviar uma mensagem de resposta, o componente do servidor deverá usar o mesmo tipo de mensagem como pedido. Se o pedido for recebido como um BytesMessage, a resposta deverá ser enviada como um ByteMessage. Da mesma forma, se o pedido for recebido como um TextMessage, a resposta deverá ser enviada como um TextMessage.
- O componente do servidor deve configurar as seguintes propriedades na mensagem de resposta do JMS antes de enviar a mensagem para a fila de resposta:
- SOAPJMS_contentType: Essa propriedade é utilizada para descrever o tipo de conteúdo da mensagem. Consulte a descrição dessa propriedade na seção de responsabilidades do cliente neste tópico.
- correlation ID: Configure a propriedade de ID de correlação da mensagem de resposta do JMS com o ID da mensagem de pedido original do JMS. Essa correlação é feita chamando-se o método setJMSCorrelationID da mensagem JMS.
- SOAPJMS_bindingVersion: Essa propriedade indica o número da versão do protocolo utilizado pelo cliente e pelo servidor. Configure o valor como 1.0.
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: null
JMSTimestamp: -1
JMSCorrelationID: null
JMSDestination: null
JMSReplyTo: queue://_Q_7D6C2035383215AB00000000000F4241?busName=WsFvtBus
JMSRedelivered: false
JMS_IBM_MsgType: 1
SOAPJMS_contentType: text/xml; charset=UTF-8
SOAPJMS_targetService: MaelstromWsEndpoint
SOAPJMS_requestIRI: jms:jndi:jms/MyRequestQueue?jndiConnectionFactoryName=jms/MyConnFactory&targetService=MyPort1
SOAPJMS_soapAction: "getQuote"
SOAPJMS_bindingVersion: 1.0
3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d38223f3e3c73
6f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f7363
68656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e733a
7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222078
...
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: null
JMSTimestamp: -1
JMSCorrelationID: null
JMSDestination: null
JMSReplyTo: queue://_Q_F0940794C5CC2F84000000000044AA21?busName=WsFvtBus
JMSRedelivered: false
JMS_IBM_MsgType: 1
SOAPJMS_contentType: multipart/related;
boundary=MIMEBoundaryurn_uuid_B6BAFEADB1886ADC241205525550237;
type="text/xml"; start="<0.urn:uuid:B6BAFEADB1886ADC241205525550238@apache.org>"
SOAPJMS_targetService: MaelstromWsEndpoint
SOAPJMS_requestIRI: jms:jndi:jms/WebSvcsJMSQ?jndiConnectionFactoryName=
jms/WebSvcsJMS_CF&targetService=MaelstromWsEndpoint
SOAPJMS_soapAction: attachment
SOAPJMS_bindingVersion: 1.0
2d2d4d494d45426f756e6461727975726e5f757569645f4236424146454144423138383641444332
34313230353532353535303233370d0a436f6e74656e742d547970653a20746578742f786d6c3b20
636861727365743d5554462d380d0a436f6e74656e742d5472616e736665722d456e636f64696e67
3a20386269740d0a436f6e74656e742d49443a203c302e75726e3a757569643a4236424146454144
4231383836414443323431323035353235353530323338406170616368652e6f72673e0d0a0d0a3c
736f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f73
6368656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e73
3a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220
786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368
656d612d696e7374616e63652220786d6c6e733a736f6170656e633d22687474703a2f2f73636865
...
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
...