Protocole SOAP sur JMS propriétaire IBM (obsolète)

Vous pouvez utiliser un transport SOAP sur JMS (Java™ Message Service) comme une alternative à HTTP pour la communication des messages SOAP entre les clients et les serveurs. Le moteur de services web prend en charge l'utilisation d'une implémentation propriétaire IBM® ainsi que l'implémentation standard de l'industrie.

Fonction obsolète Fonction obsolète: Dans les versions antérieures du serveur d'applications, un protocole SOAP/JMS propriétaire IBM était pris en charge pour des applications Java API for XML-based RPC (JAX-RPC). Dans WebSphere Application Server 7.0 ou version ultérieure, ce protocole SOAP/JMS propriétaire est abandonné en faveur d'un protocole SOAP/JMS standard. Vous pouvez utiliser le protocole propriétaire d'IBM SOAP sur JMS avec JAX-WS (Java API for XML Web Services) ou JAX-RPC mais il est recommandé d'utiliser le nouveau protocole SOAP sur JMS standard. Si votre application client appelle des services Web basés sur des beans enterprise pris en charge par une version précédente de WebSphere Application Server, vous devez continuer à utiliser le protocole SOAP/JMS propriétaire IBM pour accéder à ces services Web. depfeat

Vous pouvez utiliser le transport SOAP sur JMS si vous devez fournir des implémentations pour les composants client ou serveur, et vous devez vous assurer que ces implémentations sont interopérables avec les composants client et serveur fournis par le moteur de services Web dans le serveur d'applications. Le protocole SOAP sur JMS propriétaire IBM décrit les exigences d'échange de messages spécifiques aux composants client et serveur pour qu'ils puissent échanger une requête SOAP et des messages de réponse via l'utilisation des API JMS prises en charge par le serveur d'applications.

Le composant client est responsable de l'envoi de messages de demande SOAP et de la réception de messages de réponse SOAP dans le respect des contraintes du protocole suivant :
  • Le client doit utiliser soit un objet JMS TextMessage, comme par exemple javax.jms.TextMessage, soit un objet BytesMessage, comme par exemple javax.jms.BytesMessage, pour transmettre le message de demande SOAP au serveur. Si le message de demande contient des pièces jointes, un objet BytesMessage doit être utilisé. Dans le cas contraire, le client peut utiliser un objet TextMessage ou BytesMessage. En raison de la nécessité éventuelle de transmettre des pièces jointes, l'implémentation du client de serveur d'applications utilise uniquement un objet BytesMessage pour le message de demande.
  • Avant d'envoyer le message à la file d'attente ou au sujet de destination, le client doit définir les propriétés suivantes sur le message de demande JMS :
    • contentType : Cette propriété est similaire à l'en-tête Content-Type trouvé dans un message HTTP et permet de décrire le type de contenu du message. Un message SOAP en texte seul, comme par exemple un message sans pièces jointes est rédigé comme suit :
      text/xml; charset="UTF-8"
      La propriété contentType d'un message de demande SOAP qui contient des pièces jointes doit être définie comme suit :
      multipart/related; type="text/xml"; start="<...content-id of first part...>" 
      Cet exemple présente un message à plusieurs parties dont la première partie, qui contient le message SOAP, est du type text/xml. Les autres parties de ce message contiennent différentes pièces jointes. La spécification HTTP 1.1 contient davantage d'informations sur l'en-tête Content-Type.
    • enableTransaction : Attribuez la valeur true à cette propriété facultative dans le message de demande SOAP sur JMS sortant si le composant serveur doit traiter la demande de services web sous la même transaction que celle utilisée pour recevoir le message de la file d'attente ou du sujet de destination. Le composant client doit seulement définir cette propriété sur true pour une demande unidirectionnelle de façon à éviter les problèmes de synchronisation pouvant survenir avec une demande de services web bidirectionnelle. Si cette propriété n'est pas définie ou est définie sur la valeur false par défaut, le serveur suspendra la transaction utilisée pour recevoir le message de demande de la file d'attente ou du sujet de destination avant d'appeler le moteur de services web pour traiter la demande.
      Eviter les incidents Eviter les incidents: Le composant client doit seulement définir cette propriété sur true pour une demande unidirectionnelle. Son paramètrage sur true pour une demande de service web bi-directionnelle n'est pas pris en charge pour des raisons liées à la synchronisation.gotcha
    • endpointURL : Cette propriété doit avoir pour valeur l'URL de noeud final JMS associée à la demande.
    • soapAction : Cette propriété facultative est définie sur un message de demande SOAP sur JMS sortant pour indiquer la valeur soapAction associée à la demande de services Web. Cette propriété est semblable à l'en-tête HTTP SOAPAction utilisé pour le transport des demandes de services web via HTTP. La valeur de la propriété soapAction est un URI identifiant l'objectif de la demande SOAP. Si la propriété soapAction est spécifiée, elle est utilisée par le composant serveur pour déterminer la cible de la demande. La spécification SOAP n'intègre aucune restriction en matière de format ou de spécificité de l'URI ou sur le fait qu'il puisse être résolue. Généralement, cette propriété est définie sur la valeur soapAction à partir du document WSDL.
    • targetService : Cette propriété doit être associée à la valeur de propriété targetService trouvée dans le noeud final JMS indiqué dans l'URL reçue. Cette valeur est utilisée par le composant serveur pour déterminer le composant de port de la cible lors de la répartition de la demande.
    • transportVersion : Cette propriété indique la version du protocole utilisé par le client et le serveur. Attribuez-lui la valeur 1 (un).
  • Si le message de demande SOAP est une demande bidirectionnelle, le composant client doit définir la propriété replyTo du message JMS afin de spécifier quelle file d'attente est utilisée pour le message de réponse. La méthode setJMSReplyTo du message JMS est utilisée à cette fin. Il peut être bénéfique de configurer une file d'attente replyTo permanente sur le client pour que ce dernier n'ait pas à définir la propriété replyTo du message JMS à chaque fois qu'une demande de service Web est effectuée.
  • Si le message de demande SOAP est une demande unidirectionnelle, le composant client ne doit pas définir la propriété replyTo du message JMS.
  • Le composant client doit être prêt à traiter un message de réponse qui est un objet BytesMessage ou TextMessage, quel que soit le type de message JMS utilisé pour la transmission de la demande SOAP. Le composant serveur d'applicationsrépond au moyen du même type de message JMS qu'il a reçu du client, à moins que la réponse ne contienne des pièces jointes. Dans ce cas, un BytesMessage doit être utilisé.
  • Le composant client peut considérer que l'ID corrélation du message de réponse correspond à l'ID message de la demande d'origine.
Le composant serveur est responsable de la réception de messages de demande SOAP et de l'envoi de messages de réponse SOAP dans le respect des contraintes du protocole suivant :
  • Le serveur doit être prêt à recevoir un TextMessage ou un BytesMessage. Si la demande contient des pièces jointes, il faut utiliser un BytesMessage. Lorsqu'il envoie le message de réponse au client, l'implémentation du produit WebSphere du composant serveur répond au moyen du même type de message, à moins que la réponse ne contienne des pièces jointes. Dans ce cas, un BytesMessage est utilisé.
  • Le composant serveur doit traiter la demande SOAP de manière adéquate de sorte à produire un message de réponse SOAP approprié.
  • Le composant serveur ne doit envoyer un message de réponse au client que si la propriété replyTo du message de demande JMS est définie.
  • Le composant serveur doit définir les propriétés suivantes dans le message de réponse JMS avant de l'envoyer à la file d'attente replyTo :
    • contentType : Voir la description de cette propriété dans la section sur les responsabilités du client.
    • Définissez l'ID corrélation du message de réponse JMS à l'ID message du message de demande JMS d'origine. Pour ce faire, appelez la méthode setJMSCorrelationID de message JMS.
    • transportVersion : Cette propriété indique la version du protocole utilisé par le client et le serveur. Attribuez-lui la valeur 1 (un).

L'exemple suivant présente les résultats de l'appel de la méthode toString du message JMS pour un message de demande sans pièces jointes :

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
...
L'exemple SOAP version 1.1 suivant présente la charge utile de l'exemple de message ci-dessus :
<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>
Pour SOAP version 1.2, le paramètre encodingStyle n'est pas pris en charge ; l'exemple est donc similaire au suivant :
<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>
L'exemple suivant présente les résultats de l'appel de la méthode toString du message JMS pour un message de demande avec pièces jointes :
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
...
La charge utile de l'exemple de message ci-dessus est la suivante :
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...>
L'exemple suivant présente les résultats de l'appel de la méthode toString du message JMS pour un message de réponse 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
...

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwbs_soapjms
Nom du fichier : rwbs_soapjms.html