Protocolo SOAP sobre JMS propiedad de IBM (en desuso)
Puede utilizar un transporte SOAP sobre Java™ Message Service (JMS) como una alternativa a HTTP para comunicar mensajes SOAP entre clientes y servidores. El motor de servicios web da soporte a la utilización de una implementación propiedad de IBM® así como a la implementación estándar del sector.

Puede utilizar un transporte SOAP sobre JMS si necesita proporcionar implementaciones para los componentes de cliente y servidor y necesita asegurarse de que las implementaciones sean interoperativas con los componentes de cliente y servidor que proporciona el motor de servicios web en el servidor de aplicaciones. El protocolo SOAP sobre JMS propiedad de IBM describe los requisitos específicos para el intercambio de mensajes para los componentes de cliente y servidor para que puedan intercambiar mensajes de solicitud y respuesta de SOAP mediante la utilización de las API JMS soportadas por el servidor de aplicaciones.
- Para transmitir el mensaje de solicitud SOAP al servidor, el cliente debe utilizar un objeto TextMessage de JMS, por ejemplo, javax.jms.TextMessage o un objeto BytesMessage, por ejemplo, javax.jms.BytesMessage. Si el mensaje de solicitud contiene adjuntos, debe utilizarse un objeto BytesMessage. Si el mensaje de solicitud no contiene adjuntos, el cliente puede utilizar un objeto TextMessage o BytesMessage. La implementación de cliente del servidor de aplicaciones utiliza sólo un objeto BytesMessage para el mensaje de solicitud, debido a la posible necesidad de transmitir adjuntos.
- El cliente debe establecer las siguientes propiedades en el mensaje de solicitud JMS antes de enviar el mensaje a la cola de destino o tema:
- contentType: esta propiedad es similar a la cabecera Content-Type que se encuentra en un mensaje HTTP y se utiliza para describir el tipo de contenido del mensaje. Un mensaje SOAP sólo de texto, por ejemplo, un mensaje sin adjuntos, se escribe del modo siguiente:
La propiedad contentType de un mensaje de solicitud SOAP que contiene adjuntos debe establecerse del modo siguiente:text/xml; charset="UTF-8"
Este ejemplo representa un mensaje de varias partes, en el que la primera parte es de tipo text/xml y contiene el mensaje SOAP. Las otras partes del mensaje de varias partes contienen varios adjuntos. La especificación HTTP 1.1 contiene más información acerca de la cabecera Content-Type.multipart/related; type="text/xml"; start="<...content-id of first part...>"
- enableTransaction: establezca esta propiedad opcional en true en el mensaje de la solicitud SOAP sobre JMS saliente, si el componente servidor debe procesar la solicitud del servicio web en la misma transacción que fue utilizada para recibir el mensaje desde la cola o el tema de destino. El
componente cliente sólo debe establecer esta propiedad en true para una solicitud de
dirección única para evitar problemas de sincronización que se pueden producir con una solicitud de servicio
web de dos direcciones. Si esta propiedad no se ha establecido o se ha establecido en el valor predeterminado false, el servidor suspenderá la transacción que fue utilizada para recibir el mensaje de la solicitud desde la cola o el tema de destino, antes de invocar el motor de servicios web para procesar la solicitud.
Avoid trouble: El componente cliente sólo debe establecer esta propiedad en true para una solicitud unidireccional. Debido a problemas de sincronización, no está admitido establecer en true esta propiedad para una solicitud de servidor web bidireccional.gotcha
- endpointURL: esta propiedad se debe establecer en el URL de punto final JMS asociado a la solicitud.
- soapAction: esta propiedad opcional se establece en un mensaje de solicitud SOAP sobre JMS saliente para indicar el valor soapAction asociado a la solicitud del servicio web. Esta propiedad es similar a la cabecera SOAPAction HTTP que se utiliza al transportar las solicitudes de servicio web en un transporte HTTP. El valor de la propiedad soapAction es un URI que identifica el intento de la solicitud SOAP. Si se especifica la propiedad soapAction, es utilizada por el componente servidor para determinar el destino de la solicitud. La especificación SOAP no impone ninguna restricción en el formato, ni especificidad del URI, ni que sea resoluble. Normalmente, esta propiedad se establece en el valor de soapAction del documento WSDL.
- targetService: esta propiedad se debe establecer en el valor de la propiedad targetService que se encuentra en el URL de ubicación de punto final de tipo JMS para la solicitud. Este valor lo utiliza el componente de servidor para determinar el componente de puerto en el destino cuando se asigna la solicitud.
- transportVersion: esta propiedad indica el número de versión del protocolo que utilizan el cliente y el servidor. Establezca el valor en 1 (uno).
- contentType: esta propiedad es similar a la cabecera Content-Type que se encuentra en un mensaje HTTP y se utiliza para describir el tipo de contenido del mensaje. Un mensaje SOAP sólo de texto, por ejemplo, un mensaje sin adjuntos, se escribe del modo siguiente:
- Si el mensaje de solicitud SOAP representa una solicitud bidireccional, el componente de cliente se debe establecer en la propiedad replyTo del mensaje JMS de modo que especifique la cola que se utiliza para el mensaje de respuesta. El método setJMSReplyTo del mensaje JMS se utiliza para este fin. Puede resultar beneficioso configurar una cola replyTo permanente en el cliente para evitar que éste deba establecer la propiedad replyTo del mensaje JMS, cada vez que se realiza una solicitud de servicio web.
- Si el mensaje de solicitud SOAP representa una solicitud unidireccional, el componente de cliente no debe establecer la propiedad replyTo del mensaje JMS.
- El componente de cliente debe estar preparado para manejar un mensaje de respuesta que sea un objeto BytesMessage o un TextMessage, independientemente del tipo de mensaje JMS utilizado para transmitir la solicitud SOAP. El componente del servidor de aplicaciones responde con el mismo tipo de mensaje JMS que se recibe del cliente, a menos que la respuesta contenga adjuntos y deba utilizarse un objeto BytesMessage.
- El componente de cliente puede presuponer que el ID de correlación del mensaje de respuesta coincide con el ID de mensaje de la solicitud original.
- El servidor se debe preparar para recibir un TextMessage o un BytesMessage. Si la solicitud contiene adjuntos, se debe utilizar un ByteMessage. La implementación del producto WebSphere del componente servidor responde del mismo modo cuando envía el mensaje de respuesta al cliente, a menos que la respuesta contenga adjuntos y se utilice un BytesMessage.
- El componente de servidor debe procesar la solicitud SOAP correctamente para generar un mensaje de respuesta SOAP adecuado.
- El componente de servidor debe enviar un mensaje de respuesta al cliente sólo si se ha establecido la propiedad replyTo del mensaje de solicitud JMS.
- El componente de servidor debe establecer las propiedades siguientes en el mensaje de respuesta JMS antes de enviar el mensaje a la cola replyTo:
- contentType: consulte la descripción de esta propiedad en la sección de responsabilidades del cliente.
- Establezca el ID de correlación del mensaje de respuesta JMS en el ID de mensaje del mensaje de solicitud JMS original. Esto se hace llamando al método setJMSCorrelationID del mensaje JMS.
- transportVersion: esta propiedad indica el número de versión del protocolo que utilizan el cliente y el servidor. Establezca el valor en 1 (uno).
El ejemplo siguiente muestra el resultado de invocar el método toString del mensaje JMS para un mensaje de solicitud sin adjuntos:
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">Este es un elemento de noticias de ejemplo.</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">Este es un elemento de noticias de ejemplo.</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.1092086011970
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.1092086011970
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
...