Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
$Body/Staff/StaffNumber="2"|Match
Mensajes de prueba
Los mensajes de prueba que se utilizan en el ejemplo de Examen de colas de WebSphere
MQ son mensajes XML sencillos que contienen detalles sobre el personal de una empresa.
staffmsg1:
<Staff>
<StaffNumber>1</StaffNumber>
<NameInfo>
<LastName>Smith</LastName>
<FirstName>Jack</FirstName>
</NameInfo>
</Staff>
staffmsg2:
<Staff>
<StaffNumber>2</StaffNumber>
<NameInfo>
<LastName>Doe</LastName>
<FirstName>Jane</FirstName>
</NameInfo>
</Staff>
La ejecución del ejemplo Nodos SOAP consiste en pasar un mensaje a través del flujo de
mensajes de consumidor. Para ejecutar este ejemplo, puede utilizar el Cliente de prueba
para colocar mensajes de entrada en el flujo de mensajes.
Para comprobar qué puerto está utilizando el grupo de ejecución del proveedor,
emita el siguiente mensaje mqsireportproperties:
Para verificar que el puerto que el nodo SOAPRequest está utilizando es el puerto
correcto para llamar al flujo de proveedor, cambie el puerto del nodo SOAPRequest
por el puerto que el grupo de ejecución de proveedor está utilizando realizando los
pasos siguientes:
Asegúrese de que los objetos administrados JNDI se han creado como se describe
en Configurar el ejemplo Nodos SOAP para que utilice transporte JMS. Asegúrese
también de que se han establecido las propiedades JNDI en los nodos SOAPInput y
SOAPRequest. Verifique que se han creado las siguientes colas de WebSphere MQ
bien a través de WebSphere MQ Explorer o de la Consola de mandatos de
WebSphere MQ.
o JMSREQUESTQ
o JMSREPLYQ
En el ejemplo, el recuadro de selección Habilitar soporte para ?wsdl del nodo SOAPInput
está seleccionado; de forma predeterminada no está seleccionado. No se devuelve
información de WSDL si el recuadro de selección no está seleccionado. Este recuadro de
selección está en el separador Transporte HTTP.
Para verificar que el flujo se ha configurado utilizando el WSDL esperado, envíe una
solicitud HTTP GET al punto final expuesto por el flujo, con el sufijo ?wsdl. Por ejemplo,
puede especificar un URL con la forma siguiente en la barra de direcciones de un
navegador:
http://brokerHost:brokerPort/pathSuffixFromNode?wsdl
<xsd:import namespace="..."</xsd:import>
schemaLocation="http://brokerHost:brokerPort/pathSuffixFromNode?xsd
=xsd0" />
Ejecutar el ejemplo
1. En la vista Desarrollo de aplicaciones, expanda el proyecto SOAPNodesSampleFlows.
2. Bajo Pruebas de flujo, efectúe una doble pulsación en
SOAPNodesSampleConsumerFlow.mbtest para abrir el archivo en el Cliente de prueba.
3. Pulse Enviar mensaje.
4. Seleccione Extraer de la cola en el panel Sucesos de prueba de flujo de mensaje y luego
pulse Obtener mensaje.
<NS1:submitPOResponse
xmlns:NS1="http://www.acmeOrders.com/OrderService">
<orderStatus>AVAILABLE</orderStatus>
<orderAmt>50</orderAmt>
<partNo>Some Part</partNo>
<partQuantity>1</partQuantity>
</NS1:submitPOResponse>
El ejemplo Nodos SOAP muestra cómo se pueden utilizar los nodos SOAPInput,
SOAPReply y SOAPRequest para proporcionar y consumir un servicio web a través de un
transporte HTTP o JMS.
El asistente "Empezar a partir de archivos WSDL y/o XSD" se utiliza con el archivo
WSDL para crear el conjunto de mensajes y los dos flujos de mensajes que componen este
ejemplo.
La tabla siguiente muestra los nodos del flujo de mensajes de Proveedor de servicios web:
SOAPInput Input
Subflow OrderService_Extract
SOAPReply Reply
El nodo SOAPInput recibe mensajes SOAP de entrada y, si son válidos, los pasa por el
flujo de mensajes al subflujo OrderService_Extract. El subflujo OrderService_Extract lo
crea el asistente "Empezar a partir de archivos WSDL y/o XSD". El siguiente diagrama
muestra el subflujo de Proveedor de servicios web:
La tabla siguiente muestra los nodos del subflujo de Proveedor de servicios web:
Input Terminal in
SOAPExtract Extract
Label ws_submitPORequest
El nodo SOAPExtract toma un mensaje SOAP y elimina el sobre SOAP. En este ejemplo,
al eliminar el sobre SOAP se deja un mensaje XML en el dominio XMLNSC, que se puede
utilizar en nodos como el nodo Mapping o el nodo Compute. El nodo SOAPExtract
direcciona a continuación el mensaje a una etiqueta basándose en la operación de servicio
web que se está invocando. En este ejemplo se utiliza una sola operación. Si el WSDL que
se utiliza como punto de partida tiene varias operaciones, el asistente "Empezar a partir de
archivos WSDL y/o XSD" ofrece la opción de implementar más de una operación. Si se
seleccionan varias operaciones, el subflujo tiene varias etiquetas, lo que produce varios
terminales de salida en el flujo de mensajes padre.
Cuando el mensaje XMLNSC deja el subflujo y vuelve al flujo de mensajes del proveedor
principal, entra en un nodo Compute. Utilizando el nodo Compute, puede hacer referencia
al cuerpo SOAP original como XML, y realizar operaciones ESQL en los datos en el
mensaje. En el ejemplo, se hace caso omiso de los datos del mensaje y se crean datos XML
válidos partiendo de cero. Estos datos se envían luego al nodo SOAPReply, que construye
un mensaje SOAP para devolver al consumidor de servicio web que inició la llamada de
servicio web.
La tabla siguiente muestra los nodos del flujo de mensajes de Consumidor de servicios
web:
MQInput SOAPSample_IN
Subflow Invoke_submitPO
MQOutput SOAPSample_OUT
MQOutput SOAPSample_FAULT
La tabla siguiente muestra los nodos del subflujo de Consumidor de servicios web:
Input Terminal in
SOAPRequest Request
SOAPExtract Extract
Label ws_submitPOResponse
El nodo SOAPRequest toma los datos XML de entrada y los utiliza para construir un
mensaje SOAP válido que va a enviar al servicio web definido por las propiedades del
nodo. Si la respuesta que se recibe es válida, se pasa a un nodo SOAPExtract, que elimina
el sobre SOAP de la respuesta y devuelve el mensaje al dominio XMLNSC. El mensaje se
direcciona entonces a la Etiqueta ws_submitPOResponse y sale del subflujo.
<OrderMessage>
<localElement>
<FirstName>Message</FirstName>
<LastName>Broker</LastName>
<Street>IBM</Street>
<City>IBM</City>
<ZipCode>IBM</ZipCode>
<PartNumber>Some Part</PartNumber>
<Quantity>1</Quantity>
</localElement>
</OrderMessage>
<xsd:element name="submitPORequest">
...
<xsd:complexType>
<xsd:sequence>
<xsd:element name="partNo" type="xsd:string"/>
<xsd:element name="partQuantity" type="xsd:int"/>
<xsd:element name="personName">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string"/>
<xsd:element name="lastName" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="address">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="zipCode" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="submitPOResponse">
...
<xsd:complexType>
<xsd:sequence>
<xsd:element name="orderStatus" type="xsd:string"/>
<xsd:element name="orderAmt" type="xsd:int"/>
<xsd:element name="partNo" type="xsd:string"/>
<xsd:element name="partQuantity" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
La ejecución del ejemplo Consumidor asíncrono consiste en poner mensajes a través del
flujo de mensajes. Para ejecutar este ejemplo, puede utilizar el Cliente de prueba para
colocar mensajes de entrada en el flujo de mensajes. Para obtener más información sobre el
Cliente de prueba, consulte Comprobación de los flujos de mensajes utilizando el Cliente
de prueba en la documentación de IBM Integration Bus.
Para comprobar qué puerto está utilizando el servidor del proveedor, emita el
siguiente mandato mqsireportproperties:
Para verificar que el puerto que el nodo SOAPRequest está utilizando es el puerto
correcto para llamar al flujo de proveedor, cambie el puerto del nodo SOAPRequest
por el puerto que el servidor del proveedor está utilizando realizando los pasos
siguientes:
Asegúrese de que los objetos administrados por JNDI se crean según se indica en
Configuración del ejemplo Consumidor asíncrono para utilizar un transporte JMS.
Asegúrese también de que se han establecido las propiedades JNDI en los nodos
SOAPInput y SOAPRequest. Verifique que se han creado las siguientes colas de
WebSphere MQ bien a través de WebSphere MQ Explorer o de la Consola de
mandatos de WebSphere MQ.
o JMSREQUESTQ
o JMSREPLYQ
Ejecutar el ejemplo
1. En la vista Desarrollo de aplicaciones, expanda el proyecto AsyncWebServiceFlows.
2. Efectúe una doble pulsación en WebServicesTest.mbtest para que se abra el archivo en el
Cliente de prueba. Si no tiene una carpeta Pruebas de flujo o un archivo
WebServicesTest.mbtest, debe crear uno. Consulte Crear un archivo de prueba de flujo de
mensajes.
3. Pulse Enviar mensaje.
4. En la ventana Ubicación de despliegue, asegúrese de seleccionar la ubicación de
despliegue correcta, pulse Finalizar. Un mensaje se coloca en la cola
WEBSERVICECLIENTIN.
Estas instrucciones crean flujos que utilizan un transporte HTTP, no obstante, una vez que
haya completado el ejemplo con HTTP, puede modificarlo para utilizar JMS; consulte
Configuración del ejemplo Consumidor asíncrono para utilizar un transporte JMS.
Para crear el ejemplo Consumidor asíncrono, utilice las instrucciones de los enlaces
siguientes para crear los recursos necesarios:
Cuando haya creado los recursos necesarios utilizando las instrucciones proporcionadas,
debe añadir el flujo de servicio web y el flujo de cliente a un archivo de archivador de
intermediario (BAR), junto con los conjuntos de mensajes asociados. La captura de pantalla
siguiente muestra los recursos que se deben añadir en el archivo de archivador de
intermediario:
Cuando haya realizado estos pasos, estará preparado para ejecutar el ejemplo. Consulte
Ejecutar el ejemplo Consumidor asíncrono.
El ejemplo Consumidor asíncrono muestra cómo se pueden utilizar nodos asíncronos para
llamar a un servicio web. El lenguaje WSDL (Web Services Definition Language) del
servicio web se importa en las herramientas y se utiliza para configurar el nodo
SOAPAsyncRequest para invocar operaciones expuestas por el servicio web. Este ejemplo
también muestra cómo se pueden ampliar las interfaces de WebSphere MQ existentes para
realizar solicitudes de servicio web.
El ejemplo utiliza inicialmente un transporte HTTP, pero puede modificarse para utilizar
JMS, consulte Configuración del ejemplo Consumidor asíncrono para que utilice un
transporte JMS.
MQInput MQWSInput
MQOutput MQWSOutput
Label submitPO
Los mensajes
El flujo de mensajes de cliente web está controlado por un mensaje WebSphere MQ. Se
proporciona un archivo de Cliente de prueba para ejecutar el ejemplo; el archivo utiliza el
formato de mensaje mostrado en la captura de pantalla siguiente:
En el siguiente extracto de esquema editado se muestra el formato válido para un mensaje
de solicitud de servicio web y el mensaje de respuesta:
<xsd:element name="submitPORequest">
...
<xsd:complexType>
<xsd:sequence>
<xsd:element name="partNo" type="xsd:string"/>
<xsd:element name="partQuantity" type="xsd:int"/>
<xsd:element name="personName">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string"/>
<xsd:element name="lastName" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="address">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="zipCode" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="submitPOResponse">
...
<xsd:complexType>
<xsd:sequence>
<xsd:element name="orderStatus" type="xsd:string"/>
<xsd:element name="orderAmt" type="xsd:int"/>
<xsd:element name="partNo" type="xsd:string"/>
<xsd:element name="partQuantity" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Después de ejecutar el ejemplo, tal vez desee ampliarlo para enviar un mensaje de solicitud
que no sea válido. Para enviar un mensaje de solicitud que no es válido, debe editar el nodo
Compute Request para añadir elementos incorrectos en el cuerpo del mensaje SOAP. El
terminal de anomalías del nodo SOAPAsyncRequest debe estar conectado porque el
servicio web genera un mensaje de error SOAP. Para obtener más detalles sobre los errores
SOAP, consulte El error SOAP en la documentación de IBM Integration Bus.
ejemplo Propagación de identidad de seguridad
Para obtener información detallada de los conceptos relacionados con la seguridad de flujo de
mensajes, consulte Seguridad de flujo de mensajes en la documentación de IBM Integration Bus.
El nodo MQ_ID MQInput extrae la Identidad, sólo con un nombre de usuario, que se pasa a
la cabecera de mensaje MQMD de WebSphere MQ del mensaje entrante. El nodo MQ_ID
está configurado en el archivo BAR que se proporciona, SecurityIdentityPropagation.bar,
para que tenga un valor de perfil de seguridad de Propagación predeterminada.
El diagrama siguiente muestra el flujo de mensajes Identidad del informe del ejemplo
Propagación de seguridad, denominado SecurityIdentityReportFlow.msgflow, que invoca
el subflujo. Este flujo de mensajes propaga la identidad pertinente.
Los mensajes
Se proporcionan tres mensajes de entrada para ejecutar el ejemplo Propagación de identidad
de seguridad:
Identity Message es un mensaje XML que se utiliza para mostrar cómo se pasa un
conjunto de credenciales de identidad dentro del cuerpo del mensaje:
<?xml version="1.0" encoding="UTF-8"?>
<Envelope>
<Body>
<MessageIdentity>
<Username>IdInMsg</Username>
<Password>PwdInMsg</Password>
<IssuedBy>InMsgIssuer</IssuedBy>
</MessageIdentity>
</Body>
</Envelope>
Consulte Security_Identity_MSG_ID.mbtest
Map To Identity es un mensaje XML que se utiliza para mostrar cómo pasar una Identidad
en la cabecera de WebSphere MQ. La Identidad se establece luego en la Identidad
correlacionada utilizando un nodo Compute, y se utiliza cuando el flujo realiza una
solicitud de salida a través de HTTP:
<?xml version="1.0" encoding="UTF-8"?>
<Envelope>
<Body>
<MapIdentity>true</MapIdentity>
</Body>
</Envelope>
Consulte Security_Identity_Mapped.mbtest
Para crear el ejemplo Propagación de identidad de seguridad, cree los recursos necesarios
llevando a cabo las tareas siguientes, en este orden:
Para ejecutar el ejemplo Propagación de identidad de seguridad, pase cada uno de los
mensajes de ejemplo a través del nodo de entrada de transporte adecuado del flujo de
mensajes principal de Propagación de identidad de seguridad. Puede ejecutar el ejemplo
para saber qué sucede en las siguientes situaciones:
Para obtener más información, consulte Acerca del ejemplo Propagación de identidad de
seguridad.
Para ejecutar el ejemplo con el mensaje WebSphere MQ que contiene una señal de
identidad de usuario en la cabecera MQMD:
Para ejecutar el ejemplo con el mensaje WebSphere MQ que contiene una señal de
identidad de usuario en el cuerpo del mensaje:
Para ejecutar el ejemplo con el mensaje de entrada de WebSphere MQ que contiene una
solicitud para establecer la identidad correlacionada basándose en el nombre de usuario que
se pasa en el MQMD del mensaje:
Señal: "testuser@company.com"
Contraseña: "p_" + <nombre_usuario> + <año_actual> Por
ejemplo, "p_testuser2013"
java BasicAuthHttpPost
<HostURL> <PuertoURL> <SufijoVíaAccesoURL> <Archivo XML>
[<IdUsuario> <Contraseña> ]
En Windows:
El ejemplo Pasarela de servicios web muestra cómo utilizar nodos SOAP, en modalidad de
pasarela, para invocar y proporcionar un servicio web. Este ejemplo se basa en dos ejemplos
existentes (Nodos SOAP y Libreta de direcciones) y modifica el URL en los nodos SOAPRequest de
modo que todas las solicitudes se direccionen a través de un nuevo flujo de pasarela que reenvía
la solicitud al proveedor de servicios web apropiado.
El asistente del ejemplo sustituye el URL en los nodos SOAPRequest en los archivos de
archivador de intermediario (bar) de flujo de consumidor. Si opta por volver a crear los
archivos bar, es posible que estos valores se borren y que el flujo de pasarela no se invoque.
Antes de empezar
Antes de empezar, debe familiarizarse con los ejemplos existentes sobre los que se basa
este ejemplo:
SOAPInput GatewayInput
JavaCompute ComputeURL
SOAPReply GatewayReply
List nodeset =
(List)message.getRootElement().evaluateXPath("SOAP/Body/*[1]");
String csName=((MbElement)(nodeset.get(0))).getName();
try {
//Obtener el proxy de intermediario
BrokerProxy bp = BrokerProxy.getLocalInstance();
//Buscar el URL de un servicio configurable
URL =
bp.getConfigurableServiceProperty("UserDefined/Gateway/"+csName);
} catch (Exception e) {
URL="/";
}
//Establecer el URL de servicio web (WebServiceURL) creando la vía de
acceso si no existe
le.getRootElement().evaluateXPath("?Destination/?SOAP/?Request/?Transport
/?HTTP/?WebServiceURL[set-value('"+URL+"')]");
Los mensajes
Los mensajes SOAP se generan a través de los flujos de cliente y proveedor existentes. El
flujo de pasarela utiliza el nombre de operación para direccionarlo al proveedor correcto.
Ampliar el ejemplo
Una vez que haya ejecutado el ejemplo, es posible que desee ampliarlo añadiendo otro
proveedor de servicios web. Dado que el servicio configurable se utiliza para almacenar el
URL para el proveedor, todo los que debe hacer es añadir una propiedad con el nombre de
una operación de servicio existente y el valor establecido en el URL.
La ejecución del ejemplo Pasarela de servicios web consiste en poner mensajes a través de
los flujos de mensajes. Para ejecutar este ejemplo, puede utilizar el Cliente de prueba para
colocar mensajes de entrada en cualquiera de los flujos de mensajes de consumidor. Para
obtener más información sobre el Cliente de prueba, consulte Comprobación de los flujos
de mensajes utilizando el Cliente de prueba en la documentación de IBM Integration Bus.
El puerto predeterminado que utilizan los servicios web es el 7800, y las solicitudes SOAP
están configuradas para utilizar este puerto. Sin embargo, si este puerto ya se está
utilizando, el número de puerto se incrementa en uno.
Para comprobar qué puerto está utilizando el servidor del proveedor, emita el siguiente
mandato mqsireportproperties:
Siga los pasos que se indican a continuación para verificar que los nodos SOAPRequest
utilizan el puerto correcto, y para sustituir el puerto del nodo SOAPRequest en los archivos
de archivador de intermediario (BAR) por el puerto utilizado por el servidor del proveedor:
Para verificar que el puerto es correcto en el servicio configurable, siga estos pasos:
1. Abra MQ Explorer.
2. Pulse el botón derecho del ratón y seleccione las propiedades del Servicio configurable
definido por el usuario llamado Gateway.
3. Cambie el puerto de cada propiedad y pulse Finalizar.