WSDL-Erweiterungen schreiben, die Ihrem WSIF-Service den Zugriff auf ein JMS-Ziel ermöglichen
Mit Hilfe des nativen JMS-Providers (Java™ Message Service können WSIF-Clients (Web Services Invocation Framework) einen Service, der an einem JMS-Ziel verfügbar ist, als Web-Service behandeln. Verwenden Sie diese Informationen und die zugehörigen Codefragmente, um Ihre WSDL-Erweiterungen zu schreiben.
Vorbereitende Schritte
Informationen zu diesem Vorgang
Die WSDL-Erweiterungen für JMS werden mit dem Namespacepräfix jms bezeichnet. Beispiel: <jms:binding>.
Die unterstützten Operationen sind Einwegoperationen (send für Punkt-zu-Punkt-Messaging mit JMS oder publish für Publish/Subscribe Messaging mit JMS) oder Request-Response-Operationen (send und receive für Punkt-zu-Punkt-Messaging mit JMS). Die WSDL-Operationen geben daher entweder nur eine Eingabenachricht bzw. eine Eingabe- und eine Ausgabenachricht an.
Für Operationen, die Nachrichtenschnittstellen mit einer nativen JMS-Bindung beschreiben, gibt es keine Fehlernachrichten. Bezüglich des Nachrichtenschemas oder der Semantik von Nachrichteneigenschaften gelten keine Annahmen, daher kann keine Unterscheidung zwischen Ausgabe- und Fehlernachrichten getroffen werden.
Verwenden Sie diese Vorgehensweise und die zugehörigen Codefragmente, um die WSDL-Erweiterung (Web Services Description Language) zu schreiben, mit der Ihr WSIF-Service auf einen zugrunde liegenden Service an einem JMS-Ziel zugreifen kann.
Vorgehensweise
Beispiel 1: JMS-Textnachricht
Die JMS-Textnachricht enthält java.lang.String. Im folgenden Beispiel enthält die WSDL-Nachricht nur einen Teil, der den gesamten Hauptteil der Nachricht darstellt:
<wsdl:definitions ... >
<!-- Einfache oder komplexe Typen für Eingabe- und Ausgabenachrichten -->
<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>
Das folgende WSDL-Beispiel ist eine Erweiterung zum vorangegangenen Beispiel der JMS-Nachricht und beschreibt eine Request-Response-Operation, in der spezifische JMS-Eigenschaftswerte der Anforderungs- und der Antwortnachricht für die Anforderungsnachricht gesetzt und von der Antwortnachricht abgerufen werden.
Die JMS-Eigenschaften in der Anforderungsnachricht werden entsprechend den Werten in der Eingabenachricht festgelegt. Ebenso werden für ausgewählte JMS-Eigenschaften der Antwortnachricht die entsprechenden Werte der Ausgabenachricht kopiert. Die Richtung der Zuordnung hängt davon ab, ob das Tag <jms:property> im Eingabe- oder im Ausgabeabschnitt erscheint.
<wsdl:definitions ... >
<!-- Einfache oder komplexe Typen für Eingabe- und Ausgabenachrichten -->
<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">
<!-- Gültig sind die zuvor aufgeführten JMS-Nachrichtentypen -->
<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>