WSDL

WSDL (Web Services Description Language) es un lenguaje de descripción basado en XML (Extensible Markup Language). Este lenguaje se ha enviado al World Wide Web Consortium (W3C) como estándar del sector para describir servicios web. La potencia de WSDL se deriva de dos principios arquitectónicos principales: la capacidad de describir un conjunto de operaciones de negocio y la capacidad de separar la descripción en dos unidades básicas. Estas unidades son una descripción de las operaciones y los detalles de cómo se empaquetan la operación y la información asociada a ella.

Un documento WSDL define servicios como colecciones de puntos finales de red o puertos. En WSDL, las definiciones abstractas de puntos finales y mensajes se separan de sus enlaces concretos de despliegue de red o formato de datos. Esta separación da soporte a la reutilización de definiciones abstractas: mensajes, que son descripciones abstractas de datos intercambiados, y tipos de puerto, que son colecciones abstractas de operaciones. El protocolo concreto y las especificaciones de formato de datos para un tipo de puerto determinado constituyen un enlace reutilizable. Un puerto se define asociando una dirección de red con un enlace reutilizable y una colección de puertos define un servicio. Por lo tanto, un documento WSDL se compone de varios elementos.

A continuación se muestra la estructura de la información en un archivo WSDL:
Anatomía de un archivo WSDL
Un archivo WSDL contiene las partes siguientes:
  • Definición de interfaz de servicio web

    Esta parte contiene los elementos y los espacios de nombres.

  • Implementación de servicio web

    Esta parte contiene la definición del servicio y los puertos.

Un archivo WSDL describe un servicio web con los siguientes elementos:

tipoPuerto

La descripción de las operaciones y los mensajes asociados. El elemento portType define operaciones abstractas.

<portType name="EightBall">
  <operation name="getAnswer">
    <input message="ebs:IngetAnswerRequest"/>
    <output message="ebs:OutgetAnswerResponse"/>
  </operation>
</portType>

mensaje

La descripción de los parámetros de entrada y salida y los valores de retorno.

<message name="IngetAnswerRequest">
  <part name="meth1_inType" type="ebs:questionType"/>
</message>
<message name="OutgetAnswerResponse">
  <part name="meth1_outType" type="ebs:answerType"/>
</message>

tipos

El esquema para describir los tipos XML utilizados en los mensajes.

<types>
  <xsd:schema targetNamespace="...">
    <xsd:complexType name="questionType">
      <xsd:element name="question" type="string"/>
    </xsd:complexType>
    <xsd:complexType name="answerType">
    ...
</types>

enlace

Los enlaces describen el protocolo que se utiliza para acceder a un portType, así como los formatos de datos para los mensajes definidos por un elemento portType determinado.

<binding name="EightBallBinding" type="ebs:EightBall">
  <soap:binding style="rpc" transport="schemas.xmlsoap.org/soap/http">
  <operation name="ebs:getAnswer">
  <soap:operation soapAction="urn:EightBall"/>
    <input>
      <soap:body namespace="urn:EightBall" ... />
      ...

Los servicios y puertos definen la ubicación del servicio web.

Servicio

El servicio contiene el nombre de servicio web y una lista de puertos.

Puertos

Los puertos contienen la ubicación del servicio web y el enlace utilizado para el acceso de servicio.
<service name="EightBall">
  <port binding="ebs:EightBallBinding" name="EightBallPort">
    <soap:address location="localhost:8080/axis/EightBall"/>
  </port>
</service>

Al crear servicios web JAX-WS (Java™ API for XML Web Services) o JAX-RPC (Java API for XML-based RPC), puede utilizar un enfoque de desarrollo ascendente cuando se inicia desde JavaBeans o un enterprise bean, o puede utilizar un enfoque de desarrollo descendente cuando se empieza con un archivo WSDL (Web Services Description Language) existente.

Al crear servicios web JAX-WS para este producto, puede empezar con un WSDL o una clase de bean de implementación. Si empieza con una clase de bean de implementación, utilice la herramienta de línea de mandatos wsgen para generar todos los artefactos de servidor de servicios web, incluido un WSDL si se solicita. Si empieza con un WSDL, utilice la herramienta de línea de mandatos wsimport para generar todos los artefactos de servicios web para el lado del servidor o del cliente.

Al crear servicios web JAX-RPC para este producto, primero debe tener un bean de implementación que incluya una interfaz de punto final de servicio. A continuación, utilice la herramienta de línea de mandatos Java2WSDL para crear un archivo WSDL que defina los servicios web. Si está empezando con el WSDL para generar la clase de bean de implementación, ejecute la herramienta de línea de mandatos WSDL2Java en el archivo WSDL para crear API Java y plantillas de descriptor de despliegue.

Publicación WSDL y WSDL de varias partes

El producto da soporte al despliegue de servicios web utilizando un archivo WSDL (Web Services Description Language) de varias partes. En archivos WSDL de varias partes, un archivo WSDL de implementación contiene wsdl:service. Este archivo WSDL de implementación importa un archivo WSDL de interfaz, que contiene las otras construcciones WSDL. Esto da soporte a varios servicios web que utilizan la misma definición de interfaz WSDL.

El elemento < wsdl:import> indica una referencia a otro archivo WSDL. Si el atributo de ubicación del elemento < wsdl:import> no contiene un URL, es decir, sólo contiene un nombre de archivo y no empieza por http://, https:// o file://, el archivo importado debe estar ubicado en el mismo directorio y no debe contener un componente de vía de acceso relativa. Por ejemplo, si META-INF/wsdl/A_Impl.wsdl está en el módulo y contiene la sentencia de importación <wsdl:import="A.wsdl" namespace="..."/> , el archivo A.wsdl también debe estar ubicado en el directorio META-INF/wsdl del módulo.

Se recomienda colocar todos los archivos WSDL en el directorio META-INF/wsdl , si está utilizando Enterprise JavaBeans (EJB), o en el directorio WEB-INF/wsdl , si está utilizando componentes JavaBeans, incluso si las importaciones relativas se encuentran en los archivos WSDL. De lo contrario, existen implicaciones con la publicación WSDL cuando se utiliza una vía de acceso como <location="../interfaces/A_Interface.wsdl"namespace="..."/>. El uso de una vía de acceso como este ejemplo falla porque la presencia de la vía de acceso relativa, independientemente de si el archivo se encuentra o no en dicha vía de acceso. Si la ubicación es una dirección web, debe ser legible tanto en el despliegue como en el inicio del servidor.

Puede publicar los archivos ubicados en el directorio META-INF/wsdl o WEB-INF/wsdl a través de una dirección URL o archivo, incluidos los archivos WSDL o XSD (definición de esquema XML). Por ejemplo, si el archivo al que se hace referencia en el elemento < wsdl-file> del descriptor de despliegue webservices.xml se encuentra en el directorio META-INF/wsdl o WEB-INF/wsdl , se puede publicar. Si los archivos importados por < wsdl-file> se encuentran en el directorio wsdl/ o en su subdirectorio, se pueden publicar.

Si el archivo WSDL al que hace referencia el elemento < wsdl-file> se encuentra en un directorio distinto de wsdl, o sus subdirectorios, el archivo y sus archivos importados, ya sean archivos WSDL o XSD, que están en el mismo directorio, se copian en el directorio wsdl sin modificación cuando se instala la aplicación. Estos tipos de archivos también se pueden publicar.

Si < wsdl-file> importa un archivo ubicado en un directorio diferente (un directorio que no es -INF/wsdl o un subdirectorio), el archivo no se copia en el directorio wsdl y no está disponible para su publicación.

Para los servicios web JAX-WS, puede utilizar una anotación para especificar la ubicación del WSDL. Utilice la anotación @WebService con el atributo WSDLLocation . El atributo WSDLLocation es opcional. Si no se especifica este atributo, se genera WSDL y se publica a partir de la información que se encuentra en las clases de servicio web. Opcionalmente, puede especificar la ubicación del archivo WSDL en el descriptor de despliegue webservices.xml . Sin embargo, cualquier información que defina en el descriptor de despliegue webservices.xml altera temporalmente la información correspondiente especificada por las anotaciones.