Protocole SOAP et JMS

Le moteur de services Web prend en charge l'utilisation du transport de messages compatibles SOAP sur JMS (Java™ Message Service) de norme de l'industrie émergente, comme une alternative à HTTP pour la communication des messages SOAP entre les clients et les serveurs.

Configurations prises en charge Configurations prises en charge: Ce produit prend en charge le protocole de norme industrielle émergent SOAP sur JMS. La spécification SOAP sur JMS fournit un ensemble standard d'instructions de mise en oeuvre pour l'utilisation d'un transport compatible JMS avec des messages SOAP pour activer l'interopérabilité entre les implémentations de différents fournisseurs. Cette norme permet l'interopération d'un ensemble de composants client et serveur de différents fournisseurs lors de l'échange de messages de demande et de réponse SOAP via le transport JMS pour les services Web JAX-WS (Java API for XML Web Services) et JAX-RPC (Java API for XML-based RPC). L'utilisation de JMS permet à vos clients et serveurs de services Web basés sur les beans entreprise de communiquer au moyen de files d'attente et de sujets JMS au lieu de passer par des connexions HTTP.sptcfg

IBM® et d'autres fournisseurs travaillent sur la spécification SOAP sur JMS depuis 2005. Cette spécification a été soumise à W3C et un groupe de travail a été créé. La soumission des membres actuels de cette spécification de projet a été publiée conjointement en octobre 2007. Pour plus de détails sur cette norme de l'industrie, voir la spécification SOAP sur JMS.

Utilisez le protocole de transport standard industriel émergeant SOAP sur JMS si vous devez fournir des implémentations pour les composants client ou serveur. Vous devez également vous assurer que ces implémentations sont interopérables avec les composants client et serveur fournis par le moteur de services Web dans WebSphere Application Server.

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 un objet javax.jms.BytesMessage ou un objet javax.jms.TextMessage pour transmettre le message de la requête SOAP au serveur.
  • 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 :
    • SOAPJMS_contentType : Cette propriété, similaire à l'en-tête Content-Type présent dans un message HTTP, sert à décrire le type de contenu du message. Un message SOAP en texte pur, par exemple un message sans pièces jointes, dispose de la valeur suivante définie pour cette propriété du message JMS :
      text/xml; charset="UTF-8"
      Pour un message SOAP contenant des pièces jointes, utilisez le code suivant pour définir la propriété SOAPJMS_contentType du message JMS :
      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 l'enveloppe SOAP, est du type text/xml. Les autres parties de ce message à plusieurs parties contiennent différentes pièces jointes. La spécification HTTP 1.1 contient davantage d'informations sur l'en-tête Content-Type.
    • enableTransaction: Définissez cette propriété facultative sur true pour le message de demande sortant si le composant serveur doit traiter la demande de services web sous la même transaction que celle qui a été utilisée pour recevoir le message de la file d'attente ou du sujet de destination. Cette propriété est une extension de la spécification SOAP pour JMS réalisée par IBM.
      Pratiques recommandées Pratiques recommandées: Pour les composants client, n'attribuez la valeur true à cette propriété que pour des demandes asynchrones unidirectionnelles ou bidirectionnelles de façon à éviter les problèmes de synchronisation pouvant survenir avec des demandes de services web synchrones bidirectionnelles. Si cette propriété n'est pas définie ou est définie à la valeur false par défaut, le serveur suspend 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.bprac
    • SOAPJMS_requestURI : Cette propriété doit avoir pour valeur l'URL de noeud final JMS associée à la demande.
    • SOAPJMS_soapAction : Cette propriété facultative est définie sur un message de demande 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é SOAPJMS_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'elle puisse être résolue. Généralement, cette propriété est définie sur la valeur soapAction à partir du document WSDL.
    • SOAPJMS_targetService : Vous devez définir cette propriété sur un message de demande JMS sortant, et la valeur doit être associée à la valeur de propriété targetService présente dans l'URL du noeud final JMS de la demande. Cette valeur est utilisée par le composant serveur pour déterminer le composant de port auquel la demande est diffusée.
    • SOAPJMS_bindingVersion : Cette propriété indique le numéro de version du protocole utilisé par le client et le serveur. Attribuez-lui la valeur 1.0.
  • Si le message de demande SOAP est une demande bidirectionnelle, c'est-à-dire qu'une réponse est prévue, le composant client doit définir la propriété JMSReplyTo 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 pour spécifier la file d'attente. Il peut être bénéfique de configurer une file d'attente de réponses permanente sur le client pour que ce dernier n'ait pas à créer une file d'attente temporaire à chaque fois qu'une demande de services web est effectuée. Pour plus de détails sur la création de cette file d'attente spéciale, voir la configuration d'une file d'attente de réponses permanente pour des services web utilisant SOAP sur JMS.
  • Si le message de demande SOAP est une demande unidirectionnelle, c'est-à-dire qu'un message de réponse n'est pas prévu, le composant client ne doit pas définir la propriété JMSreplyTo du message JMS.
  • Le composant client peut considérer qu'un message de réponse est un objet BytesMessage JMS.
  • 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 composant serveur peut s'attendre à recevoir un BytesMessage JMS. Si le composant serveur reçoit autre chose qu'un BytesMessage, une erreur avec le sous-code unsupportedJMSMessageFormat est renvoyée au client si une réponse est prévue.
  • Le composant serveur peut s'attendre à recevoir un objet javax.jms.BytesMessage ou un objet javax.jms.TextMessage. Si le composant serveur reçoit autre chose qu'un objet BytesMessage ou TextMessage, le client reçoit un message d'erreur avec le sous-code unsupportedJMSMessageFormat s'il attend une réponse.
  • 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é JMSReplyTo du message de demande JMS est définie. La méthode getJMSReplyTo du message JMS permet de récupérer la valeur de propriété JMSReplyTo à partir du message JMS. Cette valeur indique la destination de la réponse.
  • Quand le composant serveur envoie un message de réponse, il doit utiliser le même type de message que la requête. Si la requête reçue était un objet BytesMessage, la réponse doit également être du type BytesMessage. De même, si la requête reçue était un objet TextMessage, la réponse doit également être du type TextMessage.
  • 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 de réponses :
    • SOAPJMS_contentType : Cette propriété sert à décrire le type de contenu du message. Voir la description de cette propriété dans la section sur les responsabilités du client dans cette rubrique.
    • correlation ID : La propriété de l'ID corrélation du message de réponse JMS doit être définie sur l'ID message du message de demande JMS d'origine. Cette corrélation est réalisée en appelant la méthode setJMSCorrelationID de message JMS.
    • SOAPJMS_bindingVersion : Cette propriété indique le numéro de version du protocole utilisé par le client et le serveur. Attribuez-lui la valeur 1.0.

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:     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
...
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:  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
...
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_soapjmsstd
Nom du fichier : rwbs_soapjmsstd.html