You are on page 1of 15

WEB SERVICES

En NetBeans

Web Service
Conjunto de protocolos y estndares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programacin diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios web para intercambiar datos en redes de ordenadores como Internet (Wikipedia). Es como una Aplicacin Web pero en lugar de ser accedidas por una persona a travs de un Browser son accedidas atreves de otras aplicaciones a travs de protocolos como SOAP o RMI. En definitiva es un conjunto de funciones que pueden ser llamadas remotamente por un programa cliente va http, quien puede recibir los resultados de la misma.

SOAP (Simple Object Access Protocol)


Es un protocolo estndar que define cmo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML. SOAP fue creado por Microsoft, IBM y otros y est actualmente bajo el auspicio de la W3C. Es uno de los protocolos utilizados en los servicios Web.(Wikipedia)

WSDL(Web Services Description Lenguage)


Formato XML (similar a un XML Schema) que se utiliza para describir servicios Web. Describe la interfaz pblica a los servicios Web. Est basado en XML y describe la forma de comunicacin, es decir, los requisitos del protocolo y los formatos de los mensajes necesarios para interactuar con los servicios listados en su catlogo, adems de la ubicacin de estos. No se utiliza en tiempo de ejecucin de los clientes ni del servidor, por lo que en estricto rigor no es necesario. Sin embargo es la manera estndar de publicar la descripcin de un servicio. Cuando el framework tienen la capacidad de generar el WSDL a partir del cdigo de los servicios, suele generarse el WSDL en tiempo de ejecucin cuando es solicitado. Este es el caso de JAX-WS que usaremos en esta demostracin.

WSDL
En un WSDL se definen:
Estructuras u objetos para las entradas y salidas de los servicios. Esto se hace tal como se hara en un XML Schema, o incluso importando un esquema (.XSD). Mensajes, a los que se les asigna un nombre y un tipo que puede ser un tipo primitivo (xsd:string) o uno definido en el punto anterior Puerto, que identifica la interfaz del servicio mediante la identificacin de operaciones y sus respectivos mensajes de entrada y salida. Bindings, en donde se define el protocolo y forma con el que se acceder a las llamadas de entrada y de salida Servicios, que une identifica a una tupla puerto-binding a una direccin de servicio.

Tipos de WSDL
Existen 3 tipos de WSDL, RPC, document/literal y document/wrapped. Solo los dos primeros son WS-I-compliant. En el orden mencionados anteriormente va aumentando la complejidad del wsdl, pero tambin su estandarizacin. La principal diferencia es en la estructura de los mensajes generados por el binding y que son finalmente enviado entre el cliente y el servidor Los primeros son buenos para servicios muy simples si se necesita hacer los wsdl a mano o ser ledos por personas. En otro caso no se justifica utilizarlos.

WSDL de Ejemplo

Frameworks de Servicios Web


Existen muchos Frameworks tanto para crear como para consumir Servicios Web en distintos lenguajes y plataformas. En general proveen herramientas que crean clases que implementan los servicios descritos por un WSDL y/o viceversa, adems de herramientas de comunicacin especificas para WS (creacin y lectura de los mensajes). La distribucin estndar de JEE 5.0 incluye el Framework JAX-WS y por lo tanto algunos IDE (como NetBeans o MyEclipse) incluyen herramientas especiales para su utilizacin.

Herraminetas de la Demostracin
Netbeans 6.0. JDK 6.0. JEE 5.0. Apache Tomcat 6.0.1.

Web Service en NetBeans


NetBeans usa el framework JAX-WS, el cual menaja cada servicio como un servlet que puede llamara a cualquier funcionalidad disponible en el servidor. Un WS se puede crear dentro de una Aplicacin Web o de una Aplicacin EJB. Nosotros usaremos una Aplicacin Web pues Tomcat no cuenta con contenedor EJB. Un WS se puede crear a partir de un WSDL existente, a partir de un EJB de sesin (Solo en aplicaciones con EJB) o desde cero. (NOTA: Al instalar NetBeans para JEE, da la opcin de instalar automticamente algunos servidores y se configura para usarlos. Sin embargo se pueden agregar mas servidores instalados externamente en la pestaa de tools->servidores)

Creacion de un WS
1. 2. Creamos una nueva aplicacin web y la configuramos para que corra sobre el servidor deseado (En nuestro caso Tomcat 6.0.16). Dentro del proyecto ponemos new->Web Service, escogemos nombre y package. Al crear el servicio se crea una nueva seccin Web Services dentro del proyecto. Cada servicio ah indicado esta asociado a una clase, y dentro de esa seccin podemos ver su cdigo o ver el servicio en modo diseo. Vamos a la seccin de servicios y nos centramos en el servicio recin creado. Ah podemos ir agregando mtodos indicando sus entradas y respuestas, sus excepciones y sus comentarios. En general Netbeans ocupa tags un tanto confusos dentro del cdigo para poder publicar el servicio as que es fuertemente recomendable usar cada vez que se pueda la el modo diseo. Una vez creados los mtodos que queremos ofrezca nuestro servicio, debemos implementar sus funcionalidades. Finalmente, al terminar todo lo anterior procedemos a deployar la aplicacin: Sobre el proyecto, click derecho->undeploy and deploy.

3.

4. 5.

Provar el Servicio
Supongamos que al crear la aplicacin indicamos que su Context Path era /appname. Entonces la direccin del servcio (servurl) ser: http://serverurl/appname/servicio. Esta direccin es la de un servlet que procesa las peticiones y genera las llamadas a servicios y enva sus respuestas al cliente. Dado lo anterior, el wsdl estar en servurl?wsdl. Se ve que no es otra url, sino que es la misma pero con un argumento. Esto es porque el wsdl no es un archivo fsico, sino que es generado por el servlet al recibir el argumento wsdl. Una llamada a un servicio es del tipo POST, por lo que una llamada del tipo GET genera una pagina con datos del servicio. Tambin se pueden obtener los esquemas con las definiciones de los tipos usando serverurl?xsd=1n.

Cliente en Netbeans
Se crea una aplicacin Java comn y corriente. Dentro del proyecto se agrega un nuevo cliente (new->Web Service Client). Para finalizar se debe escoger el wsdl, que puede ser un archivo externo, un archivo del proyecto o una URL. Se puede hacer esto para varios servicios. Cada cliente as creado solamente importa dentro del proyecto las definiciones de las funciones ofrecidas por cada servicio. Las clases necesitadas para cada servicio en particular (objetos de respuesta, ports, bindings,etc..) son creadas en tiempo de compilacin. Finalmente, dentro del mismo proyecto, si queremos invocar alguna de estas funciones remotas debemos, en el rea de edicin de cdigo, hacer click con el botn derecho y seleccionar Web Service Client Resource->Call Web Service Operation. Al hacer esto se puede escoger cualquier funcin de cualquiera de los servicios importados. Al escoger una funcin se agregaran varias lneas de cdigo que lo que hacen es crear un objeto del tipo necesario para llamar la funcin, instanciar un puerto acorde con el servicio, llamar a travs del puerto a la funcin y guardar el resultado en un objeto consistente con el tipo de respuesta.

Despliege(Deployment)
Netbeans cada vez que compila genera el archivo .war que contiene todo lo necesario para deplegar la aplicacin en un servidor externo. Es necesario destacar que las distribuciones normales de Tomcat no incluyen las librerias de JAX-WS y es necesario indicar en el proyecto que estas deben ser empaquetadas dentro del .war

La alternativa:MyEclipse
MyEclipse es un pluguin de Eclipse creado especialmente para aplicaciones web y enterprise. Tiene varias ventajas funcionales (manejo de servidores, despliege, etc..), pero es pagado. Las principales ventajas en cuanto a WS que realmente influyen en producto final son:
Se puede elegir cualquier tipo de WSDL, no solo document/wrapped. Genera dentro del proyecto los .java de las clases generadas para el servicio, separadas en el port, el binding, un wrapper del servicio y el servicio mismo. Esto permite hacer modificaciones en como se maneja la comunicacin en sus diversas etapas, permitiendo, por ejemplo, identificacin de sesin ANTES de procesar el mensaje y un cdigo mucho mas pulcro. Puede generar servicios a partir de CUALQUIER clase con constructores que no reciban parmetros, no solo EJBs. Incluye utilidades para manejar un CATALOGO de servicios.

You might also like