Comprobando si un servicio web es interoperable con la herramienta del WS-I

En primer lugar, descargaremos las herramientas de testing "Interoperability Testing Tools 1.1" de la página del WS-I. Tenéis disponibles dos versiones: una versión de la herramienta en Java y otra versión en C#. Nosotros hemos usado la versión en C# para las pruebas pero no debería haber muchas diferencias entre ambas.

En la carpeta "common/profiles" se encuentran los ficheros de comprobaciones para cada perfil. Nosotros vamos a usar el fichero "BasicProfileTestAssertions.xml" para comprobar que cumplimos con el perfil básico.

En la carpeta "cs/bin", editamos el fichero "monitorConfig.xml" para configurar la herramienta de monitorización.

  • Con la etiqueta <wsi-monConfig:listenPort> indicamos el puerto en el que la herramienta escuchará las peticiones al servicio web que vamos a comprobar.
  • Con la etiqueta <wsi-monConfig:schemeAndHostPort> indicamos el host y puerto real del servicio web.

Los demás valores podemos dejarlos tal y como vienen por defecto. De esa forma, la herramienta reenviará todos los mensajes recibidos en el puerto indicado en listenPort al host y puerto indicados en schemeAndHostPort y guardará todos estos mensajes en un fichero "tracelog.xml" que usaremos más adelante. A continuación se muestra un ejemplo del fichero de configuración:

<?xml version="1.0" encoding="utf-8" ?>
<wsi-monConfig:configuration
  xmlns:wsi-monConfig="http://www.ws-i.org/testing/2003/03/monitorConfig/" >
  <wsi-monConfig:comment>Sample  monitor config file</wsi-monConfig:comment>
  <wsi-monConfig:logFile replace="true" location="traceLog.xml">
    <wsi-monConfig:addStyleSheet  href="..\..\common\xsl\log.xsl"
      type="text/xsl" 
      alternate="false" />
  </wsi-monConfig:logFile>
  <wsi-monConfig:logDuration>3600</wsi-monConfig:logDuration>
  <wsi-monConfig:cleanupTimeoutSeconds>1</wsi-monConfig:cleanupTimeoutSeconds>
  <wsi-monConfig:manInTheMiddle>
    <wsi-monConfig:redirect>
      <wsi-monConfig:comment>Something</wsi-monConfig:comment>
      <wsi-monConfig:listenPort>9090</wsi-monConfig:listenPort>
      <wsi-monConfig:schemeAndHostPort>http://www.misitio.com</wsi-monConfig:schemeAndHostPort>
      <wsi-monConfig:maxConnections>1000</wsi-monConfig:maxConnections>
      <wsi-monConfig:readTimeoutSeconds>30</wsi-monConfig:readTimeoutSeconds>
    </wsi-monConfig:redirect>
  </wsi-monConfig:manInTheMiddle>
</wsi-monConfig:configuration>

Una vez completada la configuración, ejecutamos la herramienta "monitor.exe" para comenzar a monitorizar.

A continuación tenemos que crear un archivo WSDL modificado para que la URL donde el cliente vaya a buscar el servicio web se encuentre en el host y puerto donde tenemos escuchando a la herramienta "monitor.exe" en lugar del host y puerto real, por lo demás, el archivo WSDL es igual. La herramienta "monitor.exe" se encargará de redireccionar las peticiónes que reciba al host real que hemos indicado antes en el archivo de configuración y de paso monitorizará todos los mensajes intercambiados en el proceso, que quedarán almacenados en el fichero "tracelog.xml".

Después de alguna llamada al servicio web que pase a través del monitor ya tendremos unos cuantos mensajes en el fichero de trazas, así que podemos cerrar la herramienta de monitorización (con CTRL+C para que el fichero quede guardado correctamente).

A continuación editaremos el fichero "analizerConfig.xml" para configurar la herramienta de análisis.

  • Con la etiqueta <wsdlElement type="port"> indicamos el nombre del puerto del servicio web.
  • Con la etiqueta <wsdlURI> indicamos la dirección del archivo WSDL.

Si dejamos los demás valores tal y como vienen por defecto, la herramienta utilizará los mensajes almacenados en el fichero "tracelog.xml" y el fichero "BasicProfileTestAssertions.xml" para hacer los tests. A continuación se muestra un ejemplo del fichero de configuración:

<?xml version="1.0" encoding="utf-8" ?>
<configuration
  xmlns="http://www.ws-i.org/testing/2003/03/analyzerConfig/"
  xmlns:wsi-common="http://www.ws-i.org/testing/2003/03/common/"
  xmlns:uddi="urn://uddi-org/api_v2/">
  <description>Sample  for the Basic Profile Analyzer.</description>
  <verbose>true</verbose>
  <assertionResults
    type="all"
    messageEntry="true"
    assertionDescription="true"
    failureMessage="true"
    failureDetail="true" />
  <reportFile replace="true" location="report.xml">
    <addStyleSheet href="..\..\common\xsl\reportBigFont.xsl" type="text/xsl" alternate="false" />
  </reportFile>
  <testAssertionsFile>..\..\common\Profiles\BasicProfileTestAssertions.xml</testAssertionsFile>
  <logFile correlationType="operation">..\bin\traceLog.xml</logFile>
  <wsdlReference>
    <wsdlElement type="port" parentElementName="Service" namespace="http://java.sun.com/xml/ns/jax-rpc/wsi/wsdl">MiMetodoWeb</wsdlElement>
    <wsdlURI>http://www.miSitio.com/miWsdl.wsdl</wsdlURI>
  </wsdlReference>
</configuration>

Finalmente ejecutamos la herramienta "Analyzer.exe" para conseguir el fichero "report.xml" que contiene los resultados de los tests. ¿Los habéis pasado?

Según mi experiencia, los servicios web creados en C# .NET pasan siempre los tests sin problemas. Sin embargo, los servicios web creados en Java (por ejemplo con Axis y utilizando las opciones por defecto) a veces no los pasan y hay que mirar concretamente por qué razón para buscar en la documentación y ver cómo podemos solucionarlo.

Nuestra puntuación
Twittear
Compartir
Compartir
Pin