APLICACIONES COMPUESTAS: DISEÑO Y GESTIÓN
Se suele utilizar el lenguaje WSDL (del inglés Web Services Description Language, lenguaje de descripción de servicios Web) en el contexto de los servicios Web con objeto de definir las interfaces implementadas por un servicio Web. Normalmente se utiliza un enlace SOAP para especificar la realización concreta de la interfaz mediante un servicio Web que dé soporte al protocolo SOAP. La sintaxis WSDL que se utiliza en los archivos creados por el Editor del intermediario de propiedades de Domino Designer es similar a la soportada en WebSphere Portal.
Nota Si desea información más completa sobre el uso de los archivos WSDL en WebSphere Portal, consulte la documentación de WebSphere Portal.
Para guardar una copia del archivo WSDL dentro de la aplicación compuesta basada en NSF, abra la aplicación en IBM® Lotus® Domino(TM) Designer y desplácese a Aplicaciones compuestas > Propiedades de conexiones en el panel de diseño. Utilice el botón Importar WSDL para seleccionar el archivo WSDL en el disco y crear un elemento de diseño "Propiedades de conexiones". Este elemento de diseño puede almacenarse en las plantillas y heredarse de ellas, o bien puede protegerse para evitar que se actualice cuando cambie la plantilla, al igual que ocurre con cualquier otro tipo de elemento de diseño de Notes.
También puede crear sus propios archivos WSDL "desde cero" mediante el uso del Editor del intermediario de propiedades. Si desea más información, consulte "Uso del Editor del intermediario de propiedades en Domino Designer".
Las secciones siguientes de este tema proporcionan más información sobre la sintaxis de los archivos WSDL utilizados en Domino Designer y WebSphere Portal. En concreto, este ejemplo muestra el modo en que una operación de Click-to-Action entre portlets utiliza algunos de los elementos del documento WSDL. Se describen las extensiones al elemento <binding> y se incluye el esquema completo para las extensiones WSDL.
Sintaxis WSDL
Las secciones siguientes proporcionan información específica sobre la sintaxis de los archivos WSDL utilizados en Domino Designer y WebSphere Portal.
<types>
Para los componentes de las aplicaciones compuestas, declara el tipo de datos de los datos que se van a transferir. El tipo de datos se declara utilizando XSD (del inglés XML Schema Datatypes, tipos de datos de esquema XML); consulte la especificación XSD. Es posible que existan múltiples tipos definidos en el documento WSDL. A continuación, se muestra un ejemplo de declaración para un tipo de datos de ejemplo denominado TrackingIDType:
<xsd:simpleType name="TrackingIDType">
<xsd:restriction base="xsd:string">
</xsd:restriction>
</xsd:simpleType>
</types>
<message>
Los mensajes de entrada sólo pueden contener una parte.
<operation>
Proporciona una definición abstracta de una operación de Click-to-Action. Tenga en cuenta la restricción anterior sobre los mensajes de entrada.
<portType>
Define una colección abstracta de operaciones. Las operaciones deben definirse en el documento. En los portlets habilitados para Click-to-Action a cada acción le corresponde una operación. Sólo deben declararse las acciones que tengan que activarse para Click-to-Action.
<binding>
El elemento binding se amplía para asociar acciones de portlet con operaciones. Para cada operación debe proporcionarse el nombre de la acción de portlet. El nombre de la acción de portlet puede especificarse utilizando el atributo name de la etiqueta de acción en la sección binding del archivo WSDL. Si se omite, el atributo name de la etiqueta operation se utiliza como nombre de la acción de portlet. Para cada parámetro operation debe proporcionarse el nombre del parámetro action. El nombre del parámetro portlet puede especificarse utilizando el nombre de la etiqueta param de la sección de enlace del archivo WSDL. Si se omite, el atributo name de la etiqueta part asociado con la etiqueta param se utiliza como nombre del parámetro de portlet.
Además, se puede utilizar el atributo boundTo para especificar dónde se enlazará el parámetro. Las opciones son: el parámetro request, el atributo request, el atributo session o el atributo action.
El elemento <binding> incluye extensiones de portlet de cooperación, que se describen en las extensiones al elemento <binding>, como se muestra en el ejemplo de WSDL.
Si está familiarizado con WSDL, puede haber notado que la sección de servicio (incluida en el elemento <service> de WSDL) no se utiliza en el archivo de declaración de ejemplo. Esto se debe a que el archivo está asociado con un portlet específico que implementa las operaciones definidas en el archivo a través de medios externos (una entrada en el archivo portlet.xml asociado con el portlet).
Extensiones al elemento <binding>
El elemento <binding> se ha ampliado para dar soporte a componentes y portlets de cooperación. Los ejemplos siguientes hacen referencia al uso con portlets.
Cada elemento de extensión tiene el prefijo "portlet:", que hace referencia al espacio de nombres de C2A (Click-to-Action), http://www.ibm.com/wps/c2a. El prefijo "portlet:" se utiliza para identificar los elementos de extensión en esta sección, pero se puede utilizar otro nombre para el prefijo siempre que haga referencia al espacio de nombres de C2A. Los elementos se describen a continuación. Consulte también la información de sobre el esquema de extensiones WSDL más adelante en este tema.
<portlet:binding>
Debe ser el primer elemento de nivel inferior del elemento <binding> de WSDL. Su presencia identifica la sección como extensión de enlace de C2A para la invocación de acciones de portlet. El elemento tiene el atributo siguiente.
En desuso. Si especifica style="struts" indica que se van a declarar las acciones Struts. En su lugar, debe utilizar type=struts en el elemento <portlet:action> para este propósito.
Debe ser el primer elemento de nivel inferior de cualquier elemento <operation> de WSDL de la sección de enlace. Contiene los atributos siguientes:
Nombre de la acción de portlet. Si se omite, el nombre del elemento de operación asociado se utiliza como nombre de la acción de portlet.
Cadena de texto breve sobre la acción, adecuada para visualizarla en la interfaz de usuario del portlet. Si se va a usar una traducción, indique en formato con puntos el nombre de la clave de los paquetes de recursos desde donde se tiene que obtener el texto. Si desea más información, consulte Soporte de internacionalización.
Indica uno de los valores siguientes:
Texto de descripción de la acción. Si se va a usar una traducción, indique en formato con puntos el nombre de la clave de los paquetes de recursos desde donde se tiene que obtener el texto.
Puede tener el valor "true" o "false". Si es false, la acción debe activarse mediante programación en cada sesión. Si es true (valor predeterminado), la acción se activa en cuanto se inicializa el portlet.
En el caso de que varias acciones coincidan según el tipo de datos para el portlet, este atributo se puede utilizar para indicar la acción que debe desencadenarse. Se pueden producir varias acciones coincidentes cuando un usuario difunde una acción en un origen. Si no se especifica, el valor predeterminado es false. En el caso en el que no se establezca ninguna acción individual en true, los datos no se entregan al destino. En el ejemplo siguiente, se declaran dos acciones: trackingDetails y routingDetails. selectOnMultipleMatch se utiliza para indicar que trackingDetails debe utilizarse en el caso de una coincidencia múltiple.
<portlet:binding/>
<operation name="trackingDetails">
<portlet:action caption="Detalles de seguimiento"
description="Obtener los detalles de seguimiento para
el id de seguimiento especificado"
selectOnMultipleMatch="true"/>
<input>
<portlet:param name="trackingId" partname="trackingId"/>
</input>
<output>
<portlet:param name="customerName" partname="custName" boundTo="session"/>
</output>
</operation>
<operation name="routingDetails">
<portlet:action caption="Detalles de transferencia"
description="Obtiene los detalles de transferencia para el id de seguimiento especificado"/>
</binding>
<portlet:param>
Debe aparecer como elemento de nivel inferior en los subelementos <input> u <output> del elemento <operation> en el enlace. Especifica los parámetros consumidos (si se incluyen en el elemento <input>) o generados (si se incluyen en el elemento <output>) por la acción de portlet. Actualmente, se restringe el número de parámetros consumidos como máximo a uno. El número de parámetros generados puede ser cualquiera. Tiene los atributos siguientes:
Nombre del parámetro. Si se omite, el valor del atributo name del elemento part se utiliza como nombre del parámetro.
Hace referencia a un elemento part de la entrada o salida de la operación. Puede omitirse si la entrada o la salida sólo tiene una parte.
Especifica dónde está enlazado el valor del parámetro. Actualmente, este atributo sólo puede especificar uno de los valores siguientes:
A continuación, se muestra el esquema de los elementos de extensión introducidos para la invocación de acciones de portlets mediante Click-to-Action. Las líneas se han fragmentado para facilitar la lectura.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema
targetNamespace="http://www.ibm.com/wps/c2a"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/wsdl/
http://schemas.xmlsoap.org/wsdl/
http://www.w3.org/2001/XMLSchema
http://www.w3.org/2001/XMLSchema.xsd"
xmlns:portlet="http://www.ibm.com/wps/c2a">
<!-- El elemento de enlace (binding) indica que la sección de enlace contiene extensiones personalizadas que describen una correlación de operaciones en las acciones de portlet. Debe colocarse dentro de un elemento de enlace WSDL. -->
<element name="binding" type="portlet:bindingType"/>
<complexType name="bindingType">
<!-- EN DESUSO, retenido para la compatibilidad con la versión 4. Utilice en su lugar el atributo type con el elemento action. Establezca el valor para que sea "struts" para un portlet implementado utilizando Struts Framework. -->
<attribute name="style" type="string" use="optional"/>
</complexType>
<!-- El elemento action se utiliza para proporcionar toda la información sobre la acción del portlet necesaria para que el intermediario de propiedades la invoque. Debe colocarse dentro de un elemento wsdl:operation en la sección wsdl:binding. -->
<complexType name="actionType">
<sequence>
<!-- El elemento param se utiliza para indicar información sobre la propiedad de entrada o salida asociada a la acción y el mecanismo para transmitir parámetros desde o a la acción. Debe colocarse dentro de un elemento wsdl:input o wsdl:output. -->
<element name="param" type="portlet:paramType" minOccurs="0"maxOccurs="unbounded"/>
</sequence>
<!-- Nombre de la acción. Se establecerá como el nombre de la acción de portlet. Si se omite, el nombre del elemento de la operación correspondiente se utilizará como el nombre de la acción. -->
<attribute name="name" type="string" use="optional"/>
<!-- Los valores que se reconocen actualmente son los valores predeterminados, simples, struts y estándar, siendo el valor predeterminado el que aparece por defecto. Se utiliza para especificar si se emplea el mecanismo DefaultPortletAction, acción de portlet simple o acción de Struts para invocar la acción del portlet. Tenga en cuenta que DefaultPortletAction está en desuso y que, de forma predeterminada, se utiliza este valor para la compatibilidad con versiones anteriores. Aconsejamos usar el valor simple para evitar problemas de migración en el futuro. -->
<attribute name="type" type="string" use="optional" default="default"/>
<!-- Nombre abreviado de la acción que se visualiza para el usuario final. Si se proporciona un archivo de recursos de mensaje para el portlet, el valor se utiliza como clave para recuperar una serie traducida -->
<attribute name="caption" type="string" use="optional"/>
<!-- Descripción de la acción que se visualiza para el usuario final. Si se proporciona un archivo de recursos de mensaje para el portlet, el valor se utiliza como clave para recuperar una serie traducida -->
<attribute name="description" type="string" use="optional"/>
<!-- Si más de una acción de portlet puede procesar simultáneamente un valor de propiedad, sólo se invocan aquellos valores con el atributo invokeOnMultipleMatch establecido en true -->
<attribute name="selectOnMultipleMatch" type="boolean" use="optional" default="false"/>
<!-- Si el atributo activeOnStartup es true, la acción para la invocación se puede seleccionar en cualquier momento a menos que se desactive mediante programación para cada sesión. Si activeOnStartup tiene el valor false, puede que la acción no se seleccione para la invocación, a menos que se active mediante programación para cada sesión -->
<attribute name="activeOnStartup" type="boolean" use="optional" default="true"/>
<!-- El elemento param indica el modo en que el parámetro se proporcionará a la acción del portlet o se recuperará de la acción una vez esta se haya ejecutado -->
<complexType name="paramType">
<!-- Nombre del parámetro que se utilizará en la invocación de la acción. Si se omite, se utiliza partname. Este nombre también se establecerá como el nombre de la propiedad correspondiente. Consulte la descripción de las propiedades en el documento del modelo de programación. -->
<!-- Nombre de la parte correspondiente. Sólo se puede omitir si hay un solo parámetro para la acción, en cuyo caso será inferido desde la definición de la operación asociada -->
<attribute name="partname" type="string" use="optional"/>
<!-- En qué lugar debe colocarse el parámetro antes de invocar la acción (en caso de parámetros de entrada) o en qué lugar debe buscarse después de invocar la acción (en caso de parámetros de salida). Los valores permitidos son request-attribute, request-parameter, session y action. -->
<attribute name="boundTo" type="string" default="request-parameter"/>
<!-- Clase java del parámetro. El valor predeterminado es java.lang.String. Actualmente no se utiliza, pero puede utilizarse en el futuro para la validación-->
<attribute name="class" type="string" default="java.lang.String"/>
<!-- Descripción del parámetro que se visualiza para el usuario final. Si se proporciona un archivo de recursos de mensaje para el portlet, el valor se utiliza como clave para recuperar una serie traducida -->
</xsd:schema>
Puede utilizar archivos WSDL existentes como punto de partida para la creación de componentes NSF y componentes de Eclipse. No obstante, es aconsejable que utilice el Editor del intermediario de propiedades cuando trabaje con ellos.
Ejemplo de WSDL para aplicaciones compuestas en Domino Designer
Utilice esta sintaxis de ejemplo y las anotaciones (en negrita) como referencia durante la creación de su propia aplicación compuesta de ejemplo con Lotus Notes.
<definitions name="Property Broker WSDL"
targetNamespace="http://www.ibm.com/wps/c2a/testwsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:portlet="http://www.ibm.com/wps/c2a"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.ibm.com/wps/c2a/testwsdl"
xmlns:cus="com.ibm.compositeapps.samples" -de esta forma puede agregar su propio espacio de nombres de ejemplo (1)
xmlns:cut="com.ibm.compositeapps.samples.2" -este es otro espacio de nombres de ejemplo (2)
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:schema targetNamespace="com.ibm.compositeapps.samples"> -este es un espacio de nombres personalizado (1)
<xsd:simpleType name="SubjectType"> -este es el nombre del tipo
<xsd:restriction base="xsd:string"/>
<xsd:schema targetNamespace="com.ibm.compositeapps.samples.2"> aquí se muestra otro espacio de nombres (2)
<xsd:simpleType name="AccountType">
<xsd:simpleType name="IDType">
<xsd:simpleType name="CustomerType">
<message name="New_Response_Action_Operation_Input">
<part name="SubjectPart" type="cus:SubjectType"/> -observe cómo el "cus" apunta hacia el espacio de nombres (1) -- la asignación va de la propiedad al tipo
</message>
<message name="New_Response_Action_Operation_Output">
<part name="AccountPart" type="cut:AccountType"/> -observe cómo el "cut " apunta hacia el espacio de nombres (1)
<part name="IDPart" type="cut:IDType"/>
<message name="OnViewEntrySelectionChange_Property_Operation_Output">
<part name="CustomerPart" type="cut:CustomerType"/>
<portType name="NotesDB_Operations"> -esta sección es obligatoria de acuerdo con el estándar WSDL
<operation name="New_Response_Action_Operation">
<input message="tns:New_Response_Action_Operation_Input"/>
<output message="tns:New_Response_Action_Operation_Output"/>
<operation name="OnViewEntrySelectionChange_Property_Operation">
<output message="tns:OnViewEntrySelectionChange_Property_Operation_Output"/>
</portType>
<binding name="Notes_Binding" type="tns:NotesDB_Operations">
<operation name="New_Response_Action_Operation"> -esta es una acción con una entrada y dos propiedades de salida. Vea la nota siguiente.
<portlet:action name="New Response Action" caption="NewResponseCaption" -este es el nombre que se muestra en la interfaz de usuario de Domino Designer en el cuadro de propiedades de la acción description="NewResponseDesc.id"/>
<portlet:param name="Subject" -este es el nombre de la propiedad; debe ser exclusivo dentro de cada archivo WSDL partname="SubjectPart" -partname se emplea para la correspondencia con "part name=" en <message> caption="subjectCaption" description="subjectDesc.id"/>
<output> -puede tener 0-N propiedades de salida en una acción
<portlet:param name="Account" partname="AccountPart" caption="accountCaption" description="accountDesc.id"/>
<portlet:param name="ID" partname="IDPart" caption="id" description="idDesc.id"/>
<operation name="OnViewEntrySelectionChange_Property_Operation"> -esta es una propiedad de salida
<portlet:action name="OnDocSelectionChange" -aquí puede usar cualquier nombre, pero debe ser exclusivo dentro de cada archivo WSDL caption="DocSelectionCaption" description="DocSelectionDesc.id"/>
<portlet:param name="Customer" partname="CustomerPart" caption="customer" description="customer.id"/>
</definitions>
Directrices para los archivos WSDL
Utilice las directrices siguientes para crear archivos WSDL: