You are on page 1of 3

Arquetipo de WSDL interoperable compatible con WS-I

Basic Profile 1.1


En este post voy a publicar un WSDL de ejemplo que cumple con el WS-I Basic Profile
1.1.

La clave de la interoperabilidad entre servicios web SOAP est en su interfaz WSDL. El
WS-I Basic Profile es un conjunto de especificaciones y buenas prcticas definidos por
la industria para desarrollar servicios web interoperables independientemente de la
tecnologa con que fueron desarrollados. Su ltima versin final es la 1.1 y debera ser
un must-know para todos aquellos que tengan que definir un WSDL.

El WSDL de ejemplo est diseado para que use un schema XSD donde definir los
mensajes de peticin y respuesta de las operaciones. De esta forma se puede usar un
editor de XSD como ayuda para disear la estructura de los mensajes, que es la parte
ms importante del WSDL y que requiere el verdadero esfuerzo intelectual. Dejando
de esta forma el proceso de definir el fichero WSDL a un mero trmite de
copy&paste.Adems es una buena prctica en una SOA publicar los schemas xsd para
reutilizar sus elementos.

Este WSDL slo tiene 1 operacin. Adems usa los siguientes literales como ejemplo:
Nombre del servicio: nombreServicio
Nombre de la operacin: nombreOperacion
TargetNamespace del servicio: http://dominio/ws/nombreServicio
TargetNamespace del schema xsd:
http://dominio/ws/nombreServicio/schema/msg

El fichero schema xsd nombreServicio_msg.xsd sera el siguiente:
view plainprint?
1. <?xml version="1.0" encoding="UTF-8"?>
2. <schema xmlns:tns="http://dominio/ws/nombreServicio/schema/msg"
3. xmlns="http://www.w3.org/2001/XMLSchema"
4. targetNamespace="http://dominio/ws/nombreServicio/schema/msg">
5. <element name="nombreOperacionRequest">
6. <complexType>
7. <sequence>
8. <element name="campo1" type="string"/>
9. <element name="campo2" type="string"/>
10. </sequence>
11. </complexType>
12. </element>
13. <element name="nombreOperacionResponse">
14. <complexType>
15. <sequence>
16. <element name="campo1" type="string"/>
17. <element name="campo2" type="string"/>
18. </sequence>
19. </complexType>
20. </element>
21. </schema>
La operacin del servicio tiene 2 elementos de entrada y 2 de salida, todos de tipo
string, a modo de ejemplo. Puedes modificar los mensajes existentes o crear mensajes
para nuevas operaciones a tu gusto. No olvides modificar el targetNamespace.
Si el schema xsd se complica puedes plantearte dividirlo por operaciones o por entrada
y salida.
Este fichero puede ser descargado aqu.

El fichero wsdl nombreServicio.wsdl sera el siguiente:
view plainprint?
1. <?xml version="1.0" encoding="UTF-8"?>
2. <definitions name="nombreServicio"
3. xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
4. xmlns="http://schemas.xmlsoap.org/wsdl/"
5. xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
6. xmlns:tns="http://dominio/ws/nombreServicio"
7. xmlns:msg="http://dominio/ws/nombreServicio/schema/msg"
8. xmlns:xsd="http://www.w3.org/2001/XMLSchema"
9. xmlns:ns="http://schemas.xmlsoap.org/soap/encoding/"
10. targetNamespace="http://dominio/ws/nombreServicio">
11. <!-- Importacion de schemas -->
12. <import namespace="http://dominio/ws/nombreServicio/schema/msg"
13. location="./nombreServicio_msg.xsd"/>
14. <!-- Definicion de mensajes -->
15. <message name="nombreOperacionRequest">
16. <part name="body" element="msg:nombreOperacionRequest"/>
17. </message>
18. <message name="nombreOperacionResponse">
19. <part name="body" element="msg:nombreOperacionResponse"/>
20. </message>
21. <portType name="nombreServicio">
22. <!-- Relacion Mensaje-Operacion -->
23. <operation name="nombreOperacion">
24. <input message="tns:nombreOperacionRequest"
25. wsaw:Action="urn:nombreOperacion"/>
26. <output message="tns:nombreOperacionResponse"
27. wsaw:Action="urn:nombreOperacion"/>
28. </operation>
29. </portType>
30. <binding name="nombreServicioBinding" type="tns:nombreServicio">
31. <soap:binding style="document"
32. transport="http://schemas.xmlsoap.org/soap/http"/>
33. <!-- Definicion de operaciones -->
34. <operation name="nombreOperacion">
35. <soap:operation soapAction="urn:nombreOperacion"/>
36. <input>
37. <soap:body use="literal"/>
38. </input>
39. <output>
40. <soap:body use="literal"/>
41. </output>
42. </operation>
43. </binding>
44. <service name="nombreServicio">
45. <port name="nombreServicioPort" binding="tns:nombreServicioBinding">
46. <soap:address location="http://localhost:8080"/>
47. </port>
48. </service>
49. </definitions>

Lo primero sera modificar los nombres del servicio, operacin y targetNamespaces de
ejemplo. Puedes aadir nuevas operaciones a tu gusto. Como puedes ver, he puesto
comentarios indicando los sitios que deberan ser modificados.
No cambies la url del endpoint. Por lo general, los servidores de webservices
detectarn la url y realizarn la modificacin de forma automtica. De este modo te
evitas tener una copia del WSDL por entorno (desarrollo, pruebas, produccin, etc.).
Este fichero puede ser descargado aqu.

Una vez realizadas las modificaciones convenientes no olvides validarlo todo, el
schema xsd y el wsdl.