SlideShare una empresa de Scribd logo
Experto Universitario Java Enterprise
Servicios Web
Sesión 1: Introducción. Invocación de
Servicios Web SOAP
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Puntos a tratar
• ¿Qué es un Servicio Web?
• Tipos de Servicios Web
• Arquitectura de los Servicios Web
• Tecnologías básicas para Servicios Web
• Interoperabilidad de los Servicios Web
• Servicios Web desde la vista del cliente
• Invocación de servicios JAX-WS
2
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Descripción de Servicio Web (WS)
• Un Servicio Web es un componente diseñado para soportar
interacciones máquina a máquina a través de la red
• El intercambio de información se lleva a cabo mediante mensajes
codificados en XML
• Estos mensajes se pueden transportar utilizando HTTP
• Normalmente constará de una interfaz (conjunto de métodos) que
podremos invocar de forma remota desde cualquier lugar de la red
• Nos permiten crear aplicaciones distribuidas en Internet
• Los servicios web son independientes de la plataforma y del
lenguaje de programación en el que estén implementados
• Nos permiten integrar aplicaciones
• Pueden combinarse con muy bajo acoplamiento para conseguir la
realización de operaciones complejas proporcionando un valor de
negocio añadido
3
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
La cuestión clave es la interoperabilidad!!
• Su principal característica es su gran INTEROPERABILIDAD
y extensibilidad
• Los servicios Web fueron “inventados” para solucionar el
problema de la interoperabilidad entre las aplicaciones
• El uso de XML hace posible el compartir datos entre
aplicaciones con diferentes plataformas hardware y proporciona
información fácilmente procesable por las máquinas (“web para
máquinas”)
• El protocolo HTTP asegura que puedan ser llamados por
cualquier aplicación (independientemente del lenguaje de
programación y sistema operativo)
• Las características deseables de un Servicio Web son:
• Los servicios web deben ser accesibles a través de la red, deben
contener una descripción de si mismos, y deben poder ser
localizados
4
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Web “para humanos” vs. web “para máquinas”
Petición HTTP
Respuesta HTTP en HTML
Aplicación
Petición HTTP
Respuesta HTTP en XML
Otras aplicaciones
5
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Tipos de Servicios Web
• A nivel CONCEPTUAL, un servicio es un componente
software proporcionado a través de un endpoint accesible a
través de la red. Los productores y consumidores de
servicios utilizan mensajes para intercambiar información.
• A nivel TÉCNICO, los servicios pueden implementarse de
varias formas:
• Servicios Web SOAP
•Utilizan mensajes XML que siguen el estándar SOAP
•Describen su interfaz utilizando WSDL
• Servicios Web RESTful
•Utilizan estándares muy conocidos: HTTP, URI, MIME
•Tienen una infraestructura muy “ligera”
6
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Arquitectura de los servicios Web
• Un WS normalmente reside en una máquina remota y es
llamado por un cliente a través de la red
7
(2) Find (1) Publish
(3) Bind
WSDL+UDDI WSDL+UDDI
Service
Provider
Service
Description
Service
Service
Requestor
Service
Registry
Service
Description
PERMITE:
• crear una descripción
abstracta del servicio
• proporcionar una
implementación concreta
• publicar y localizar un
servicio
• seleccionar una instancia
del servicio
• utilizar dicho servicio
Aquitectura orientada a servicios
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Servicios web SOAP y JavaEE
• La especificación que define los servicios Web para Java EE
(JSR-109) requiere que una instancia de un servicio
(denominada Port, o componente Port) sea creada y gestionada
por un contenedor. Este Port puede ser referenciado desde un
cliente, así como desde los contenedores web y EJB
8
Pueden implementarse de
dos formas:
• como una clase Java
que se ejecuta en un
contenedor Web
• como un EJB de sesión
o singleton en un
contenedor EJB
El contenedor actúa como
mediador para acceder al
servicio
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Tecnologías básicas para servicios Web
• Los protocolos utilizados en los WS se organizan en
una serie de capas:
9
Localización de Servicios
(UDDI)
Descripción de Servicios
(WSDL)
Mensajería XML
(SOAP, XML-RPC)
Transporte de Servicios
(HTTP, SMTP, FTP, BEEP, ...)
Tecnologías
básicas
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
SOAP
• Protocolo derivado de XML
• Se usa para intercambiar información entre aplicaciones
• Dos tipos:
• Mensajes orientados al documento
•Cualquier tipo de contenido
• Mensajes orientados a RPC
•Tipo más concreto que el anterior
•Nos permite realizar llamadas a procedimientos remotos
àLa petición contiene el método a llamar y los parámetros
ßLa respuesta contiene los resultados devueltos
• Nos centraremos en el primer tipo
10
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Elementos de SOAP
• Sobre SOAP (Envelope). Contiene:
•Descripción del mensaje (destinatario, forma de
procesarlo, definiciones de tipos)
•Cabecera (opcional) y cuerpo SOAP
• Cabecera SOAP (Header). Contiene:
•Información sobre el mensaje (obligatorio,
actores, etc)
• Cuerpo SOAP (Body). Contiene:
•Mensaje (en caso de RPC la forma del mensaje
se define por convención)
•Error (opcional)
• Error SOAP (Fault)
•Indica en la respuesta que ha habido un error en
el procesamiento de la petición
11
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Ejemplos mensajes SOAP
• Mensaje de petición
12
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>
• Mensaje de respuesta
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
WSDL (Web Services Description Language)
• Lenguaje derivado de XML
• Describe la interfaz de los Servicios Web
• Operaciones disponibles
• Parámetros de las operaciones
• Resultados devueltos
• Tipos de datos de estos parámetros y resultados
• Además contiene la dirección del endpoint
• URL a la que hay que conectarse para acceder al servicio
• Nos permite integrar un servicio automáticamente en
nuestra aplicación, o que otros usuarios utilicen los
servicios que hayamos desarrollado nosotros
13
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Estructura de un documento WSDL
14
La parte abstracta define
el QUÉ hace el servicio:
• operaciones disponibles
• entradas, salidas y
mensajes de error
• definiciones de tipos
para los mensajes
La parte concreta define el
CÓMO Y DÓNDE del servicio:
• cómo se tiene que llamar
(formato de los datos:
SOAP)
• protocolo de acceso (red)
• dónde está el servicio (URL)
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Elementos WSDL (versión 1.1)
<definitions>
<types> tipos de datos, si no son primitivos
<message> llamadas y respuestas SOAP
<portType> (INTERFAZ) operaciones: llamada + respuesta
<binding> protocolo de red y formato de datos SOAP
<service> URL del servicio para acceder a una
colección de ports
15
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Ejemplo de documento WSDL (I)
16
<?xml version="1.0" encoding="utf-8"?>
<definitions targetNamespace="http://jaxwsHelloServer/"
name="HelloService">
<types>
<xsd:schema>
<xsd:import namespace="http://jaxwsHelloServer/"
schemaLocation="http://localhost:8080/JAXWSHelloAppServer/
jaxwsHello?xsd=1"/>
</xsd:schema>
</types>
<message name="sayHello">
<part name="parameters" element="tns:sayHello"/>
</message>
<message name="sayHelloResponse">
<part name="parameters" element="tns:sayHelloResponse"/>
</message>
los tipos se definen
en el fichero xsd
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Ejemplo de documento WSDL (II)
17
<portType name="Hello">
<operation name="sayHello">
<input wsam:Action="http://jaxwsHelloServer/Hello/sayHelloRequest"
message="tns:sayHello"/>
<output wsam:Action="http://jaxwsHelloServer/Hello/sayHelloResponse"
message="tns:sayHelloResponse"/>
</operation>
</portType>
<binding name="HelloPortBinding" type="tns:Hello">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
<operation name="sayHello">
<soap:operation soapAction=""/>
<input> <soap:body use="literal"/> </input>
<output> <soap:body use="literal"/> </output>
</operation>
</binding>
<service name="HelloService">
<port name="HelloPort" binding="tns:HelloPortBinding">
<soap:address location="http://localhost:8080/JAXWSHelloAppServer/
jaxwsHello"/>
</port>
</service>
operaciones soportadas por el servicio
dirección donde localizar el servicio
protocolo de red y
formato de los datos
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Edición de documentos WSDL con Netbeans
• Para poder editar documentos WSDL hay que instalar el plugin
XML desde:
• URL: http://deadlock.netbeans.org/hudson/job/xml/
lastSuccessfulBuild/artifact/build/updates/updates.xml
• Este plugin nos permitirá trabajar con ficheros WSDL y con
ficheros de esquema (xsd)
• XML Schema es una recomendación del W3C, que proporciona
mecanismos para definir la estructura, contenido y semántica de
un documento xml
• Un documento WSDL utiliza ficheros de esquema para definir
los TIPOS de mensajes que se utilizan como interfaz para
comunicarnos con un servicio Web
18
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Fichero de esquema (xsd)
• El bloque de construcción principal de un documento
xml es <element>, que debe contener
• Una propiedad name que representa el nombre del
elemento
• Una propiedad type para indicar el tipo de elemento
• Podemos utilizar alguno de los tipos predefinidos (built-in
types), o bien podemos definir nuevos tipos utilizando
etiquetas simpleType o complexType
• Ejemplos:
19
<xs:element name="CustomerAddress" type="xs:string"/>
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Ejemplos de definiciones de esquema (xsd)
• Definimos el elemento CustomerAddress
• Podemos utilizar dicho elemento en el documento wsdl
• Ejemplo de mensaje de respuesta con la definición anterior:
20
<xs:element name="CustomerAddress" type="xs:string"/>
<message name="msgResponse">
<part name="parameters" element="tns:CustomerAddress"/>
</message>
<Customer_address>Calle de los Pinos, 37</Customer_address>
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Ejemplos de definiciones de esquema (xsd)
• Vamos a definir nuevos tipos:
• Definición del mensaje en el WSDL:
• Ejemplo de mensaje de respuesta:
21
<xsd:element name="Customer" type="tns:CustomerType"/>
<xsd:complexType name="CustomerType">
<xsd:sequence>
<xsd:element name="Phone" type="xsd:integer"/>
<xsd:element name="Addresses" type="tns:AddressType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="AddressType">
<xsd:sequence>
<xsd:element name="Address1" type="xsd:string"/>
<xsd:element name="Address2" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<message name="msgResponse2">
<part name="parameters" element="tns:Customer"/>
</message>
<Customer>
<Phone>12345678</Phone>
<Address1>Calle de los Pinos, 37</Address1>
<Address2>Calle de los Manzanos, 25</Address2>
</Customer>
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Edición de esquemas con Netbeans (I)
22
New->XMl ->XML Schema
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Edición de esquemas con Netbeans (II)
23
Vista de diseño Vista de fuentes
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Edición de WSDL con Netbeans (I)
24
New->XMl ->WSDL Document
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Edición de WSDL con Netbeans (II)
25
Configuración ABSTRACTA
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Edición de WSDL con Netbeans (III)
26
Vista WSDL
Configuración CONCRETA
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
UDDI
• UDDI nos permite localizar Servicios Web
• Define la especificación para construir un directorio
distribuido de Servicios Web
• Se registran en XML
• Define una API para acceder a este registro
• Buscar servicios
• Publicar servicios
• La interfaz de UDDI está basada en SOAP
• Se utilizan mensajes SOAP para buscar o publicar
servicios
27
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Interoperabilidad de los servicios Web (WS-I):
Metro y JAX-WS
28
Metro/WSIT
JAXB-RI
JAXWS-RI
METRO: Iniciativa de Sun
para conseguir la
interoperabilidad de los
Servicios Web
Implementación de Referencia del API JAX-WS (JSR-224:
Java Api for XML-based Web Services)
Estándares asociados:WS-I Basic Profile (SOAP y UDDI);
WS-I Attachment Profile (SOAP con anexos);
WS-I Addressing (espacios de nombres y ficheros de
esquema)
WSIT:Web Services Interoperabe Technologies (permiten
la interoperabilidad con .NET)
Transport: HTTP, MTOM, SOAP/TCP
Reliability:WS-ReliableMessaging;WS-Coordination;WS-
Atomic Transaction
Security:WS-Security;WS-Trust
Bootstrapping:WSDL;WS-Policy;WS-MetadataExange
Implementación de Referencia del API JAX-WS (JSR-222:
Java Architecture for XML Binding (JAXB) 2.0)
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Interoperabilidad de los servicios Web (WS-I):
Metro y JAX-WS
29
JAXB-RI
METRO: Iniciativa de Sun para conseguir la
interoperabilidad de los Servicios Web
Implementación de referencia del API
JAXB (Java Architecture for XML
Binding)
Metro está construido sobre un conjunto de
librerías que pueden usarse de forma independiente
fuera del contexto de los Servicios Web
JAXWS-RI
WSIT
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Servicios Web: vista del cliente
30
El transporte, codificación y dirección del
Port son transparentes para el cliente
El cliente, para acceder al servicio, necesita:
(1) Acceder a la clase/interfaz Service (SI)
(2) A través del SI obtiene el Port
(3) Realizar llamadas a métodos del SEI
del Port correspondiente
SEI
SI
SEI: Service Endpoint Interface
SI: Service Interface
Tipos de clientes:
aplicación cliente Java EE
componente Web
componente EJB
otro Servicio Web
...
//Primero accedemos al objeto Service
Hola_Service service = new Hola_Service();
//a través de él accedemos al Port
Hola port = service.getHolaPort();
java.lang.String name = "perico de los palotes";
//utilizamos el Port para llamar al WS a través
del SEI
java.lang.String result = port.hello(name);
System.out.println("Result = "+result);
...
JAX-WS proporciona una factoría (Service) para
seleccionar qué Port desea usar el cliente.
La clase Service proporciona los métodos para
acceder al Port
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Tipos de acceso a servicios Web
• JAX-WS nos permite acceder de 2 formas:
• Creación de un stub estático
•Se genera una capa stub en tiempo de compilación
•Esta capa se genera automáticamente mediante herramientas
•El cliente accede a través del stub como si fuese a un objeto local
• Interfaz de invocación dinámica (DII)
•Se hacen llamadas de forma dinámica, sin stub
•Se proporcionan los nombres de las operaciones a ejecutar
mediante cadenas de texto a métodos genéricos de JAX-RPC
•Se pierde transparencia
31
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Librería JAX-WS
• La versión actual de JAX-WS es la 2.2, también denominada
JSR-224
• La implementación de referencia de JAX-WS está
enmarcada dentro del proyecto Metro
• A partir de JDK 1.6 se incluye JAX-WS 2.0 en Java SE
• JAX-WS 2.1 a partir de JDK 1.6.0_04
• JAX-WS también viene incluida en Glassfish
• JAX-WS 2.2 en Glassfish 3.1.2.2
•
32
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Generar el cliente con JAX-WS y JDK 1.6
• Se utiliza la herramienta wsimport
wsimport -s src -d bin
-p es.ua.jtech.servcweb.hola.stub
http://jtech.ua.es/HolaMundo/wsdl/HolaMundoSW.wsdl
• También disponible como tarea de ant
<wsimport sourcedestdir="${src.home}"
destdir="${bin.home}" package="${pkg.name}"
wsdl="${wsdl.uri}" />
• Y también desde Maven ...!
33
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Cliente de un SW desde una clase Java con Maven
• Necesitamos conocer la dirección del WSDL (o disponer
de él en local)
• la etiqueta <portType> nos indica las operaciones que el servicio ofrece, con
los mensajes de entrada y salida. Representa el SEI del servicio
34
<types>
<xsd:schema>
<xsd:import namespace="http://sw/"
schemaLocation="http://localhost:8080/HolaMundo/hola?xsd=1"/>
</xsd:schema>
</types>
...
<portType name="Hola">
<operation name="hello">
<input wsam:Action="http://sw/hola/helloRequest"
message="tns:hello"/>
<output wsam:Action="http://sw/Hola/helloResponse"
message="tns:helloResponse"/>
</operation>
</portType>
...
nombre de la operación
mensaje de entrada
mensaje de salida
definiciones de los tipos
utilizados en los mensajes
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Los mensajes
• Los mensajes pueden tener parámetros, cuyos tipos
se especifican en el fichero de esquema declarado
en la etiqueta <types> del wsdl
35
<message name="hello">
<part name="parameters" element="tns:hello"/>
</message>
<message name="helloResponse">
<part name="parameters" element="tns:helloResponse"/>
</message>
tipo del parámetro
tipo del parámetro
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
El fichero de esquema
• Define los tipos de los parámetros utilizados en los
mensajes
•
36
<xs:schema version="1.0" targetNamespace="http://sw/">
<xs:element name="hello" type="tns:hello"/>
<xs:element name="helloResponse" type="tns:helloResponse"/>
<xs:complexType name="hello">
<xs:sequence>
<xs:element name="arg0" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="helloResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>...
cadena de caracteres
cadena de caracteres
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Pasos a seguir
• Creamos un proyecto Java simple con Maven
• Editamos el pom.xml para añadir las dependencias
necesarias
• Codificamos la clase cliente, utilizando las clases
generadas por wsimport
• Empaquetamos y ejecutamos el cliente
37
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Edición del pom.xml
• Incluimos la dependencia con la librería webservices-rt:
• Incluimos el plugin jaxws para ejecutar wsimport
• jaxws: wsimport lee un fichero WSDL y genera las clases
necesarias para la creación, despliegue e invocación del
servicio web
38
<dependencies>
...
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>webservices-rt</artifactId>
<version>1.4</version>
<scope>compile</scope>
</dependency>
</dependencies>
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Plugin jaxws
39
<plugins>
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals> <goal>wsimport</goal> </goals>
</execution>
</executions>
<configuration>
<packageName>wsClient</packageName> <!--opcional-->
<wsdlUrls>
<wsdlUrl>http://localhost:8080/HolaMundo/hola?wsdl</wsdlUrl>
</wsdlUrls>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>webservices-api</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
</plugin>
...
meta wsimport
paquete en el que se generarán las clases
ubicación del wsdl
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Clases generadas por wsimport
• Las clases se generarán cuando compilemos nuestro
proyecto ( en target/generated-sources/)
• Hola.java: interfaz del servicio (etiqueta wsdl <portType>)
• Hola_Service.java: clase que representa el servicio,
contiene el método getHelloPort para acceder a la
operación del servicio. También contiene la url del servicio
• ObjectFactory.java: factoría de métodos para obtener
representaciones java a partir de definiciones XML
• Hello.java, HelloResponse.java: clases que representan
los tipos definidos en el wsdl (utilizan anotaciones JAXB)
• package-info.java
40
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Código para acceder al servicio
• El cliente NO tiene control sobre el ciclo de vida del servicio
41
package expertoJava;
public class App
{
public static void main( String[] args )
{
sw.Hola_Service service = new sw.Hola_Service();
sw.Hola port = service.getHolaPort();
System.out.println(port.hello(" amigos de los
Servicios Web!"));
}
}
clase utilizada para
recuperar el proxy del
servicio
interfaz del
servicio:
SEI
proxy: representante
local del servicio
remoto invocamos el método
que ofrece el servicio
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Código de acceso desde un servlet/jsp
42
@WebServlet(name = "Hola", urlPatterns = {"/Hola"})
public class NewServlet extends HttpServlet {
@WebServiceRef
private Hola_Service service;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
! throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
...
! ! !
try { // Obtenemos el Port
sw.Hola port = service.getHolaPort();
java.lang.String name = "amigos de los Servicios Web";
// Llamamos a la operación correspondiente del SEI
java.lang.String result = port.hello(name);
out.println("Result = "+result);
} catch (Exception ex) {
! ! ! ! // Manejo de excepciones
}
...
Java EE6 puede inyectar una referencia a un
servicio con la anotación @WebServiceRef
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Invocación de Servicios Web con Netbeans
• Desde Netbeans podemos crear un cliente de un servicio Web
de forma sencilla
• Pasos a seguir:
• Desde un proyecto nuevo (o ya existente), añadimos un stub con:
New > Web Service Client
•Se abrirá un asistente en el que indicaremos la URL del
servicio Web, la librería para realizar las llamadas, ...
• Una vez creado el stub, añadiremos el código para acceder al
servicio mediante: Insert Code... > Call Web Service Operaion
•Podemos hacerlo desde la clase principal, o desde otra clase,
incluso desde un JSP
43
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Vista de un cliente de un WS con Maven
44
referencias de servicios Web contenidas en el
cliente del servicio (creadas con New->Web
Service client)
operaciones que ofrece el servicio
clases generadas por wsimport
clase que contiene la invocación de
los métodos del servicio
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Gestor de servicios de Netbeans
45
Podemos crear
grupos de servicios
Añadimos servicios al
grupo
Podemos probar servicios desde
el gestor de servicios de Netbeans
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Interfaz de invocación dinámica
• No se utiliza un stub para invocar las operaciones
• Se invocan de forma dinámica
• Nos permite invocar servicios que no conocemos en tiempo
de compilación
• Utilizamos directamente la librería JAX-WS
• Perdemos totalmente la transparencia
• JAX-WS proporciona métodos genéricos para invocar
servicios
• Indicamos el nombre de la operación mediante una cadena
de texto
• Indicamos los parámetros como un array de objetos
46
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Con documento WSDL
// Obtenemos el servicio
ServiceFactory sf = ServiceFactory.newInstance();
Service serv = sf.createService(
new URL(
"http://localhost:7001/Conversion/Conversion?WSDL"),
new QName("http://jtech.ua.es", "Conversion"));
// Creamos la llamada a la operacion
Call call = serv.createCall(
new QName("http://jtech.ua.es","ConversionSoapPort"),
new QName("http://jtech.ua.es","euro2ptas"));
// Invocamos la operacion
Integer result = (Integer) call.invoke(
new Object[] { new Double(30.0) });
47
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
Sin documento WSDL
• Podemos utilizar servicios sin proporcionar un documento WSDL
Service serv = sf.createService(
new QName("http://jtech.ua.es", "Conversion"));
• Antes de invocar la operación se debe indicar la siguiente información:
call.setTargetEndpointAddress(endpointURL);
QName t_int = new
QName("http://www.w3.org/2001/XMLSchema", "int");
call.setReturnType(t_int);
QName t_double = new
QName("http://www.w3.org/2001/XMLSchema", "double");
call.addParameter("double_1", t_double,
ParameterMode.IN);
48
Experto Universitario Java Enterprise
Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP
¿Preguntas...?
49

Más contenido relacionado

Similar a sesion01-traspas.pdf

Java Web Services - Introduccion
Java Web Services - IntroduccionJava Web Services - Introduccion
Java Web Services - Introduccion
Luis Miguel De Bello
 
3/9 soa y web services
3/9 soa y web services3/9 soa y web services
3/9 soa y web services
Juan Carlos Rubio Pineda
 
[ES] Construyendo Servicios Web con JDeveloper
[ES] Construyendo Servicios Web con JDeveloper[ES] Construyendo Servicios Web con JDeveloper
[ES] Construyendo Servicios Web con JDeveloper
Eudris Cabrera
 
Servicios Web II.ppt
Servicios Web II.pptServicios Web II.ppt
Servicios Web II.ppt
DiegoRomn20
 
S3-PD2.pptx
S3-PD2.pptxS3-PD2.pptx
6-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Conceptos Básicos
6-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Conceptos Básicos6-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Conceptos Básicos
6-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Conceptos Básicos
Luis Fernando Aguas Bucheli
 
S3-PD2-2.1. SOAP
S3-PD2-2.1. SOAPS3-PD2-2.1. SOAP
S3-PD2-2.1. SOAP
Luis Fernando Aguas Bucheli
 
Webservices
WebservicesWebservices
Webservices
Jose San Martin
 
ingenieria web.pptx
ingenieria web.pptxingenieria web.pptx
ingenieria web.pptx
medina2966
 
02 - Servicios SOAP.pptx
02 - Servicios SOAP.pptx02 - Servicios SOAP.pptx
02 - Servicios SOAP.pptx
JorgeVargas846804
 
Cjee a-leccion-web services-jax-ws
Cjee a-leccion-web services-jax-wsCjee a-leccion-web services-jax-ws
Cjee a-leccion-web services-jax-ws
andres880106
 
9- Unidad 3: Webservices-3.1. Introducción, Conceptos y Características
9- Unidad 3: Webservices-3.1. Introducción, Conceptos y Características9- Unidad 3: Webservices-3.1. Introducción, Conceptos y Características
9- Unidad 3: Webservices-3.1. Introducción, Conceptos y Características
Luis Fernando Aguas Bucheli
 
Servicios web(alma y veronica)
Servicios web(alma y veronica)Servicios web(alma y veronica)
Servicios web(alma y veronica)
Alma Peralta Xocua
 
Curso: Programación Web con Tecnología Java
Curso:  	Programación Web con Tecnología JavaCurso:  	Programación Web con Tecnología Java
Curso: Programación Web con Tecnología Java
alvaro alcocer sotil
 
SEVILLA Meetups29112022_sh.pptx
SEVILLA Meetups29112022_sh.pptxSEVILLA Meetups29112022_sh.pptx
SEVILLA Meetups29112022_sh.pptx
Francisco Javier Toscano Lopez
 

Similar a sesion01-traspas.pdf (20)

Java Web Services - Introduccion
Java Web Services - IntroduccionJava Web Services - Introduccion
Java Web Services - Introduccion
 
3/9 soa y web services
3/9 soa y web services3/9 soa y web services
3/9 soa y web services
 
[ES] Construyendo Servicios Web con JDeveloper
[ES] Construyendo Servicios Web con JDeveloper[ES] Construyendo Servicios Web con JDeveloper
[ES] Construyendo Servicios Web con JDeveloper
 
Servicios Web II.ppt
Servicios Web II.pptServicios Web II.ppt
Servicios Web II.ppt
 
S3-PD2.pptx
S3-PD2.pptxS3-PD2.pptx
S3-PD2.pptx
 
S3-PD2.pptx
S3-PD2.pptxS3-PD2.pptx
S3-PD2.pptx
 
6-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Conceptos Básicos
6-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Conceptos Básicos6-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Conceptos Básicos
6-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Conceptos Básicos
 
S3-PD2-2.1. SOAP
S3-PD2-2.1. SOAPS3-PD2-2.1. SOAP
S3-PD2-2.1. SOAP
 
Web services
Web servicesWeb services
Web services
 
Webservices
WebservicesWebservices
Webservices
 
ingenieria web.pptx
ingenieria web.pptxingenieria web.pptx
ingenieria web.pptx
 
02 - Servicios SOAP.pptx
02 - Servicios SOAP.pptx02 - Servicios SOAP.pptx
02 - Servicios SOAP.pptx
 
Cjee a-leccion-web services-jax-ws
Cjee a-leccion-web services-jax-wsCjee a-leccion-web services-jax-ws
Cjee a-leccion-web services-jax-ws
 
9- Unidad 3: Webservices-3.1. Introducción, Conceptos y Características
9- Unidad 3: Webservices-3.1. Introducción, Conceptos y Características9- Unidad 3: Webservices-3.1. Introducción, Conceptos y Características
9- Unidad 3: Webservices-3.1. Introducción, Conceptos y Características
 
Servicios web(alma y veronica)
Servicios web(alma y veronica)Servicios web(alma y veronica)
Servicios web(alma y veronica)
 
Web Services
Web ServicesWeb Services
Web Services
 
Web Services
Web ServicesWeb Services
Web Services
 
Curso: Programación Web con Tecnología Java
Curso:  	Programación Web con Tecnología JavaCurso:  	Programación Web con Tecnología Java
Curso: Programación Web con Tecnología Java
 
SEVILLA Meetups29112022_sh.pptx
SEVILLA Meetups29112022_sh.pptxSEVILLA Meetups29112022_sh.pptx
SEVILLA Meetups29112022_sh.pptx
 
Presentacion ws
Presentacion wsPresentacion ws
Presentacion ws
 

Más de DavidVeraOlivera

U3_Leguaje PHP-Semana 07.pdf
U3_Leguaje PHP-Semana 07.pdfU3_Leguaje PHP-Semana 07.pdf
U3_Leguaje PHP-Semana 07.pdf
DavidVeraOlivera
 
introduccion-seguridad-informc3a1tica.pptx
introduccion-seguridad-informc3a1tica.pptxintroduccion-seguridad-informc3a1tica.pptx
introduccion-seguridad-informc3a1tica.pptx
DavidVeraOlivera
 
ES.ASW.Te11_DistribuidosBigData.pdf
ES.ASW.Te11_DistribuidosBigData.pdfES.ASW.Te11_DistribuidosBigData.pdf
ES.ASW.Te11_DistribuidosBigData.pdf
DavidVeraOlivera
 
ES.ASW.Te02_Definiciones.pdf
ES.ASW.Te02_Definiciones.pdfES.ASW.Te02_Definiciones.pdf
ES.ASW.Te02_Definiciones.pdf
DavidVeraOlivera
 
ARQUITECTURA EN CAPAS.pdf
ARQUITECTURA EN CAPAS.pdfARQUITECTURA EN CAPAS.pdf
ARQUITECTURA EN CAPAS.pdf
DavidVeraOlivera
 
ARQUITECTURA CLIENTE SERVIDOR.pdf
ARQUITECTURA CLIENTE SERVIDOR.pdfARQUITECTURA CLIENTE SERVIDOR.pdf
ARQUITECTURA CLIENTE SERVIDOR.pdf
DavidVeraOlivera
 
ATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdf
ATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdfATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdf
ATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdf
DavidVeraOlivera
 
CICLO DE DESARROLLO DE ARQUITECTURA DE SOFTWARE.pdf
CICLO DE DESARROLLO DE ARQUITECTURA DE SOFTWARE.pdfCICLO DE DESARROLLO DE ARQUITECTURA DE SOFTWARE.pdf
CICLO DE DESARROLLO DE ARQUITECTURA DE SOFTWARE.pdf
DavidVeraOlivera
 
ARQUITECTURA DE SOFTWARE.pdf
ARQUITECTURA DE SOFTWARE.pdfARQUITECTURA DE SOFTWARE.pdf
ARQUITECTURA DE SOFTWARE.pdf
DavidVeraOlivera
 
ARQII_00-Repaso2.pdf
ARQII_00-Repaso2.pdfARQII_00-Repaso2.pdf
ARQII_00-Repaso2.pdf
DavidVeraOlivera
 
ARQII_00-Repaso-2012.pdf
ARQII_00-Repaso-2012.pdfARQII_00-Repaso-2012.pdf
ARQII_00-Repaso-2012.pdf
DavidVeraOlivera
 
Software Architecture & Design of Modern Large Scale.pptx
Software Architecture & Design of Modern Large Scale.pptxSoftware Architecture & Design of Modern Large Scale.pptx
Software Architecture & Design of Modern Large Scale.pptx
DavidVeraOlivera
 

Más de DavidVeraOlivera (12)

U3_Leguaje PHP-Semana 07.pdf
U3_Leguaje PHP-Semana 07.pdfU3_Leguaje PHP-Semana 07.pdf
U3_Leguaje PHP-Semana 07.pdf
 
introduccion-seguridad-informc3a1tica.pptx
introduccion-seguridad-informc3a1tica.pptxintroduccion-seguridad-informc3a1tica.pptx
introduccion-seguridad-informc3a1tica.pptx
 
ES.ASW.Te11_DistribuidosBigData.pdf
ES.ASW.Te11_DistribuidosBigData.pdfES.ASW.Te11_DistribuidosBigData.pdf
ES.ASW.Te11_DistribuidosBigData.pdf
 
ES.ASW.Te02_Definiciones.pdf
ES.ASW.Te02_Definiciones.pdfES.ASW.Te02_Definiciones.pdf
ES.ASW.Te02_Definiciones.pdf
 
ARQUITECTURA EN CAPAS.pdf
ARQUITECTURA EN CAPAS.pdfARQUITECTURA EN CAPAS.pdf
ARQUITECTURA EN CAPAS.pdf
 
ARQUITECTURA CLIENTE SERVIDOR.pdf
ARQUITECTURA CLIENTE SERVIDOR.pdfARQUITECTURA CLIENTE SERVIDOR.pdf
ARQUITECTURA CLIENTE SERVIDOR.pdf
 
ATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdf
ATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdfATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdf
ATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdf
 
CICLO DE DESARROLLO DE ARQUITECTURA DE SOFTWARE.pdf
CICLO DE DESARROLLO DE ARQUITECTURA DE SOFTWARE.pdfCICLO DE DESARROLLO DE ARQUITECTURA DE SOFTWARE.pdf
CICLO DE DESARROLLO DE ARQUITECTURA DE SOFTWARE.pdf
 
ARQUITECTURA DE SOFTWARE.pdf
ARQUITECTURA DE SOFTWARE.pdfARQUITECTURA DE SOFTWARE.pdf
ARQUITECTURA DE SOFTWARE.pdf
 
ARQII_00-Repaso2.pdf
ARQII_00-Repaso2.pdfARQII_00-Repaso2.pdf
ARQII_00-Repaso2.pdf
 
ARQII_00-Repaso-2012.pdf
ARQII_00-Repaso-2012.pdfARQII_00-Repaso-2012.pdf
ARQII_00-Repaso-2012.pdf
 
Software Architecture & Design of Modern Large Scale.pptx
Software Architecture & Design of Modern Large Scale.pptxSoftware Architecture & Design of Modern Large Scale.pptx
Software Architecture & Design of Modern Large Scale.pptx
 

Último

Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
ManuelCampos464987
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
cdraco
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
espinozaernesto427
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 

Último (20)

Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 

sesion01-traspas.pdf

  • 1. Experto Universitario Java Enterprise Servicios Web Sesión 1: Introducción. Invocación de Servicios Web SOAP
  • 2. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Puntos a tratar • ¿Qué es un Servicio Web? • Tipos de Servicios Web • Arquitectura de los Servicios Web • Tecnologías básicas para Servicios Web • Interoperabilidad de los Servicios Web • Servicios Web desde la vista del cliente • Invocación de servicios JAX-WS 2
  • 3. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Descripción de Servicio Web (WS) • Un Servicio Web es un componente diseñado para soportar interacciones máquina a máquina a través de la red • El intercambio de información se lleva a cabo mediante mensajes codificados en XML • Estos mensajes se pueden transportar utilizando HTTP • Normalmente constará de una interfaz (conjunto de métodos) que podremos invocar de forma remota desde cualquier lugar de la red • Nos permiten crear aplicaciones distribuidas en Internet • Los servicios web son independientes de la plataforma y del lenguaje de programación en el que estén implementados • Nos permiten integrar aplicaciones • Pueden combinarse con muy bajo acoplamiento para conseguir la realización de operaciones complejas proporcionando un valor de negocio añadido 3
  • 4. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP La cuestión clave es la interoperabilidad!! • Su principal característica es su gran INTEROPERABILIDAD y extensibilidad • Los servicios Web fueron “inventados” para solucionar el problema de la interoperabilidad entre las aplicaciones • El uso de XML hace posible el compartir datos entre aplicaciones con diferentes plataformas hardware y proporciona información fácilmente procesable por las máquinas (“web para máquinas”) • El protocolo HTTP asegura que puedan ser llamados por cualquier aplicación (independientemente del lenguaje de programación y sistema operativo) • Las características deseables de un Servicio Web son: • Los servicios web deben ser accesibles a través de la red, deben contener una descripción de si mismos, y deben poder ser localizados 4
  • 5. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Web “para humanos” vs. web “para máquinas” Petición HTTP Respuesta HTTP en HTML Aplicación Petición HTTP Respuesta HTTP en XML Otras aplicaciones 5
  • 6. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Tipos de Servicios Web • A nivel CONCEPTUAL, un servicio es un componente software proporcionado a través de un endpoint accesible a través de la red. Los productores y consumidores de servicios utilizan mensajes para intercambiar información. • A nivel TÉCNICO, los servicios pueden implementarse de varias formas: • Servicios Web SOAP •Utilizan mensajes XML que siguen el estándar SOAP •Describen su interfaz utilizando WSDL • Servicios Web RESTful •Utilizan estándares muy conocidos: HTTP, URI, MIME •Tienen una infraestructura muy “ligera” 6
  • 7. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Arquitectura de los servicios Web • Un WS normalmente reside en una máquina remota y es llamado por un cliente a través de la red 7 (2) Find (1) Publish (3) Bind WSDL+UDDI WSDL+UDDI Service Provider Service Description Service Service Requestor Service Registry Service Description PERMITE: • crear una descripción abstracta del servicio • proporcionar una implementación concreta • publicar y localizar un servicio • seleccionar una instancia del servicio • utilizar dicho servicio Aquitectura orientada a servicios
  • 8. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Servicios web SOAP y JavaEE • La especificación que define los servicios Web para Java EE (JSR-109) requiere que una instancia de un servicio (denominada Port, o componente Port) sea creada y gestionada por un contenedor. Este Port puede ser referenciado desde un cliente, así como desde los contenedores web y EJB 8 Pueden implementarse de dos formas: • como una clase Java que se ejecuta en un contenedor Web • como un EJB de sesión o singleton en un contenedor EJB El contenedor actúa como mediador para acceder al servicio
  • 9. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Tecnologías básicas para servicios Web • Los protocolos utilizados en los WS se organizan en una serie de capas: 9 Localización de Servicios (UDDI) Descripción de Servicios (WSDL) Mensajería XML (SOAP, XML-RPC) Transporte de Servicios (HTTP, SMTP, FTP, BEEP, ...) Tecnologías básicas
  • 10. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP SOAP • Protocolo derivado de XML • Se usa para intercambiar información entre aplicaciones • Dos tipos: • Mensajes orientados al documento •Cualquier tipo de contenido • Mensajes orientados a RPC •Tipo más concreto que el anterior •Nos permite realizar llamadas a procedimientos remotos àLa petición contiene el método a llamar y los parámetros ßLa respuesta contiene los resultados devueltos • Nos centraremos en el primer tipo 10
  • 11. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Elementos de SOAP • Sobre SOAP (Envelope). Contiene: •Descripción del mensaje (destinatario, forma de procesarlo, definiciones de tipos) •Cabecera (opcional) y cuerpo SOAP • Cabecera SOAP (Header). Contiene: •Información sobre el mensaje (obligatorio, actores, etc) • Cuerpo SOAP (Body). Contiene: •Mensaje (en caso de RPC la forma del mensaje se define por convención) •Error (opcional) • Error SOAP (Fault) •Indica en la respuesta que ha habido un error en el procesamiento de la petición 11
  • 12. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Ejemplos mensajes SOAP • Mensaje de petición 12 <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope> <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope> • Mensaje de respuesta
  • 13. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP WSDL (Web Services Description Language) • Lenguaje derivado de XML • Describe la interfaz de los Servicios Web • Operaciones disponibles • Parámetros de las operaciones • Resultados devueltos • Tipos de datos de estos parámetros y resultados • Además contiene la dirección del endpoint • URL a la que hay que conectarse para acceder al servicio • Nos permite integrar un servicio automáticamente en nuestra aplicación, o que otros usuarios utilicen los servicios que hayamos desarrollado nosotros 13
  • 14. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Estructura de un documento WSDL 14 La parte abstracta define el QUÉ hace el servicio: • operaciones disponibles • entradas, salidas y mensajes de error • definiciones de tipos para los mensajes La parte concreta define el CÓMO Y DÓNDE del servicio: • cómo se tiene que llamar (formato de los datos: SOAP) • protocolo de acceso (red) • dónde está el servicio (URL)
  • 15. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Elementos WSDL (versión 1.1) <definitions> <types> tipos de datos, si no son primitivos <message> llamadas y respuestas SOAP <portType> (INTERFAZ) operaciones: llamada + respuesta <binding> protocolo de red y formato de datos SOAP <service> URL del servicio para acceder a una colección de ports 15
  • 16. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Ejemplo de documento WSDL (I) 16 <?xml version="1.0" encoding="utf-8"?> <definitions targetNamespace="http://jaxwsHelloServer/" name="HelloService"> <types> <xsd:schema> <xsd:import namespace="http://jaxwsHelloServer/" schemaLocation="http://localhost:8080/JAXWSHelloAppServer/ jaxwsHello?xsd=1"/> </xsd:schema> </types> <message name="sayHello"> <part name="parameters" element="tns:sayHello"/> </message> <message name="sayHelloResponse"> <part name="parameters" element="tns:sayHelloResponse"/> </message> los tipos se definen en el fichero xsd
  • 17. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Ejemplo de documento WSDL (II) 17 <portType name="Hello"> <operation name="sayHello"> <input wsam:Action="http://jaxwsHelloServer/Hello/sayHelloRequest" message="tns:sayHello"/> <output wsam:Action="http://jaxwsHelloServer/Hello/sayHelloResponse" message="tns:sayHelloResponse"/> </operation> </portType> <binding name="HelloPortBinding" type="tns:Hello"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="sayHello"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="HelloService"> <port name="HelloPort" binding="tns:HelloPortBinding"> <soap:address location="http://localhost:8080/JAXWSHelloAppServer/ jaxwsHello"/> </port> </service> operaciones soportadas por el servicio dirección donde localizar el servicio protocolo de red y formato de los datos
  • 18. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Edición de documentos WSDL con Netbeans • Para poder editar documentos WSDL hay que instalar el plugin XML desde: • URL: http://deadlock.netbeans.org/hudson/job/xml/ lastSuccessfulBuild/artifact/build/updates/updates.xml • Este plugin nos permitirá trabajar con ficheros WSDL y con ficheros de esquema (xsd) • XML Schema es una recomendación del W3C, que proporciona mecanismos para definir la estructura, contenido y semántica de un documento xml • Un documento WSDL utiliza ficheros de esquema para definir los TIPOS de mensajes que se utilizan como interfaz para comunicarnos con un servicio Web 18
  • 19. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Fichero de esquema (xsd) • El bloque de construcción principal de un documento xml es <element>, que debe contener • Una propiedad name que representa el nombre del elemento • Una propiedad type para indicar el tipo de elemento • Podemos utilizar alguno de los tipos predefinidos (built-in types), o bien podemos definir nuevos tipos utilizando etiquetas simpleType o complexType • Ejemplos: 19 <xs:element name="CustomerAddress" type="xs:string"/>
  • 20. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Ejemplos de definiciones de esquema (xsd) • Definimos el elemento CustomerAddress • Podemos utilizar dicho elemento en el documento wsdl • Ejemplo de mensaje de respuesta con la definición anterior: 20 <xs:element name="CustomerAddress" type="xs:string"/> <message name="msgResponse"> <part name="parameters" element="tns:CustomerAddress"/> </message> <Customer_address>Calle de los Pinos, 37</Customer_address>
  • 21. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Ejemplos de definiciones de esquema (xsd) • Vamos a definir nuevos tipos: • Definición del mensaje en el WSDL: • Ejemplo de mensaje de respuesta: 21 <xsd:element name="Customer" type="tns:CustomerType"/> <xsd:complexType name="CustomerType"> <xsd:sequence> <xsd:element name="Phone" type="xsd:integer"/> <xsd:element name="Addresses" type="tns:AddressType"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="AddressType"> <xsd:sequence> <xsd:element name="Address1" type="xsd:string"/> <xsd:element name="Address2" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <message name="msgResponse2"> <part name="parameters" element="tns:Customer"/> </message> <Customer> <Phone>12345678</Phone> <Address1>Calle de los Pinos, 37</Address1> <Address2>Calle de los Manzanos, 25</Address2> </Customer>
  • 22. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Edición de esquemas con Netbeans (I) 22 New->XMl ->XML Schema
  • 23. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Edición de esquemas con Netbeans (II) 23 Vista de diseño Vista de fuentes
  • 24. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Edición de WSDL con Netbeans (I) 24 New->XMl ->WSDL Document
  • 25. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Edición de WSDL con Netbeans (II) 25 Configuración ABSTRACTA
  • 26. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Edición de WSDL con Netbeans (III) 26 Vista WSDL Configuración CONCRETA
  • 27. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP UDDI • UDDI nos permite localizar Servicios Web • Define la especificación para construir un directorio distribuido de Servicios Web • Se registran en XML • Define una API para acceder a este registro • Buscar servicios • Publicar servicios • La interfaz de UDDI está basada en SOAP • Se utilizan mensajes SOAP para buscar o publicar servicios 27
  • 28. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Interoperabilidad de los servicios Web (WS-I): Metro y JAX-WS 28 Metro/WSIT JAXB-RI JAXWS-RI METRO: Iniciativa de Sun para conseguir la interoperabilidad de los Servicios Web Implementación de Referencia del API JAX-WS (JSR-224: Java Api for XML-based Web Services) Estándares asociados:WS-I Basic Profile (SOAP y UDDI); WS-I Attachment Profile (SOAP con anexos); WS-I Addressing (espacios de nombres y ficheros de esquema) WSIT:Web Services Interoperabe Technologies (permiten la interoperabilidad con .NET) Transport: HTTP, MTOM, SOAP/TCP Reliability:WS-ReliableMessaging;WS-Coordination;WS- Atomic Transaction Security:WS-Security;WS-Trust Bootstrapping:WSDL;WS-Policy;WS-MetadataExange Implementación de Referencia del API JAX-WS (JSR-222: Java Architecture for XML Binding (JAXB) 2.0)
  • 29. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Interoperabilidad de los servicios Web (WS-I): Metro y JAX-WS 29 JAXB-RI METRO: Iniciativa de Sun para conseguir la interoperabilidad de los Servicios Web Implementación de referencia del API JAXB (Java Architecture for XML Binding) Metro está construido sobre un conjunto de librerías que pueden usarse de forma independiente fuera del contexto de los Servicios Web JAXWS-RI WSIT
  • 30. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Servicios Web: vista del cliente 30 El transporte, codificación y dirección del Port son transparentes para el cliente El cliente, para acceder al servicio, necesita: (1) Acceder a la clase/interfaz Service (SI) (2) A través del SI obtiene el Port (3) Realizar llamadas a métodos del SEI del Port correspondiente SEI SI SEI: Service Endpoint Interface SI: Service Interface Tipos de clientes: aplicación cliente Java EE componente Web componente EJB otro Servicio Web ... //Primero accedemos al objeto Service Hola_Service service = new Hola_Service(); //a través de él accedemos al Port Hola port = service.getHolaPort(); java.lang.String name = "perico de los palotes"; //utilizamos el Port para llamar al WS a través del SEI java.lang.String result = port.hello(name); System.out.println("Result = "+result); ... JAX-WS proporciona una factoría (Service) para seleccionar qué Port desea usar el cliente. La clase Service proporciona los métodos para acceder al Port
  • 31. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Tipos de acceso a servicios Web • JAX-WS nos permite acceder de 2 formas: • Creación de un stub estático •Se genera una capa stub en tiempo de compilación •Esta capa se genera automáticamente mediante herramientas •El cliente accede a través del stub como si fuese a un objeto local • Interfaz de invocación dinámica (DII) •Se hacen llamadas de forma dinámica, sin stub •Se proporcionan los nombres de las operaciones a ejecutar mediante cadenas de texto a métodos genéricos de JAX-RPC •Se pierde transparencia 31
  • 32. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Librería JAX-WS • La versión actual de JAX-WS es la 2.2, también denominada JSR-224 • La implementación de referencia de JAX-WS está enmarcada dentro del proyecto Metro • A partir de JDK 1.6 se incluye JAX-WS 2.0 en Java SE • JAX-WS 2.1 a partir de JDK 1.6.0_04 • JAX-WS también viene incluida en Glassfish • JAX-WS 2.2 en Glassfish 3.1.2.2 • 32
  • 33. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Generar el cliente con JAX-WS y JDK 1.6 • Se utiliza la herramienta wsimport wsimport -s src -d bin -p es.ua.jtech.servcweb.hola.stub http://jtech.ua.es/HolaMundo/wsdl/HolaMundoSW.wsdl • También disponible como tarea de ant <wsimport sourcedestdir="${src.home}" destdir="${bin.home}" package="${pkg.name}" wsdl="${wsdl.uri}" /> • Y también desde Maven ...! 33
  • 34. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Cliente de un SW desde una clase Java con Maven • Necesitamos conocer la dirección del WSDL (o disponer de él en local) • la etiqueta <portType> nos indica las operaciones que el servicio ofrece, con los mensajes de entrada y salida. Representa el SEI del servicio 34 <types> <xsd:schema> <xsd:import namespace="http://sw/" schemaLocation="http://localhost:8080/HolaMundo/hola?xsd=1"/> </xsd:schema> </types> ... <portType name="Hola"> <operation name="hello"> <input wsam:Action="http://sw/hola/helloRequest" message="tns:hello"/> <output wsam:Action="http://sw/Hola/helloResponse" message="tns:helloResponse"/> </operation> </portType> ... nombre de la operación mensaje de entrada mensaje de salida definiciones de los tipos utilizados en los mensajes
  • 35. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Los mensajes • Los mensajes pueden tener parámetros, cuyos tipos se especifican en el fichero de esquema declarado en la etiqueta <types> del wsdl 35 <message name="hello"> <part name="parameters" element="tns:hello"/> </message> <message name="helloResponse"> <part name="parameters" element="tns:helloResponse"/> </message> tipo del parámetro tipo del parámetro
  • 36. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP El fichero de esquema • Define los tipos de los parámetros utilizados en los mensajes • 36 <xs:schema version="1.0" targetNamespace="http://sw/"> <xs:element name="hello" type="tns:hello"/> <xs:element name="helloResponse" type="tns:helloResponse"/> <xs:complexType name="hello"> <xs:sequence> <xs:element name="arg0" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:complexType name="helloResponse"> <xs:sequence> <xs:element name="return" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:schema>... cadena de caracteres cadena de caracteres
  • 37. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Pasos a seguir • Creamos un proyecto Java simple con Maven • Editamos el pom.xml para añadir las dependencias necesarias • Codificamos la clase cliente, utilizando las clases generadas por wsimport • Empaquetamos y ejecutamos el cliente 37
  • 38. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Edición del pom.xml • Incluimos la dependencia con la librería webservices-rt: • Incluimos el plugin jaxws para ejecutar wsimport • jaxws: wsimport lee un fichero WSDL y genera las clases necesarias para la creación, despliegue e invocación del servicio web 38 <dependencies> ... <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>webservices-rt</artifactId> <version>1.4</version> <scope>compile</scope> </dependency> </dependencies>
  • 39. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Plugin jaxws 39 <plugins> <plugin> <groupId>org.jvnet.jax-ws-commons</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>2.2</version> <executions> <execution> <goals> <goal>wsimport</goal> </goals> </execution> </executions> <configuration> <packageName>wsClient</packageName> <!--opcional--> <wsdlUrls> <wsdlUrl>http://localhost:8080/HolaMundo/hola?wsdl</wsdlUrl> </wsdlUrls> <verbose>true</verbose> </configuration> <dependencies> <dependency> <groupId>javax.xml</groupId> <artifactId>webservices-api</artifactId> <version>1.4</version> </dependency> </dependencies> </plugin> ... meta wsimport paquete en el que se generarán las clases ubicación del wsdl
  • 40. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Clases generadas por wsimport • Las clases se generarán cuando compilemos nuestro proyecto ( en target/generated-sources/) • Hola.java: interfaz del servicio (etiqueta wsdl <portType>) • Hola_Service.java: clase que representa el servicio, contiene el método getHelloPort para acceder a la operación del servicio. También contiene la url del servicio • ObjectFactory.java: factoría de métodos para obtener representaciones java a partir de definiciones XML • Hello.java, HelloResponse.java: clases que representan los tipos definidos en el wsdl (utilizan anotaciones JAXB) • package-info.java 40
  • 41. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Código para acceder al servicio • El cliente NO tiene control sobre el ciclo de vida del servicio 41 package expertoJava; public class App { public static void main( String[] args ) { sw.Hola_Service service = new sw.Hola_Service(); sw.Hola port = service.getHolaPort(); System.out.println(port.hello(" amigos de los Servicios Web!")); } } clase utilizada para recuperar el proxy del servicio interfaz del servicio: SEI proxy: representante local del servicio remoto invocamos el método que ofrece el servicio
  • 42. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Código de acceso desde un servlet/jsp 42 @WebServlet(name = "Hola", urlPatterns = {"/Hola"}) public class NewServlet extends HttpServlet { @WebServiceRef private Hola_Service service; protected void processRequest(HttpServletRequest request, HttpServletResponse response) ! throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<html>"); ... ! ! ! try { // Obtenemos el Port sw.Hola port = service.getHolaPort(); java.lang.String name = "amigos de los Servicios Web"; // Llamamos a la operación correspondiente del SEI java.lang.String result = port.hello(name); out.println("Result = "+result); } catch (Exception ex) { ! ! ! ! // Manejo de excepciones } ... Java EE6 puede inyectar una referencia a un servicio con la anotación @WebServiceRef
  • 43. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Invocación de Servicios Web con Netbeans • Desde Netbeans podemos crear un cliente de un servicio Web de forma sencilla • Pasos a seguir: • Desde un proyecto nuevo (o ya existente), añadimos un stub con: New > Web Service Client •Se abrirá un asistente en el que indicaremos la URL del servicio Web, la librería para realizar las llamadas, ... • Una vez creado el stub, añadiremos el código para acceder al servicio mediante: Insert Code... > Call Web Service Operaion •Podemos hacerlo desde la clase principal, o desde otra clase, incluso desde un JSP 43
  • 44. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Vista de un cliente de un WS con Maven 44 referencias de servicios Web contenidas en el cliente del servicio (creadas con New->Web Service client) operaciones que ofrece el servicio clases generadas por wsimport clase que contiene la invocación de los métodos del servicio
  • 45. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Gestor de servicios de Netbeans 45 Podemos crear grupos de servicios Añadimos servicios al grupo Podemos probar servicios desde el gestor de servicios de Netbeans
  • 46. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Interfaz de invocación dinámica • No se utiliza un stub para invocar las operaciones • Se invocan de forma dinámica • Nos permite invocar servicios que no conocemos en tiempo de compilación • Utilizamos directamente la librería JAX-WS • Perdemos totalmente la transparencia • JAX-WS proporciona métodos genéricos para invocar servicios • Indicamos el nombre de la operación mediante una cadena de texto • Indicamos los parámetros como un array de objetos 46
  • 47. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Con documento WSDL // Obtenemos el servicio ServiceFactory sf = ServiceFactory.newInstance(); Service serv = sf.createService( new URL( "http://localhost:7001/Conversion/Conversion?WSDL"), new QName("http://jtech.ua.es", "Conversion")); // Creamos la llamada a la operacion Call call = serv.createCall( new QName("http://jtech.ua.es","ConversionSoapPort"), new QName("http://jtech.ua.es","euro2ptas")); // Invocamos la operacion Integer result = (Integer) call.invoke( new Object[] { new Double(30.0) }); 47
  • 48. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP Sin documento WSDL • Podemos utilizar servicios sin proporcionar un documento WSDL Service serv = sf.createService( new QName("http://jtech.ua.es", "Conversion")); • Antes de invocar la operación se debe indicar la siguiente información: call.setTargetEndpointAddress(endpointURL); QName t_int = new QName("http://www.w3.org/2001/XMLSchema", "int"); call.setReturnType(t_int); QName t_double = new QName("http://www.w3.org/2001/XMLSchema", "double"); call.addParameter("double_1", t_double, ParameterMode.IN); 48
  • 49. Experto Universitario Java Enterprise Servicios Web © 2012-2013 Depto. Ciencia de la Computación e IA Invocación Servicios Web SOAP ¿Preguntas...? 49