Validación de contenidos de artefactos en WebSphere Service Registry and Repository

Este artículo utiliza un ejemplo para mostrar cómo configurar y personalizar el validador de contenidos de WebSphere Service Registry and Repository y cómo aplicar las prácticas recomendadas en contenidos WSDL.

Liu Xin Peng, 顾问软件工程师和开发主管, IBM

/developerworks/i/p-xpengliu.jpgXin Peng Liu 是 IBM Software Group,IBM SOA Advanced Technologies 的云服务顾问软件工程师和开发负责人。他在许多项目中设计并开发了 SOA 技术和解决方案。现在,他专注于云计算和行业解决方案。



James Mark Williams, Software Engineer, IBM

James Williams es Software Engineer y forma parte del equipo de verificación funcional de WebSphere Service Registry and Repository en el Laboratorio de Sofware de IBM en Hursley, Reino Unido. Anteriormente, trabajó en un grupo de prueba de WebSphere Voice Response.



Xi Ning Wang, Staff Software Engineer, IBM

Photo of Xi Ning WangXi Ning Wang trabaja como Software Engineer en el Centro de Diseño de Arquitectura Orientada a Servicios (Service-oriented Architecture o SOA) de China. Forma parte del equipo SOA Advanced Technologies dentro del IBM Software Group, donde se ocupa del desarrollo de tecnología SOA. Actualmente se dedica a las áreas de servicios web, en tecnologías relacionadas con el modelado y las políticas.


Nivel de autor contribuyente en developerWorks

Liang Xue , Staff Software Engineer, IBM

Photo of Liang XueLiang Xue es Staff Software Engineer y trabaja en el Centro de Diseño SOA del Laboratorio de Desarrollo de Software de IBM en China. Se dedica a temas relacionados con gobernabilidad SOA, como políticas SOA y gestión de metadatos SOA. Liang Xue obtuvo un doctorado en 2006.



28-07-2011

Introducción

IBM® WebSphere® El Service Registry and Repository V6.2 ofrece varios métodos de validación de artefactos. La validación puede realizarse en los metadatos asociados con un artefacto así como también en el contenido del artefacto. La validación de contenidos se agregó al WebSphere Service Registry and Repository V6.2 a fin de verificar el cumplimiento de WSDL y XSD en base a la especificación del WS-I Basic Profile 1.1. WebSphere Service Registry and Repository ofrece tres métodos de validación principales:

  • Es posible crear un complemento para realizar la validación a través de la interfaz de programación del sistema WebSphere Service Registry and Repository. Para realizar validaciones durante operaciones de creación, eliminación o actualización, deberá escribir un clase Java que implemente la interfaz Service Registry Validator. Para realizar validaciones durante operaciones de gobernabilidad como transición, validación, otorgar gobernabilidad y quitar gobernabilidad, deberá crear clases Java para implementar las interfaces Service Registry Governance Validator y Service Registry Governance Validator2.
  • Puede usar el marco del validador de políticas de gobernabilidad para realizar una validación. Además, es posible limitar operaciones (creación, actualización, eliminación, transición, validación, otorgar gobernabilidad y quitar gobernabiliad) basándose en los metadatos (propiedades, relaciones y clasificaciones) adjuntos al artefacto en cuestión. Estas reglas de políticas se especifican usando archivos con formato WS-Policy, que contienen afirmaciones de dominio de políticas de gobernabilidad. Puede ampliar estas afirmaciones escribiendo un clase Java adicional que implemente la interfaz ServiceRegistryGovernancePolicyPlugin, la cual se invoca a través del elemento PluginAssertion..
  • Para realizar la validación de contenidos WSDL, puede usar el validador WS-I proporcionado con el WebSphere Service Registry and Repository V6.2. Este método emplea el método marco del Governance Policy Validator junto con un archivo de reglas (presentado como un elemento de configuración de políticas de contenido de los documentos) para validar el contenido WSDL. Este validador verifica que el WSDL se encuentre en conformidad con la especificación del WS-I Basic Profile 1.1 e informa a los usuarios las violaciones mediante un informe de texto o una excepción.

Este artículo explica la configuración y personalización de la validación de contenidos WSDL y cómo definir su propio conjunto de reglas de validación WS-I.

Se usa como ejemplo una empresa minorista de ventas online (Online Retail Company - ORC) ficticia para demostrar las formas en las que se puede modificar el validador de contenidos WSDL para ajustarse a diferentes necesidades. Este artículo muestra cómo quitar reglas que no son de interés del cliente, cómo modificar la gravedad de una violación (error o advertencia), cómo configurar mensajes de advertencia personalizados (únicamente con WebSphere Service Registry and Repository V6.2.0.2 o versiones posteriores) y cómo aplicar prácticas recomendadas mediante una regla personalizada. Se seguirán los siguientes pasos a fin de explicar la configuración y la personalización de WS-I:

  1. Configuración del validador WS-I
  2. Personalización del validador WS-I
  3. Activación del nuevo conjunto de reglas de configuración WS-I
  4. Demostración de las capacidades del validador WS-I personalizado

A continuación de los pasos recién enumerados, se presenta una sección que describe cómo definir su propio conjunto de reglas de validación WS-I.

Configuración del validador WS-I

La configuración del validador WS-I consta de dos pasos:

  1. Active el validador de políticas de gobernabilidad. Navegue a la perspectiva Configuration (configuración), despliegue el menú Active Configuration (configuración activa), despliegue el submenú Plug-ins (complementos) y seleccione Validation Properties (propiedades de validación). Haga clic en el enlace ValidationProperties para ver el contenido de las propiedades de validación. Tanto en las entradas de los validadores como en las de los governanceValidators, deberá agregar com.ibm.sr.governance.validator.GovernancePolicyValidator a cada valor, como se muestra en la Figura 1. Si usted ya ha atribuido valores a estas claves y los quiere conservar, agregue el nuevo valor al final de la línea separado por una coma:
    Figura 1. Propiedades de validación
    Propiedades de validación
  2. Cargue un archivo de políticas del validador WS-I, cuyo formato se describe en el Centro de información del WebSphere Service Registry and Repository V6.2. A continuación se muestra un ejemplo. Cargue este archivo como un elemento de configuración del validador de políticas de gobernabilidad con el nombre WS-I Policy.
Archivo de políticas del validador
<wsp:Policy wsu:Id="uuid:governanceProfileId"Name="GovernanceProfilePolicy" 
xmlns:
wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:
wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:
wsrrgp="http://www.ibm.com.policy/GovernancePolicyDomain">
   
<wsrrgp:ValidatorPolicy wsrrgp:name="plugin_wsi_validation_policy2">     
<wsp:Policy>       
<wsrrgp:ContentApplicabilityFilter wsrrgp:targetXPath="/WSRR/WSDLDocument"/>       
 <wsrrgp:WSRROperationFilter>         
 <wsrrgp:WSRROperation>MAKE_GOVERNABLE
 </wsrrgp:WSRROperation>       
</wsrrgp:WSRROperationFilter> 
<wsrrgp:EntityAssertionPolicy wsrrgp:name="plugin_wsi_status_confirm">
<wsp:Policy Name="plugin_wsi_status_policy_confirm">
<wsrrgp:
PluginAssertion wsrrgp:name="Invoking WS-I Compliance Validation" 
wsrrgp:class=
"com.ibm.sr.policy.wsi.WSIComplianceValidator"
wsrrgp:options="rules=WSIBasicProfile11;report=true"> 
 </wsrrgp:PluginAssertion>
 </wsp:Policy>
 </wsrrgp:EntityAssertionPolicy> 
 </wsp:Policy>   
</wsrrgp:ValidatorPolicy> 
</wsp:Policy>

El elemento ContentApplicabilityFilter define un XPath meta para el WSDLDocument, mientras que el elemento WSRROperation define una acción make_governable (otorgar gobernabilidad). Como resultado, la validación conforme a WS-I se usará en todos los documentos WSDL que ingresen a un ciclo de vida de gobernabilidad.

Dentro del elemento wsrrgp:options hay una opción de informe, la cual especifica si desea que se aplique validación WS-I (report=false) o si no desea que se aplique validación y prefiere recibir información de las violaciones de las reglas (report=true).

Personalización del validador WS-I

A continuación se describe un ejemplo de personalización del validador WS-I para la ORC. La empresa posee un sistema en línea para la prestación de una serie de servicios a sus clientes. Este sistema ofrece a los clientes la posibilidad de seleccionar varios artículos de la tienda en línea y enviarlos agrupados. La ORC usa el WebSphere Service Registry and Repository para gestionar sus servicios. La validación WS-I se activa cuando la empresa carga los metadatos del servicio web (archivos WSDL inclusive) al WebSphere Service Registry and Repository.

El administrador analizó la implementación técnica del sistema minorista en línea y observó que se usaba un tipo array para soportar los intercambios de datos del servicio de realización de pedidos. En el WS-I Basic Profile 1.1, existen tres entradas (R2110, R2111 y R2112) que describen la interoperabilidad de los arrays. La Tabla 1 detalla la información correspondiente a cada una de estas reglas. El WS-I Basic Profile 1.1 establece que la extensión array está fuera de las reglas de conformidad. Sin embargo, ORC cuenta con una sola plataforma y el intercambio de datos del servicio web es correcto. Aunque no es necesario modificar los archivos WSDL para limitar el uso de array, el administrador aún requiere que los documentos WSDL sean validados de acuerdo con el resto de las reglas del Basic Profile. Por consiguiente, estas tres reglas de verificación de array deberán quitarse de la carga de los metadatos del servicio web en el WebSphere Service Registry and Repository. El Listado 1 muestra las reglas de validación que deben quitarse de las Políticas de contenidos de los documentos para la validación WS-I:

Tabla 1. Descripción detallada de las reglas de verificación de array
NombreDescripción
R2110En las DESCRIPCIONES, las declaraciones NO DEBEN ampliar o limitar el tipo soapenc:Array.
R2111En las DESCRIPCIONES, las declaraciones NO DEBEN usar el atributo wsdl:arrayType en la declaración tipo.
R2112En las DESCRIPCIONES, los elementos NO DEBEN nombrarse con la convención ArrayOf.
Listado 1. Reglas de verificación de array en las políticas de contenidos de los documentos
<rule context="..."> 
<let name="importedDocName" value="..."/> 
<report id="R2110" test="...">   
RECORD_REPORT
{http://com.ibm.cn/soa/standard/example}|WSI_BP_11_R2110|<name path="..."/>
\<value-of select="..."/>|ERROR|<value-of  select="..."/> 
</report> 
<report id="R2111" test="...">   
RECORD_REPORT
{http://com.ibm.cn/soa/standard/example}|WSI_BP_11_R2111|<name path="..."/>   
\<value-ofselect="..."/>
|ERROR|<value-of select="..."/> 
</report> <report id="R2112" test="...">
RECORD_REPORT
{http://com.ibm.cn/soa/standard/example}
|WSI_BP_11_R2112|<value-of select="..."/>
|ERROR|
<value-of select="..."/> 
</report> 
</rule>

En el WebSphere Service Registry and Repository, las políticas de contenidos de los documentos para la validación WS-I se encuentran en la perspectiva Configuration (Configuración). Para ver las reglas del WSIBasicProfile11, seleccione: Active Configuration Profile =&gt (Perfil de configuración activa); Plug-ins =&gt (Complementos); Document Content Policies (Políticas de contenidos de documentos). Luego haga clic en el archivo WSIBasicProfile11 y se mostrará el contenido del elemento de configuración, como muestra la Figura 2. La parte resaltada muestra la regla relacionada con R2110, R2111, y R2112:

Figura 2. Contenido del archivo de reglas de validación WS-I; WSIBasicProfile11
Contenido del archivo de reglas de validación WS-I; WSIBasicProfile11

Haga clic en Download Document (descargar documento) y cambie el nombre del archivo a guardar a WSIBasicProfile11V2.xml. Luego, quite el segmento de la regla descripto en el Listado 1 del archivo WSIBasicProfile11V2.xml. Este archivo finalmente se cargará nuevamente al WebSphere Service Registry and Repository y será utilizado como el nuevo conjunto de reglas correspondientes a la ORC, en base a sus necesidades especiales. La ORC además provee un servicio de gestión de inventario que puede utilizar el cliente para calcular el estado del inventario de una serie de artículos. A fin de cumplir con los requisitos de repetición y equilibrio de la carga, la ORC emplea varios servicios de cálculo del inventario en distintas ubicaciones. Todos estos servicios usan la misma interfaz de cálculo de inventario. Durante la implementación del servicio web, se usa un elemento de importación para separar la interfaz del servicio de la implementación de punto final específica. Este elemento de importación se ha ubicado en diferentes áreas del documento de importación WSDL y el espacio de nombre usa un URI relativo basado en la estructura de la organización. Esto viola las reglas R2022 y R2803 del Perfil BP 1.1. La Tabla 2 muestra las dos reglas:

Tabla 2. Descripción detallada de las reglas de verificación de array
NombreDescripción
R2022Al aparecer en una DESCRIPCIÓN, los elementos wsdl:import DEBEN preceder a todo el resto de los elementos del espacio de nombre WSDL, a excepción de wsdl:documentation.
R2803En las DESCRIPCIONES, el atributo espacio de nombre del wsdl:import NO DEBE ser un URI relativo.

La ORC puede identificar el elemento importado donde quiera que se haya ubicado el elemento de importación. Asimismo, la referencia URI relativa es única y el sistema minorista puede identificarla. Por consiguiente, la ORC quisiera contar con mensajes de ADVERTENCIA para identificar la gravedad de las violaciones de las reglas y quisiera emplear un mensaje personalizado para realizar una aclaración. Estas advertencias y mensajes podrán emplearse si el archivo WSDL file es reutilizado por una tercera parte.

El Listado 2 a continuación muestra las modificaciones requeridas en negrita: los informes de registro correspondientes a R022 y R2803 se han cambiado de ERROR a ADVERTENCIA.El mensaje de advertencia de R2803 se reemplaza de la siguiente manera: "el espacio de nombre: {0} es un URI relativo." En esta situación, el espacio de nombre que se encuentra en violación se tratará como parte del mensaje de advertencia. Por ejemplo: el mensaje de advertencia será: " el espacio de nombre: example.ibm.com/InventoryCalculationInterface es un URI relativo" si el espacio de nombre que se encuentra en violación fuera "example.ibm.com/InventoryCalculationInterface." El WebSphere Service Registry and Repository V6.2.0.2 o sus versiones posteriores sin duda personalizarán el mensaje devuelto. Estos cambios deben realizarse en el archivo WSIBasicProfile11V2.xml file para su posterior aplicación.

Listado 2. Reglas actualizadas en R2022 y R2803
<rule context=
"pmfn:deref(/ctx:Context/ctx:DocumentList/ctx:Document[@role='role0'])
/wsdl:import"> 
<report id="R2022" test="not(( count( preceding-sibling::* ) = 0 ) or ( count 
( preceding-sibling::* ) = count( preceding-sibling::*/self::wsdl:documentation )
+count ( preceding-sibling::*/self::wsdl:import ) ))"> 
RECORD_REPORT{http://com.ibm.cn/soa/standard/example}
|WSI_BP_11_R2022|<value-of 
select="@namespace"/>|ADVERTENCIA|^ 
</report> 
<report 
id="R2803" 
test="not(strext:abs_uri(@namespace))"> 
RECORD_REPORT
{http://com.ibm.cn/soa/standard/example}|
namespace: {0} s a relative URI|
<value-of select="@namespace"/>
|ADVERTENCIA|^ 
</report> </rule>

Activación del nuevo conjunto de reglas de configuración WS-I

A fin de cumplir con los requisitos del validador de la ORC, las reglas de validación originales WS-I expresadas en un archivo de reglas ya han sido modificadas y deben cargarse. Para conservar las reglas de validación WS-I originales, se deberá crear una nueva entrada de Políticas de contenidos de los documentos. Del Web UI:

  • Seleccione la perspectiva Configuration (Configuración), luego seleccione Active Configuration Profile (Perfil de configuración activa) => Plug-ins (Complementos) => Document Content Policies (políticas de contenido de los documentos) del árbol de navegación de la izquierda.
  • Haga clic en Load Document Content Policy (Cargar política de contenido de los documentos):
Figura 3. Creación de una nueva entrada Document Content Policy (Política de contenido de los documentos)
Creación de una nueva entrada Document Content Policy (Política de contenido de los documentos)

Seleccione WSIBasicProfile11V2.xml (archivo guardado durante el "PASO 2 – sección Personalización del WS-I") como el nuevo archivo de políticas de contenidos de los documentos a cargarse y otórguele el nombre de elemento WSIBasicProfile11V2, como se muestra en la Figura 4 a continuación. Haga clic en OK.

Figura 4. Carga del archivo de reglas de validación WS-I personalizadas
Carga del archivo de reglas de validación WS-I personalizadas

Si la operación se realizó con éxito, aparecerá la siguiente vista con una nueva entrada llamada WSIBasicProfile11V2:

Figura 5. Vista actualizada del listado de políticas de contenidos de los documentos
Vista actualizada del listado de políticas de contenidos de los documentos

Para activar el conjunto de reglas WSIBasicProfile11V2 recién cargado, deberá actualizar la política de gobernabilidad del validador WS-I: en la perspectiva de Configuration (Configuración), seleccione Active Configuration Profile =&gt (Perfil de configuración activa); Plug-ins =&gt (Complementos); Governance Policies (Políticas de gobernabilidad) del árbol de navegación de la izquierda. Haga clic para abrir el archivo de políticas de gobernabilidad del validador WS-I, el cual se cargó en la sección "WS-I Validator configuration" (“Configuración del validador WS-I”):

Figura 6. Vista de políticas de gobernabilidad para el validador de documentos
Vista de políticas de gobernabilidad para el validador de documentos

En el Content Editor (Editor de contenidos), realice la modificación de acuerdo con lo mostrado en negrita en el Listado 3, luego haga clic en OK. El valor de las reglas par nombre-valor WSIBasicProfile11V2 debe concordar con el nombre de la entrada realizada anteriormente en las Políticas de contenidos de los documentos.

Listado 3. Políticas de gobernabilidad del validador WS-I actualizadas usando como referencia las reglas WS-I personalizadas
<?xml version="1.0" encoding="UTF-8"?>  
<wsp:Policy ... 
>  ...  
<wsrrgp:EntityAssertionPolicy wsrrgp:name="plugin_wsi_status_check">
<wsp:Policy Name="plugin_wsi_status_policy_check"> 
<wsrrgp:PluginAssertion wsrrgp:name="Invoking WS-I Compliance Validation" 
wsrrgp:
class="com.ibm.sr.policy.wsi.WSIComplianceValidator"
wsrrgp:
options="rules=WSIBasicProfile11V2;report=true"> 
</wsrrgp:PluginAssertion> 
</wsp:Policy> 
</wsrrgp:EntityAssertionPolicy>  
...   
</wsp:Policy>

En este momento, el validador WS-I personalizado esta listo para ser usado.

Demostración de las capacidades del validador WS-I personalizado

El escenario de negocios descripto anteriormente en la sección "Personalización del WS-I" se tomará para verificar que la configuración del validador WS-I personalizado es correcta. Se utilizarán tres documentos WSDL del archivo zip descargable:

OrderingService.wsdl

Este archivo representa la descripción WSDL del servicio de realización de pedidos usado por la ORC. En este documento WSDL, se usa un tipo array para describir una lista de artículos del pedido del cliente, como se muestra en el Listado 4:

Listado 4, descripción WSDL del servicio de realización de pedidos usado por la empresa minorista
<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions... >  
  <wsdl:types>   
  <xsd:schema .../>    
  <xsd:complexType name="ItemArray2Type">     
  <xsd:complexContent>      
  <xsd:restriction base="soapenc:Array"> 
  <xsd:sequence> 
<xsd:element maxOccurs="unbounded" minOccurs="0" name="x" type="xsd:integer"/> 
  </xsd:sequence> 
<xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:ItemArray2Type[]"/> 
  </xsd:restriction> 
  </xsd:complexContent> 
</xsd:complexType>     
 <xsd:element name="order"> 
 <xsd:complexType> 
 <xsd:sequence> 
<xsd:element name="itemID" type="tns:ItemArray2Type"/> 
 </xsd:sequence> 
 </xsd:complexType>
</xsd:element> 
... 
 </wsdl:types>
... 
</wsdl:definitions>

InventoryCalculationInterface.wsdl

Este archivo, junto con el servicio WSDL, actúan como la descripción del servicio de cálculo de inventario utilizado por la ORC. InventoryCalculationInterface.wsdl describe la interfaz del servicio, e InventoryCalculationService.wsdl provee un vínculo HTTP y un puerto de servicio para el punto final real del servicio web. InventoryCalculationService.wsdl declara su elemento wsdl:import antes del elemento wsdl:service, y usa un espacio de nombre relativo example.ibm.com/InventoryCalculationInterface, como se muestra en el Listado 5:

InventoryCalculationService.wsdl

Listado 5. Descripción de WSDL para el servicio de cálculo de inventario usado por la ORC
<wsdl:definitions ... >   
 <wsdl:binding ... > 
 ... 
</wsdl:binding>
<wsdl:service ... >     
... 
</wsdl:service> 
<wsdl:
import location="InventoryCalculationInterface.wsdl" 
namespace=
"example.ibm.com/InventoryCalculationInterface"/> 
</wsdl:definitions>

Los documentos WSDL deberán cargarse al WebSphere Service Registry and Repository antes de activar el conjunto de normas personalizado. Configure el archivo de Políticas de gobernabilidad para activarse con la acción MAKE_GOVERNABLE (otorgar gobernabilidad) y fije la opción de informe en True (verdadero). Para invocar la validación WS-I:

  • Navegue a la perspectiva de Administrador o de Usuario en el Web UI.
  • Seleccione OrderingService.wsdl o InventoryCalculationService.wsdl de la lista de documentos WSDL y haga clic en Governance (Gobernabilidad).
  • Haga clic en Govern (Gobernar) para gobernar la estructura WSDL.
  • En la página Details (Detalles), haga clic en el enlace del documento bajo _WSIComplianceReport para abrir el informe de validación WS-I generado.
  • Haga clic en la solapa Content (Contenido) para ver los mensajes WS-I generados durante la operación de gobernabilidad.

La figura 7 muestra los mensajes de validación WS-I de OrderingService.wsdl y detalla que no se han informado errores de validación WS-I con respecto a las reglas R2110/R2111 originales:

Figura 7. Informe de validación WS-I de OrderingService.wsdl
Informe de validación WS-I de OrderingService.wsdl

La figura 8 muestra los mensajes de validación WS-I de InventoryCalculationService.wsdl y detalla que se han informado dos advertencias de validación WS-I (en lugar de errores) con respecto a las afirmaciones R2022 y R2803. El mensaje de informe de R2803 se ha personalizado: example.ibm.com/InventoryCalculationInterface es un URI relativo.

Figura 8. Informe de validación WS-I de InventoryCalculationService.wsdl
Informe de validación WS-I de InventoryCalculationService.wsdl

Definición de un nuevo conjunto de reglas de validación WS-I

A modo de demostración de cómo definir un nuevo conjunto de reglas de validación WS-I, use el contexto de control de versiones de WSDL y genere un conjunto de reglas que aplique la práctica explicada.

Background: práctica recomendada de control de versiones de WSDL

El control de versiones es un problema que suele afectar el diseño de sistemas distribuidos y los servicios web no son la excepción. En términos generales, se distingue entre dos tipos de versiones (general-menor) para dar lugar a dos niveles de cambio:

  1. Los cambios generales implican una importante actualización que crea una incompatibilidad con las implementaciones existentes. Los cambios generales típicos son revisiones a gran escala del producto, con agregados de características nuevas y depuraciones de errores de importancia.
  2. Los cambios menores se observan por la modificación del segundo dígito y los siguientes de la versión. Se trata de actualizaciones que son compatibles con implementaciones anteriores existentes del software y comparten la misma versión general. Las revisiones menores típicas contienen una serie de características nuevas, depuraciones de errores y resoluciones de problemas poco importantes que no afectan la compatibilidad.

Los números de versiones generales y menores normalmente se encuentran anidados en el paquete de software, bajo alguno de estos formatos: "<product> <major>.<minor>", por ejemplo: WebSphere Application Server V6.0, V6.1 o V7.0. En el contexto del control de versiones de WSDL, se puede colocar el número de versión general-menor para diferenciar los casos en que los cambios en un contrato de servicio mantienen una compatibilidad directa con las versiones anteriores de los consumidores del servicio, de aquellos casos en los que se afecta la compatibilidad y se debe rescribir el código de consumo del servicio. Existen varias prácticas recomendadas para el control de versiones de WSDL:

  • Coloque el número de versión general en el espacio de nombre meta WSDL.
  • Coloque la versión general-menor en el portType, el vínculo y el nombre del servicio.
  • Agregue una nueva operación a un contrato WSDL usando un número general-menor.
  • Cree un nuevo servicio para cada versión de portType y su vínculo relacionado.
  • Comience el nombre de vínculo con el nombre portType especificado y termínelo con el tipo de vínculo, por ejemplo: SOAPBinding.

El Listado 6 muestra los ejemplos arriba descriptos en un documento WSDL, MonolithicStockQuoteService_v1.wsdl, el cual se puede descargar al final de este artículo.

Listado 6. Documento WSDL de muestra
<?xml version="1.0"?> 
<wsdl:definitions name="MonolithicStockQuoteService_v1.wsdl"
targetNamespace=
"http://tonawanda.sr.ibm.com/MonolithicStockQuoteService_v1" ... >
...  
<wsdl:portType name="MonolithicStockQuotePortType_v1_0">  
<wsdl:operation name="GetLastTradePrice">   
<wsdl:input message="tns:GetLastTradePriceInput" /> 
<wsdl:output message="tns:GetLastTradePriceOutput" />
</wsdl:operation> 
</wsdl:portType> 
<wsdl:portType name="MonolithicStockQuotePortType_v1_1">  
<wsdl:operation name="GetLastTradePrice">   
<wsdl:input message="tns:GetLastTradePriceInput" /> 
<wsdl:output message="tns:GetLastTradePriceOutput" />  
</wsdl:operation> 
<!-- Append new operation from version 1.1 --> 
<wsdl:operation name="PurchaseTrade"> 
<wsdl:input message="tns:GetLastTradePriceInput" /> 
<wsdl:output message="tns:GetLastTradePriceOutput" /> 
</wsdl:operation> 
</wsdl:portType> 
<wsdl:binding 
name="MonolithicStockQuotePortType_v1_0_SOAPBinding"  
type="tns:MonolithicStockQuotePortType_v1_0">  
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetLastTradePrice"> 
<soap:operation soapAction="http://tonawanda.sr.ibm.com/StockQuote/GetLastTradePrice"/>   
<wsdl:input>    
<soap:body use="literal"/> 
</wsdl:input>   
<wsdl:output>    
<soap:body use="literal"/>   
</wsdl:output>  
</wsdl:operation> 
</wsdl:binding> 
<wsdl:binding 
name="MonolithicStockQuotePortType_v1_1_SOAPBinding"  
type="tns:MonolithicStockQuotePortType_v1_1">  
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>  
<wsdl:operation name="GetLastTradePrice">   
<soap:operation soapAction="http://tonawanda.sr.ibm.com/StockQuote/GetLastTradePrice"/>   
<wsdl:input> 
<soap:body use="literal"/> 
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/> 
</wsdl:output> 
</wsdl:operation> 
</wsdl:binding> 
<wsdl:service name="MonolithicPolicyStockQuoteService_v1_0">  
<wsdl:documentation>My first service</wsdl:documentation>   
<wsdl:port name="RMStockQuotePort"     
binding="tns:MonolithicStockQuotePortType_v1_0_SOAPBinding">     
<soap:address location="http://tonawanda.sr.ibm.com/RMPolicyStockQuote"/>   
</wsdl:port>  
</wsdl:service> 
<wsdl:service name="MonolithicPolicyStockQuoteService_v1_1">  
<wsdl:port name="X509StockQuotePort" 
binding="tns:MonolithicStockQuotePortType_v1_1_SOAPBinding">   
<soap:address location="http://tonawanda.sr.ibm.com/X509PolicyStockQuote"/>  
</wsdl:port>  
</wsdl:service> 
</wsdl:definitions>

Definición del conjunto de reglas para la aplicación de las prácticas recomendadas

Los conjuntos de reglas que definen la validación correspondiente se escriben empleando un tipo de lenguaje Schematron. Schematron es un lenguaje para validaciones basadas en reglas, y, como tal, ofrece una completa solución para la validación de documentos de instancia XML. Es un lenguaje de validación de estructuras XML para hacer afirmaciones acerca de la presencia o la ausencia de patrones en árboles y usa lenguajes de consulta (generalmente XPATH) para expresar sus reglas. Schematron provee soluciones para limitaciones de campos cruzados, cardinalidad y algoritmos que no soporta la versión actual del XML Schema. Este lenguaje se convirtió en norma ISO en 2006 (ISO/IEC 19757-3 - DSDL). El listado 7 expresa las primeras dos limitaciones mencionadas en un conjunto de reglas para validación basado en Schematron:

Listado 7. Reglas de las limitaciones personalizadas a partir de la práctica recomendada
<?xml version="1.0" 
encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron">   
<title>WS-I Basic Profile 1.1 Assertion Rules</title>   
<ns uri="http://schemas.xmlsoap.org/wsdl/" prefix="wsdl"/>   
<pattern name="WSDL Versioning Rules">     
<!--place the major version number in the WSDL target namespace -->   
<rule    
context="self::node()[@targetNamespace]">    
<report id="customize-01" test="not(number(substring-after 
(@targetNamespace,'_v')))">     
RECORD_REPORT{http://com.ibm.cn/soa/standard/example}| 
The major version number should be placed in the WSDL  
target namespace (<value-of select="@targetNamespace"/>).     
|^|WARNING|^    
 </report>   
 </rule> 
<!-- place the major-minor version in the portType, binding, and service name; -->   
 <rule 
context="//wsdl:portType">    
<report id="customize-02" test="not(contains(substring-after    
(@name,'_v'),'_'))">     
RECORD_REPORT{http://com.ibm.cn/soa/standard/example}|     
The major-minor version number should be placed in the 
portType name(<value-of select="@name"/>).
|^|ERROR|^ 
 </report>   
 </rule>
 <rule    
context="//wsdl:binding"> 
<report id="customize-03" test="not(contains(substring-after 
(@name,'_v'),'_'))">     
RECORD_REPORT{http://com.ibm.cn/soa/standard/example}| 
The major-minor version number should be placed in the 
binding name(<value-of select="@name"/>).
|^|ERROR|^ 
 </report>
 </rule>
 <rule    
context="//wsdl:service">    
<report id="customize-04" test="not(contains(substring-after 
(@name,'_v'),'_'))"> 
RECORD_REPORT{http://com.ibm.cn/soa/standard/example}| 
The major-minor version number should be placed in the 
service name(<value-of select="@name"/>).
|^|ERROR|^ 
 </report> 
 </rule>
 </pattern> 
</schema>

Activación del conjunto de reglas personalizadas del Listado 7

Abra el Web UI y cambia a la perspectiva Configuration (configuración). Navegue a Active Configuration Profile (Perfil de configuración activa) => Plug-ins (Complementos) => Document Content Policies (Políticas de contenido de los documentos) en el árbol de navegación de la izquierda. Cargue el documento de conjunto de reglas BestPracticeSample.sch, que puede descargar a continuación en este artículo. Especifique BestPracticeSample como el nombre de ítem de configuración de Políticas de contenido de los documentos:

Figura 9. Carga personalizada de políticas de contenido de los documentos
Carga personalizada de políticas de contenido de los documentos

Navegue a Active Configuration Profile (perfil de configuración activa) => Plug-ins (complementos) => Governance Policies (políticas de gobernabilidad), y luego cargue el documento de muestra de políticas de gobernabilidad Gov+Policy+Sample.xml, que puede descargar a continuación en este artículo. Especifique Invoking Customized Best Practice Compliance Validation Check (Verificación de validación de cumplimiento con las mejores prácticas personalizada) como el nombre del ítem de Configuración de políticas de contenido como se muestra en la Figura 10. La regal aplicada es BestPracticeSample (consulte wsrrgp:options="rules=BestPracticeSample;report=false">).

Figura 10. Políticas de gobernabilidad personalizadas
Políticas de gobernabilidad personalizadas

Cambie a la perspectiva Administrator (Administrador) y cargue el documento WSDL de muestra Invalid.wsdl, que puede descargar a continuación en este artículo. Cuando intente publicarlo en el WebSphere Service Registry and Repository, obtendrá el siguiente mensaje de error:

Figura 11. Informe de mensaje de error
Informe de mensaje de error

Cambie a la perpectiva Configuration (Configuración), navegue a Active Configuration Profile (Perfil de configuración activa) => Plug-ins (Complementos) => Governance Policies (Políticas de gobernabilidad) y abra el archivo de políticas Invoking Customized Best Practice Compliance Validation Check. Luego cambia el atributo wsrrgp:options como se muestra en el Listado 8. La regla aplicada continúa siendo BestPracticeSample y ahora el informe está fijado en True (Verdadero):

Listado 8. Nueva política de gobernabilidad modificada
<?xml version="1.0" 
encoding="UTF-8"?>  
<wsp:Policy wsu:Id="uuid:governanceProfileId" Name="GovernanceProfilePolicy" 
xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:wsp=
"http://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:wsrrgp=
"http://www.ibm.com.policy/GovernancePolicyDomain">    
<wsrrgp:ValidatorPolicy wsrrgp:name="plugin_bestpractice_validation_policy"> 
<wsp:Policy> 
<wsrrgp:ContentApplicabilityFilter wsrrgp:targetXPath="/WSRR/WSDLDocument"/> 
<wsrrgp:WSRROperationFilter> 
<wsrrgp:WSRROperation>CREATE</wsrrgp:WSRROperation> 
<wsrrgp:WSRROperation>MAKE_GOVERNABLE</wsrrgp:WSRROperation> 
<wsrrgp:WSRROperation>TRANSITION</wsrrgp:WSRROperation> 
</wsrrgp:WSRROperationFilter> 
<wsrrgp:EntityAssertionPolicy wsrrgp:name="plugin_bestpractice_status_check">
<wsp:Policy Name="plugin_bestpractice_status_policy_check">
<wsrrgp:PluginAssertion wsrrgp:
name="Customized Best Practice Compliance"                
wsrrgp:
class="com.ibm.sr.policy.wsi.WSIComplianceValidator" 
wsrrgp:options=
"rules=BestPracticeSample;report=true"> 
  </wsrrgp:PluginAssertion>
</wsp:Policy>
   </wsrrgp:EntityAssertionPolicy>
  </wsp:Policy>
  </wsrrgp:ValidatorPolicy>
</wsp:Policy>

Cambie a la perspectiva Administrator (Administrador) y cargue el documento WSDL de muestra Invalid2.wsdl, que puede descargar a continuación en este artículo. Este documento WSDL se publicará con éxito, pero se generará un mensaje de error que podrá verse siguiendo la relación _WSICompliance. El contenido de este informe será similar al que se muestra en la Figura 12:

Figura 12. Nuevo informe de mensaje de error
Nuevo informe de mensaje de error

Conclusión

El validador WS-I Basic Profile 1.1 proporcionado en el WebSphere Service Registry and Repository es una herramienta útil para garantizar el cumplimiento del contenido con la especificación del WS-I Basic Profile 1.1. El marco de validación permite personalizar las reglas predeterminadas, su gravedad y sus mensajes correspondientes. También puede usar el marco para escribir sus propios conjuntos de reglas de validación que apliquen las prácticas recomendadas o las convenciones de nombrado del contenido WSDL.


Descargar

DescripciónNombretamaño
Code samplesamples.zip11 KB

Recursos

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=WebSphere, SOA y servicios web
ArticleID=964788
ArticleTitle=Validación de contenidos de artefactos en WebSphere Service Registry and Repository
publish-date=07282011