Download Webservices
Document related concepts
no text concepts found
Transcript
Introducción a los
Webservices
Contenidos
Definición
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 cómo se hayan creado
las aplicaciones
Permite integración de aplicaciones
Webservices
Los Servicios Web son para los computadores,
lo que las páginas Web para los humanos
Fortaleza de los WebServices – basados en
estándares
Protocolos de comunicación
Formatos de representación de datos
Lenguajes descriptivos
Mecanismo de descubrimiento
Protocolos y estándares
HTTP
XML
SOAP, XML-RPC
WSDL
UDDI
Protocolos y Estándares
HTTP
Un esquema de direccionamiento comprensible.
Arquitectura Cliente-Servidor.
HTTP se asienta en el paradigma solicitud/respuesta. La
comunicación se asienta sobre TCP/IP. El puerto por
defecto es el 80, pero se pueden utilizar otros.
Protocolos y Estándares
HTTP
Es un protocolo sin conexión y sin estado.
Después de que el servidor ha respondido la petición del
cliente, se rompe la conexión entre ambos.
Está abierto a nuevos tipos de datos.
Cuando un servidor HTTP transmite información de
vuelta a un cliente, incluye una cabecera que le indica al
cliente sobre los tipos de datos que componen el
documento.
Protocolos y Estándares
XML (eXtended Markup Language)
Base de los servicios Web
Permite comunicación entre sistemas de forma
estándar
Información con estructura
Utilizado ampliamente en la industria
Futuro estándar de estructuración de información
Protocolos y Estándares
SOAP v/s XML-RPC
Invocación de procedimientos a través de protocolos
estándar
XML-RPC . Unix Friendly
SOAP . Arquitectura .NET
Especifican todas las reglas necesarias para ubicar
servicios Web XML, integrarlos en aplicaciones y
establecer la comunicación entre ellos.
Incompatibles entre sí
Protocolos y Estándares
SOAP v/s XML-RPC
Estandarizados por la W3C
SOAP lidera en desarrollos de Webservices
Google posee un servicio Web de búsqueda
implementado con protocolo SOAP
Protocolos y Estándares
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 Estándares
WSDL y UDDI
El archivo WSDL, en formato XML, indica al
sistema que consulte, qué servicios dispone
WSDL además da una referencia precisa sobre el
servicio, para poder invocarlo usando los parámetros
adecuados
UDDI es un Servicio Web en línea que se puede
utilizar desde las aplicaciones para descubrir de
forma dinámica otros servicios en línea
Protocolos y Estándares
WSDL y UDDI
WSDL
Registro UDDI
WSDL
SOAP
Cliente
SOAP
Servicio Web
Webservices en Java
Apache Axis – Implementación de SOAP para
Java y C++
Continuación del proyecto Apache SOAP
Deploy de servicios en forma natural
Requiere un WebServer para operar (Apache
Tomcat)
Ejemplo deploy simple
Cálculo raíz cuadrada
public class Raiz
{
public double raizCuadrada(String i1)
{
return Math.sqrt(Integer.parseInt(i1));
}
}
Guardamos clase con extensión .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/encoding/>
<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:QNamejavax.xml.namespace.QName
Deploy más 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 más 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 más 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