You are on page 1of 22

Introduccin a

los Webservices

Contenidos

Definicin
Protocolos que hacen posible la
existencia de los Webservices
Webservices en Java
Ejemplo

Webservices

Los servicios Web proporcionan una


manera de crear aplicaciones que
pueden ser accedidas y utilizadas por
diferentes clientes utilizando
diferentes plataformas.
Permite invocar funciones de otras
aplicaciones independientemente de
cmo se hayan creado las aplicaciones
Permite integracin de aplicaciones

Webservices

Los Servicios Web son para los


computadores, lo que las pginas Web
para los humanos
Fortaleza de los WebServices
basados en estndares
Protocolos de comunicacin
Formatos de representacin de datos
Lenguajes descriptivos
Mecanismo de descubrimiento

Protocolos y estndares

HTTP
XML
SOAP, XML-RPC
WSDL
UDDI

Protocolos y Estndares

HTTP
Un esquema de direccionamiento
comprensible.
Arquitectura Cliente-Servidor.

HTTP se asienta en el paradigma


solicitud/respuesta. La comunicacin se
asienta sobre TCP/IP. El puerto por defecto
es el 80, pero se pueden utilizar otros.

Protocolos y Estndares

HTTP

Es un protocolo sin conexin y sin estado.

Despus de que el servidor ha respondido la


peticin del cliente, se rompe la conexin entre
ambos.

Est abierto a nuevos tipos de datos.

Cuando un servidor HTTP transmite


informacin de vuelta a un cliente, incluye una
cabecera que le indica al cliente sobre los tipos
de datos que componen el documento.

Protocolos y Estndares

XML (eXtended
Markup Language)
(
Base de los servicios Web
Permite comunicacin entre sistemas
de forma estndar
Informacin con estructura
Utilizado ampliamente en la industria
Futuro estndar de estructuracin de
informacin

Protocolos y Estndares

SOAP v/s XML-RPC


Invocacin de procedimientos a travs de
protocolos estndar
XML-RPC . Unix Friendly
SOAP . Arquitectura .NET
Especifican todas las reglas necesarias para
ubicar servicios Web XML, integrarlos en
aplicaciones y establecer la comunicacin
entre ellos.
Incompatibles entre s

Protocolos y Estndares

SOAP v/s XML-RPC


Estandarizados por la W3C
SOAP lidera en desarrollos de
Webservices
Google posee un servicio Web de
bsqueda implementado con protocolo
SOAP

Protocolos y Estndares

SOAP
Protocolo de acceso a objetos simple
soporte completo y minucioso de todo
tipo de servicios Web
Mas potente que XML-RPC
Incluye toda una arquitectura a su
alrededor

Protocolos y Estndares

WSDL y UDDI
El archivo WSDL, en formato XML, indica al
sistema que consulte, qu servicios dispone
WSDL adems da una referencia precisa
sobre el servicio, para poder invocarlo
usando los parmetros adecuados
UDDI es un Servicio Web en lnea que se
puede utilizar desde las aplicaciones para
descubrir de forma dinmica otros servicios
en lnea

Protocolos y Estndares

WSDL y UDDI
WSDL

Registro UDDI

WSDL

SOAP
Cliente

SOAP

Servicio Web

Webservices en Java

Apache Axis Implementacin de


SOAP para Java y C++
Continuacin del proyecto Apache
SOAP
Deploy de servicios en forma natural
Requiere un WebServer para operar
(Apache Tomcat)

Ejemplo deploy simple

Clculo raz cuadrada


public class Raiz
{
public double raizCuadrada(String i1)
{
return Math.sqrt(Integer.parseInt(i1));
}
}

Guardamos clase con extensin .jws


en directorio de Axis

Ejemplo deploy simple

XML SOAP generado


<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<raizCuadradaResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/en
coding/>
<raizCuadradaReturn
xsi:type="xsd:double">2.0</raizCuadradaReturn>
</raizCuadradaResponse>
</soapenv:Body>
</soapenv:Envelope>

Ejemplo deploy simple

Cliente que utiliza este Webservice

String numero ="465";


Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new
URL("http://localhost:8080/axis/Raiz.jws"));
call.setOperationName(new QName("http://soapinterop.org/",
"RaizCuadrada"));
Double returnValue = (Double)call.invoke(new Object[]{numero});
System.out.println("La raiz de "+numero +" es "+returnValue);

Ejemplo deploy simple

Tipos de datos estandarizados

xsd:base64Binary
byte[]
xsd:boolean
boolean
xsd:byte byte
xsd:dateTime
java.util.Calendar
xsd:decimal
java.math.BigDecimal
xsd:double
double
xsd:float float
xsd:hexBinary
byte[]
xsd:int int
xsd:integer
java.math.BigInteger
xsd:long long
xsd:short short
xsd:string
java.lang.String
xsd:QName
javax.xml.namespace.QName

Deploy ms elaborado

Ejemplo: Webservice que retorna una clase creada por nosotros

public class Archivo implements Serializable


{
public String Nombre;
public byte[] Datos;
public Archivo(){}
public void setNombre(String param_Nombre){
Nombre = param_Nombre;}
public void setDatos(byte[] param_Datos){
Datos = param_Datos;}
public byte[] getDatos()
return Datos;

{
}

public String getNombre(){


return Nombre;}
}

Deploy ms elaborado

Archivo WSDD

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="EventosServidor" provider="java:RPC">
<parameter name="className"
value="WS_EventosServidor"/>
<parameter name="allowedMethods" value="*"/>
<beanMapping qname="myNS:Archivo"
xmlns:myNS="urn:BeanService"
languageSpecificType="java:Archivo"/>
</service>
</deployment>

Deploy ms elaborado

Cliente

Service service = new Service();


Call call = (Call)service.createCall();
QName archivoqn = new QName("urn:BeanService","Archivo");
call.setOperationName( "descargaEventos" );
call.registerTypeMapping(Archivo.class,archivoqn,new
BeanSerializerFactory(Archivo.class,archivoqn),new
BeanDeserializerFactory(Archivo.class,archivoqn),false);
call.registerTypeMapping(Archivo.class,archivoqn,new
BeanSerializerFactory(Archivo.class,archivoqn),new
BeanDeserializerFactory(Archivo.class,archivoqn));
call.setTargetEndpointAddress(new
URL("http://localhost:8080/axis/services/EventosServidor"));
Archivo[] returnValue = (Archivo[])call.invoke( new Object[]
{Fecha,Hora});

Fin