Ecriture des extensions WSDL permettant à votre service WSIF d'accéder à un service WSIF d'une destination JMS
Le fournisseur Java™ Message Service (JMS) natif permet aux clients WSIF de traiter un service disponible au niveau d'une destination JMS (Java Message Service) comme un service Web. Utilisez ces informations et les fragments de code associés pour écrire les extensions WSDL.
Avant de commencer
Pourquoi et quand exécuter cette tâche
Les extensions WSDL pour JMS (Java Message Service) sont identifiées par le préfixe d'espace de nom jms. Par exemple, <jms:binding>.
Les opérations prises en charge sont de type unidirectionnel (envoi pour une messagerie JMS point à point ou publication pour une messagerie JMS publication/abonnement) (envoi et réception pour une messagerie point à point). Selon les cas, les opérations WSDL spécifient donc un message d'entrée seul ou un message d'entrée et un message de sortie.
Les opérations qui décrivent des interfaces de message avec une liaison JMS natif ne possèdent pas de message de défaut. Aucune hypothèse n'est faite quant au schéma du message ou à la sémantique des propriétés de message, si bien qu'il est impossible de faire la distinction entre message de sortie et message de défaut.
Utilisez la procédure suivante et les fragments de code associés pour écrire l'extension WSDL devant permettre à votre service WSIF d'accéder à un service sous-jacent au niveau d'une destination JMS.
Procédure
Exemple 1 : Message texte JMS
Le message texte JMS contient un java.lang.String. Dans cet exemple, le message WSDL contient une seule partie qui représente l'intégralité du corps du message :
<wsdl:definitions ... >
<!-- simple or complex types for input and output message -->
<wsdl:types> ... </wsdl:types>
<wsdl:message name="JmsOperationRequest"> ... </wsdl:message>
<wsdl:message name="JmsOperationResponse"> ... </wsdl:message>
<wsdl:portType name="JmsPortType">
<wsdl:operation name="JmsOperation">
<wsdl:input name="Request"
message="tns:JmsOperationRequest"/>
<wsdl:output name="Response"
message="tns:JmsOperationResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="JmsBinding" type="JmsPortType">
<jms:binding type="TextMessage" />
<format:typemapping style="Java" encoding="Java">
<format:typemap name="xsd:String" formatType="String" />
</format:typemapping>
<wsdl:operation name="JmsOperation">
<wsdl:input message="JmsOperationRequest">
<jms:input parts="requestMessageBody" />
</wsdl:input>
<wsdl:output message="JmsOperationResponse">
<jms:output parts="responseMessageBody" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="JmsService">
<wsdl:port name="JmsPort" binding="JmsBinding">
<jms:address destinationStyle="queue"
jndiConnectionFactoryName="myQCF"
jndiDestinationName="myDestination"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Extension de l'exemple de message JMS précédent, le code WSDL suivant décrit une opération Request-Response dans laquelle des valeurs de propriétés JMS spécifiques sont définies dans le message de demande et extraites du message de réponse.
Les propriétés JMS dans le message de demande sont définies en fonction des valeurs dans le message d'entrée. De la même manière, des propriétés JMS sélectionnées du message de réponse sont copiées dans les valeurs correspondantes du message de sortie. La direction du mappage est déterminée par la spécification de la balise <jms:property> respectivement dans les sections input et output.
<wsdl:definitions ... >
<!-- simple or complex types for input and output message -->
<wsdl:types> ... </wsdl:types>
<wsdl:message name="JmsOperationRequest">
<wsdl:part name="myInt" type="xsd:int"/>
...
</wsdl:message>
<wsdl:message name="JmsOperationResponse">
<wsdl:part name="myString" type="xsd:String"/>
...
</wsdl:message>
<wsdl:portType name="JmsPortType">
<wsdl:operation name="JmsOperation">
<wsdl:input name="Request"
message="tns:JmsOperationRequest"/>
<wsdl:output name="Response"
message="tns:JmsOperationResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="JmsBinding" type="JmsPortType">
<!-- the JMS message type might be any of the preceding types -->
<jms:binding type="..." />
<format:typemapping style="Java" encoding="Java">
<format:typemap name="xsd:int" formatType="int" />
...
</format:typemapping>
<wsdl:operation name="JmsOperation">
<wsdl:input message="JmsOperationRequest">
<jms:property message="tns:JmsOperationRequest" parts="myInt" />
<jms:propertyValue name="myLiteralString"
type="xsd:string" value="Hello World" />
...
</wsdl:input>
<wsdl:output message="JmsOperationResponse">
<jms:property message="tns:JmsOperationResponse" parts="myString" />
...
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="JmsService">
<wsdl:port name="JmsPort" binding="JmsBinding">
<jms:address destinationStyle="queue"
jndiConnectionFactoryName="myQCF"
jndiDestinationName="myDestination"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>