Escritura de extensiones WSDL que permiten al servicio WSIF acceder a un servicio subyacente en un destino JMS
Utilizando el proveedor JMS (Java™ Message Service) nativo, los clientes de WSIF (Web Services Invocation Framework) pueden tratar un servicio que está disponible en un destino JMS como un servicio Web. Utilice esta información y los fragmentos de código asociados para ayudarle a escribir extensiones WSDL (Web Services Description Language).
Antes de empezar
Acerca de esta tarea
Las extensiones WSDL para JMS se identifican por el prefijo de espacio de nombres jms. Por ejemplo, <jms:binding>.
Se da soporte tanto a las operaciones en un único sentido (envío de mensajería punto a punto de JMS publicación de mensajes de publicación y suscripción de JMS) como a las operaciones de solicitud y respuesta envío y recepción de mensajería punto a punto). Las operaciones WSDL, por lo tanto, especifican un mensaje de entrada únicamente o bien un mensaje de entrada y uno salida.
Las operaciones que describen interfaces de mensajes con un enlace JMS nativo no tienen mensajes de error. Debido a que no se presupone nada respecto al esquema de mensaje o a la semántica de las propiedades de mensaje, no se establece ninguna distinción entre los mensajes de salida y los mensajes de error.
Utilice el procedimiento siguiente y los fragmentos de código asociados que le ayudarán a escribir extensiones WSDL (Web Services Description Language) que permiten al servicio WSIF acceder a un servicio subyacente en un destino JMS.
Procedimiento
Ejemplo 1: Mensaje de texto JMS
El mensaje de texto JMS contiene un java.lang.String. En este ejemplo, el mensaje WSDL sólo contiene una parte que represente todo el cuerpo de mensaje:
<wsdl:definitions ... >
<!-- tipos simples o complejos para mensaje de entrada y salida -->
<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>
El siguiente WSDL de ejemplo, que constituye una ampliación del ejemplo del mensaje JMS anterior, describe una operación de solicitud y respuesta donde los valores de propiedades JMS específicos del mensaje de solicitud y respuesta se establecen para el mensaje de solicitud y se recuperan del mensaje de respuesta.
Las propiedades JMS del mensaje de solicitud se establecen a partir de los valores del mensaje de entrada. Del mismo modo, las propiedades JMS seleccionadas del mensaje de respuesta se copian en los valores correspondientes del mensaje de salida. El sentido de la correlación viene determinado por el aspecto del distintivo <jms:property> en la sección de entrada o salida, respectivamente.
<wsdl:definitions ... >
<!-- tipos simples o complejos para mensaje de entrada y salida -->
<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">
<!-- el tipo de mensaje JMS puede ser cualquiera de los tipos anteriores -->
<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>