Protocolo SOAP sobre JMS

El motor de servicios web permite utilizar un transporte de mensajería compatible con SOAP sobre JMS (Java™ Message Service), que es un estándar emergente de la industria, como alternativa a HTTP para comunicar mensajes SOAP entre clientes y servidores.

Supported configurations Supported configurations: Este producto da soporte al emergente protocolo SOAP sobre JMS estándar del sector. La especificación SOAP sobre JMS proporciona un conjunto estándar de directrices de interoperatividad para utilizar un transporte compatible con JMS con mensajes SOAP para habilitar la interoperatividad entre las implementaciones de proveedores diferentes. Mediante este estándar, una mezcla de componentes de cliente y servidor de distintos proveedores pueden interoperar cuando intercambian mensajes de respuesta y solicitud SOAP a través del transporte JMS tanto para los servicios web JAX-WS (Java API for XML Web Services) como para los servicios web JAX-RPC (Java API for XML-based RPC). Gracias al uso del transporte JMS, los servidores y los clientes de servicios web basados en enterprise beans pueden comunicarse a través de colas y temas JMS, en lugar de mediante conexiones HTTP. sptcfg

IBM® y otros proveedores han estado trabajando en la especificación propuesta SOAP sobre JMS desde 2005. Se ha enviado la especificación a W3C y se ha establecido un grupo de trabajo. En octubre de 2007 se publicó conjuntamente el envío del miembro actual de este borrador de especificación. Consulte la especificación SOAP sobre JMS para obtener detalles de este estándar de la industria.

Utilice el protocolo de transporte SOAP sobre JMS estándar emergente de la industria si desea proporcionar implementaciones para los componentes del cliente o el servidor. También debe asegurarse de que las implementaciones puedan interactuar con los componentes del cliente y el servidor proporcionados por el motor de servicios web en WebSphere Application Server.

El componente de cliente es responsable del envío de mensajes de solicitud SOAP y de la recepción de mensajes de respuesta SOAP y se adhiere a las restricciones de protocolo siguientes:
  • El cliente debe utilizar un objeto javax.jms.BytesMessage o un objeto javax.jms.TextMessage para transmitir el mensaje de solicitud SOAP al servidor.
  • 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:
    • SOAPJMS_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, tendría el conjunto de valores siguiente para esta propiedad de mensaje JMS:
      text/xml; charset="UTF-8"
      Para un mensaje SOAP que contenga conexiones, utilice el código siguiente para establecer la propiedad SOAPJMS_contentType en el mensaje JMS:
      multipart/related; type="text/xml"; start="<...content-id_of_first_ part...>" 
      Este ejemplo representa un mensaje de varias partes, en el que la primera parte es de tipo text/xml y contiene el sobre 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.
    • enableTransaction: establezca esta propiedad opcional en true en un mensaje de solicitud JMS de salida, si desea que el componente de servidor procese la solicitud del servicio web en la misma transacción que se utilizó para recibir el mensaje desde la cola o el tema de destino. Esta propiedad es una extensión de IBM para la especificación de SOAP sobre JMS.
      Best practice Best practice: En el caso de los componentes de cliente, establezca esta propiedad en true para solicitudes asíncronas unidireccionales o bidireccionales, a fin de evitar los problemas de sincronización que se pueden producir con las solicitudes de servicio web síncronas bidireccionales. Si esta propiedad no se ha establecido o se ha establecido en el valor predeterminado false, el servidor suspende la transacción 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.bprac
    • SOAPJMS_requestURI: debe establecer esta propiedad en el URL de punto final JMS asociado a la solicitud.
    • SOAPJMS_soapAction: esta propiedad opcional se establece en un mensaje de solicitud JMS de salida para indicar el valor soapAction asociado a la solicitud del servicio web. Esta propiedad es similar a la cabecera HTTP SOAPAction utilizada al transportar las solicitudes de servicio web sobre 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 SOAPJMS_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.
    • SOAPJMS_targetService: debe establecer esta propiedad en un mensaje de solicitud JMS saliente y el valor debe coincidir con la propiedad targetService que se encuentra en el URL de punto final JMS para la solicitud. Este valor lo utiliza el componente de servidor para determinar el componente de puerto para el que se asigna la solicitud.
    • SOAPJMS_bindingVersion: esta propiedad indica el número de versión del protocolo que utilizan el cliente y el servidor. Establezca el valor en 1.0.
  • Si el mensaje de solicitud representa una solicitud bidireccional, lo que significa que se espera una respuesta, el componente de cliente debe establecer la propiedad JMSReplyTo 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 especificar la cola. Puede beneficiarse de configurar una cola de respuesta permanente en el cliente para evitar que el cliente tenga que crear una cola temporal, cada vez que se realiza una solicitud de servicio web. Infórmese sobre la configuración de una cola de respuesta permanente para servicios web con SOAP sobre JMS para obtener más información sobre la creación de esta cola especial.
  • Si el mensaje de solicitud SOAP representa una solicitud unidireccional, lo que significa que no se espera un mensaje de respuesta, el componente de cliente no debe establecer la propiedad JMSReplyTo del mensaje JMS.
  • El componente de cliente puede asumir que un mensaje de respuesta es un objeto BytesMessage de JMS.
  • El componente de cliente puede presuponer que el ID de correlación del mensaje de respuesta coincide con el ID de mensaje del mensaje de solicitud original.
El componente de servidor es responsable de recibir los mensajes de solicitud SOAP y de enviar los mensajes de respuesta SOAP, y se adhiere a las restricciones de protocolo siguientes:
  • El componente del servidor puede esperar recibir un objeto BytesMessage de JMS. Si el componente de servidor recibe algo que no sea un BytesMessage, se devuelve un error con el subcódigo unsupportedJMSMessageFormat si se espera una respuesta.
  • El componente servidor debe esperar recibir un objeto javax.jms.BytesMessage o un objeto javax.jms.TextMessage. Si el componente de servidor recibe algo que no sea un BytesMessage o TextMessage, se devuelve un error con el subcódigo unsupportedJMSMessageFormat si se espera una respuesta.
  • 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 JMSReplyTo del mensaje de solicitud JMS. El método getJMSReplyTo del mensaje JMS se utiliza para recuperar el valor de la propiedad JMSReplyTo del mensaje JMS. Este valor de propiedad indica el destino de la respuesta.
  • Cuando envía un mensaje de respuesta, el componente de servidor debe utilizar el mismo tipo de mensaje que la solicitud. Si la solicitud se ha recibido como BytesMessage, la respuesta debe enviarse como BytesMessage. De forma parecida, si la solicitud se ha recibido como TextMessage, la respuesta debe enviarse como a TextMessage.
  • El componente de servidor debe establecer las propiedades siguientes en el mensaje de respuesta JMS antes de enviar el mensaje a la cola de respuesta:
    • SOAPJMS_contentType: esta propiedad se utiliza para describir el tipo de contenido del mensaje. Consulte la descripción de esta propiedad en la sección de responsabilidades del cliente de este tema.
    • correlation ID: configure la propiedad del ID de correlación del mensaje de respuesta JMS con el ID de mensaje del mensaje de solicitud JMS original. Esta correlación se realiza llamando al método setJMSCorrelationID del mensaje JMS.
    • SOAPJMS_bindingVersion: esta propiedad indica el número de versión del protocolo que utilizan el cliente y el servidor. Establezca el valor en 1.0.

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:     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
...
El ejemplo siguiente muestra el resultado de llamar al método toString del mensaje JMS para un mensaje de solicitud con adjuntos:
  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
...
El ejemplo siguiente muestra el resultado de llamar al método toString del mensaje JMS para un mensaje de respuesta SOAP:
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
...

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwbs_soapjmsstd
File name: rwbs_soapjmsstd.html