Servicios web en SOAP

Documentos relacionados
Servicios Web: Concepto

Servicios web con SOAP y Eclipse

Tema 4. Servicios WEB

Tecnología web DYA DYA DYA. Qué es la Web? El cliente Web. Joan Vila. Diseño Y Aplicaciones de Sistemas Distribuidos

1.9.- Descripción del servicio: WSDL (VI)

1. Introducción a los Servicios web

Manual de usuario. Descripción del servicio de envío de mensajes

Manual de Desarrollador Autenticación Automática

Openbravo WebServices

SOR -::- Prácticas -::- Curso 06/07

Servicios web. Contenido. Programación en Internet Curso Introducción Los pilares (SOAP, WSDL, UDDI) Desarrollo de un servicio web

SICOFI (Sistema Integral de Comprobantes Fiscales)- Verificación MANUAL DE USUARIO

Web Service de Calidad de datos identificativos

Especificación Técnica del Web Service de Autenticación y Autorización WSAA Para el desarrollo de Clientes de Entidades Externas

WSDL (Web Services Description Language) Construcción de servicios web. Lourdes Tajes Martínez

Manual de integración con el TPV Virtual para comercios con conexión por Web Service

Web Services. Introducción y Escenarios para su Uso. Moisés Daniel Díaz Toledano.

Especificación Técnica del WebService de Autenticación y Autorización

Guía de migración a firma HMAC SHA256 Conexión por Web Service

Curso SOA and Java Web Services with JAX-WS

Consulta a Padrón Nivel 10

WbS Web Services. Roberto Gómez Cárdenas Web Services

Experto Universitario Java Enterprise Servicios Web

Desarrollo de Servicios Web para la ETN

Aplicaciones y Servicios Web (Web Services)

5.1 Introducción a Servicios Web

Introducción a XML (III) - Web Services Huibert Aalbers Senior Certified Software IT Architect

Tema 3.1: Introducción a Servicios Web

JAVA RMI (REMOTE METHOD INVOCATION)

Especificación Técnica del WebService de Autenticación y Autorización

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina

Sistemas Distribuidos Servicios web. Rodrigo Santamaría

Servicios web. Jorge Iván Meza Martínez

INFORMACION WEBSERVICE DEL SISTEMA DE TRÁNSITO, TRANSBORDO Y REDESTINACIÓN PARA EL SERVICIO NACIONAL DE ADUANAS

TECNOLOGÍAS ASOCIADAS A LAS APLICACIONES WEB

Servicios Web. Andrés Pastorini. TRIA Tecnólogo Informático

SERVICIO WEB ESTADO DOCUMENTOS TRAMITADOS GUÍA USO

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Servicios Web con Software Libre

TEMA 5. Otras arquitecturas distribuidas IV. Web Services

SIS TPV VIRTUAL WEBSERVICE

Agenda..NET C# Laboratorio #1

Desarrollo y servicios web

Capacitación Efectiva SOA y Web Services con Java

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

Facturación Electrónica

Facturación Electrónica

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU

Para crear un servicio puede utilizarse cualquiera de los lenguajes disponibles en la plataforma.net.

4.5 APIs Java y Java EE para Servicios Web

Visión de Web Services con J2EE

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa

Guía de migración a firma HMAC SHA256 Conexión por Redirección

Consulta a Padrón Nivel 3

Un servicio Web para investigación operativa

Sistemas Operativos Distribuidos. Introducción a los Servicios Web (Web Services)

Tema VI. Servicios Web II. JAX-WS

Introducción a la Programación Distribuida. Aplicaciones Distribuidas

Experto Universitario Java Enterprise Servicios Web

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs

AGESIC. Gerencia de Proyectos

Qué son los Web Services?

Manual de Desarrollador Externo

JAVA EE 5. Arquitectura, conceptos y ejemplos.

JavaEE.

Servicios Web. Antecedentes y Justificación SOAP, WSDL, UDDI Utilización de Servicios Web Creación de Servicios Web

Modelo de Objetos Distribuidos

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Prueba de conectividad y soluciones de integración para sistemas de salud

Interacción entre Aplicaciones: objetos distribuidos e invocación remota

5.1 Introducción a las tecnologías de objetos distribuidos con Java RMI

Taller de Sistemas de Información 1. Clase 5 WCF

Arquitecturas REST (Representa3onal State Transfer)

DESARROLLO WEB EN ENTORNO SERVIDOR

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

BANCO NACIONAL DE PANAMÁ, BANCO DE DESARROLLO AGROPECUARIO Y BANCO HIPOTECARIO NACIONAL

ALTAS MANUAL DE USUARIO ENVÍO DE CORREOS ELECTRÓNICOS

Ie813RsV32 Recogida de cambio de destino desde formulario web de un documento expedido.

1. Visión general de RMI

Desarrollo de Sistemas Software Basados en Servicios y Componentes

Sistemas Distribuidos Basados en la WEB

Cursos de Extensión Universitaria UNIVERSIDAD DE OVIEDO. Servicios Web (II)

Desarrollo y servicios web

FSD Práctica Invocación Remota: JavaRMI. Estudio Previo. Información

Manual de Usuario VU Digitalizar Documento

AGESIC. Gerencia de Proyectos. Tutorial para Consumir un servicio sincrónico de la PGE sobre Plataforma Java

Sesión 17. Servicios web RESTful

Tutorial 1: Desarrollo de un plugin

Elementos léxicos del lenguaje de programación Java

Servicios Web Ubicuos Activados por Voz

IEST Integración servicio Descarga Fichero Microdatos

XML, Servicios Web y Web Semántica

Práctica 6. Servicios WEB (Java JAX-WS) SCS, 2009/10

Transcripción:

Servicios web en SOAP Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València

Servicios web Indice Conceptos básicos SOAP Estructura de SOAP SOAP y WSDL SOAP UDDI Soporte SOAP para Java Interfaz dinámico de invocaciones Interfaz estático de invocaciones (Axis) Soporte SOAP para PHP Un ejemplo en SOAP La eurocalculadora en SOAP / Java XML-RPC 61

Servicios web Qué es un servicio web? Es un servicio en Internet accesible con protocolos de RPC implementados sobre HTTP. Basado en invocaciones RPC (invocación-respuesta) semejantes a las invocaciones a procedimientos u objetos remotos. Ejemplos: Permite utilizar el paradigma de objetos distribuidos en Internet Servicio de fax, servicio de SMS, motor de búsqueda de información (Google), servicio de información bursátil, servicio de traducción de texto, etc... Catálogo: http://services.xmethods.net Base para computación distribuida con HTTP Interfaz programática: invocable desde programas; no solo desde páginas web. Permite que un servidor (programa CGI) pueda convertirse en cliente de otros servicios. 62

Servicios web Computación distribuida con servicios web Nivel cliente HTTP GET, PUT Páginas web WWW server WWW server Invocaciones métodos Invocaciones métodos Servicio Servicio Base de Datos Base de Datos Nivel web Nivel aplicación Nivel almacenamiento 63

Servicios web Protocolos Transferencia de datos y protocolos basados en XML XML-RPC: es la base. Llamadas remotas codificadas en XML que son menos eficientes que en binario pero mucho más estándares y estructuradas. http://www.xmlrpc.com SOAP: extiende mejora XML-RPC. Lo que mucha gente entiende como web services. Uso extensivo de espacios de nombres y etiquetas de marcado. Esponsorizada por Microsoft como estándar y apoyada por IBM. Base de la campaña.net. http://www.w3.org/tr/soap XML-RPC vs SOAP: http://weblog.masukomi.org/writings/xml-rpc_vs_soap.htm 64

Servicios web Indice Conceptos básicos SOAP Estructura de SOAP SOAP y WSDL SOAP UDDI Soporte SOAP para Java Interfaz dinámico de invocaciones Interfaz estático de invocaciones (Axis) Soporte SOAP para PHP Un ejemplo en SOAP La eurocalculadora en SOAP / Java XML-RPC 65

SOAP SOAP Es un estándar basado en XML para la mayoría de servicios web públicos Usa un lenguaje de definición de servicios denominado WSDL (análogo a IDL), donde se definen los servicios a publicar, los tipos de datos a enviar y retornar. El WSDL es como la URL en XML-RPC. WSDL: Web Services Definition Language http://www.w3.org/tr/2001/note-wsdl-20010315 Existe un directorio de servicios web para descubrir de forma dinámica nuevos servicios: UDDI: Universal Description Directory Integration 66

SOAP Estructura de un mensaje SOAP El envoltorio no contiene datos de aplicación, solo empaqueta el contenido. La cabecera opcional puede contener información de control El cuerpo contiene los datos en XML Los datos adjuntos (attachments) pueden contener otros tipos de datos (binarios, uuencoded, etc.) Envoltorio SOAP más externo Cabecera SOAP Información adicional: enrutado, autorización, etc. Cuerpo SOAP Datos de aplicación Invocación respuesta RPC errores 67

SOAP Ejemplo simple Servicio de seguimiento de vuelos web Llamada con código de portador y número de vuelo: public Date getflightarrival(string carrier, int number) Retorna hora estimada de llegada: Arrival for AS 25 is Sat Jun 15 00:32:19 PDT 2002 http://www.flytecomm.com/cgi-bin/trackflight 68

SOAP Formato de la petición SOAP <SOAP-ENV:Envelope SOAP-ENV:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <getflightarrival> <op1 xsi:type="xsd:string">as</op1> <op2 xsi:type="xsd:int">25</op2> </getflightarrival> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 69

SOAP Formato de la respuesta SOAP <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <SOAP-ENV:Body> <getflightarrivalresponse SOAP-ENV:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"> <getflightarrivalresult xsi:type="xsd:datetime">2002-06-15t07:32:19.403z </getflightarrivalresult> </getflightarrivalresponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> XML Schema: Structures specifies the XML Schema definition language, which offers facilities for describing the structure and constraining the contents of XML 1.0 documents, including those which exploit the XML Namespace facility. 70

WSDL Anatomía de un documento WSDL Si se examina cada parte de un documento WSDL se encontrará: <definitions>. El elemento <definitions> contiene la definición de uno o más servicios. En la mayoría de los casos, un archivo WSDL define un servicio únicamente. Seguido de la etiqueta de definición se encontrarán declaraciones de algunos atributos: <message> y <porttype>, describe qué operaciones provee el servicio. <service>, agrupa un conjunto de ports relacionados. <binding>, endpoint, que describe detalles del protocolo a usar. <documentation>, cualquier elemento WSDL puede contener información del servicio para el usuario. Generando la descripción de servicio WSDL http://www.w3.org/tr/wsdl La mayoría de las herramientas incluyen una forma de generar WSDL a partir de un componente. incluyendo el Apache Jakarta Axis, WSTK de IBM y el.net Studio de Microsoft. 71

WSDL Ejemplo de WSDL (i) <?xml version="1.0" encoding="utf-8"?> <definitions name="flightservice" targetnamespace="http://defaultnamespace"> <message name="getflightarrival"> <part name="string_1" type="xsd:string"/> <part name="int_2" type="xsd:int"/> </message> <message name="getflightarrivalresponse"> <part name="result" type="xsd:datetime"/> </message> <porttype name="flightremote"> <operation name="getflightarrival"> <input message="tns:getflightarrival"/> <output message="tns:getflightarrivalresponse"/> </operation> </porttype> (continued...) 72

WSDL Ejemplo de WSDL (ii) <binding name="flightremotebinding" type="tns:flightremote"> <operation name="getflightarrival"> <input><soap:body encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://allflighttracking.com/wsdl"/> </input> <output><soap:body encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://allflighttracking.com/wsdl"/> </output> <soap:binding transport=http://schemas.xmlsoap.org/soap/http style="rpc"/> </binding> <service name="flight"> <port name="flightremoteport" binding="tns:flightremotebinding"> <soap:address location="http://localhost:8080/axis/..."/> </port> </service> </definitions> 73

WSDL Otro ejemplo de WSDL (i) Generate Binding Context 74

WSDL Otro ejemplo de WSDL (i) <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/eurocal/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/xmlschema" name="eurocal" targetnamespace="http://www.example.org/eurocal/"> <wsdl:message name="convertiraeurosrequest"> <wsdl:part name="codi" type="xsd:string"></wsdl:part> <wsdl:part name="moneda" type="xsd:double"></wsdl:part> </wsdl:message> <wsdl:message name="convertiraeurosresponse"> <wsdl:part name="convertiraeurosresponse" type="xsd:double"></wsdl:part> </wsdl:message> <wsdl:message name="convertireurosrequest"> <wsdl:part name="codi" type="xsd:string"></wsdl:part> <wsdl:part name="euros" type="xsd:double"></wsdl:part> </wsdl:message> <wsdl:message name="convertireurosresponse"> <wsdl:part name="convertireurosresponse" type="xsd:double"></wsdl:part> </wsdl:message> 75

WSDL Otro ejemplo de WSDL (ii) <wsdl:porttype name="eurocal"> <wsdl:operation name="convertiraeuros"> <wsdl:input message="tns:convertiraeurosrequest"></wsdl:input> <wsdl:output message="tns:convertiraeurosresponse"></wsdl:output> </wsdl:operation> <wsdl:operation name="convertireuros"> <wsdl:input message="tns:convertireurosrequest"></wsdl:input> <wsdl:output message="tns:convertireurosresponse"></wsdl:output> </wsdl:operation> </wsdl:porttype> 76

WSDL Otro ejemplo de WSDL (iii) <wsdl:binding name="eurocalsoap" type="tns:eurocal"> <soap:binding style="rpc transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="convertiraeuros"> <soap:operation soapaction="http://www.example.org/eurocal/convertiraeuros" /> <wsdl:input> <soap:body use="literal namespace="http://www.example.org/eurocal/" /> </wsdl:input> <wsdl:output> <soap:body use="literal namespace="http://www.example.org/eurocal/" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="convertireuros"> </wsdl:operation> </wsdl:binding> <wsdl:service name="eurocal"> <wsdl:port binding="tns:eurocalsoap" name="eurocalsoap"> <soap:address location="http://www.example.org/"/> </wsdl:port> </wsdl:service> </wsdl:definitions> 77

SOAP- UDDI Servicio de directorio UDDI UDDI (Universal Description Directory Integration) Servicio de directorios estandarizado Automaticamente registra y busca los servicios 7000 empresas registradas? Funcionalidad Registra y retorna descripciones WSDL en formato XML Hay algunas críticas que dicen que no hay forma automatizada de que los programas usen la información y que se requiere intervención humana para escribir el código... Llenará WSIF el hueco??? WSDL UDDI Registry WSDL Client SOAP Web service 78

Servicios web Indice Conceptos básicos SOAP Estructura de SOAP SOAP y WSDL SOAP UDDI Soporte SOAP para Java Interfaz dinámico de invocaciones Interfaz estático de invocaciones (Axis) Soporte SOAP para PHP Un ejemplo en SOAP La eurocalculadora en SOAP / Java XML-RPC 79

Soporte SOAP para Java Soporte SOAP para Java JAX: Java API for XML-based RPC Core technology for J2EE 1.4 JSR-109 define los descriptores para desarrollo de servicios web Con EJB 2.1 soporta directamente servicios web tipo beans con sesiones sin estado Funcionalidad JAX-RPC mapea SOAP/WSDL a RMI: Porting de WSDL a interfaces Remote de RMI (interface extending java.rmi.remote) Invocaciones WSDL mapeadas a invocaciones RMI Los métodos propagan la excepción java.rmi.remoteexception (Los fallos SOAP se convierten a RemoteExceptions) Soporta un subconjunto de RMI Solo soporta algunos tipos básicos - primitives and wrappers, bean-likes, String, Date, BigInteger, BigDecimal, etc. Others will use JAXB or pluggable serializers 80

Soporte SOAP para Java Tipos de invocaciones SOAP Estática: Dinámica: Precisa la generación de stubs derivados de la definición del servicio en WSDL Invocación del estilo: referenciaobjeto->nombremetodo(argumentos) No precisa generación de stubs Invocación del estilo: Call call = (Call) service.createcall(); // Construir invocación call.invoke(...); 81

Soporte SOAP para Java Invocación dinámica (DII) Funciona sin stubs estáticos: configura la información del servicio al vuelo : Un servicio javax.xml.rpc.service se crea instanciando la clase: javx.xml.rpc.servicefactory Una llamada se crea y se configura (endpoint, operation, parameters, return type, etc.) con la clase javax.xml.rpc. La llamada se ejecuta con: call.invoke( ) Adecuado para servicios simples 82

Soporte SOAP para Java Invocación dinámica (DII) import org.apache.axis.client.call; import org.apache.axis.client.service; import javax.xml.namespace.qname; public class TestClient { public static void main(string [] args) { try { String endpoint = "http://nagoya.apache.org:5049/axis/services/echo"; Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress( new java.net.url(endpoint) ); call.setoperationname(new QName("http://soapinterop.org/", "echostring")); String ret = (String) call.invoke( new Object[] { "Hello!" } ); System.out.println("Sent 'Hello!', got '" + ret + "'"); } catch (Exception e) { System.err.println(e.toString()); } } } 83

Soporte SOAP para Java Invocación estática Invocación de métodos con estilo RPC estático: referenciaobjeto->nombremetodo(argumentos) Proyecto Axis http://ws.apache.org/axis/java Successor to Apache SOAP (itself originally based on IBM SOAP4J) Basado en la generación automática de stubs a partir de WSDL Java2WSDL: para generar WSDL y stubs a partir de las clases Java que implementan el servicio WSDL2Java: para generar clases Java a partir de WSDL Más fácil de usar que JAX-RPC Y compatible con JAX-RPC 84

Soporte SOAP para Java Invocación estática Desarrollo Bottom Up: a partir de una clase Java se genera el servicio web y la especificacion WSDL. Desarrollo Top Down: a partir de la especificacion WSDL se generan las clases Java: Stub del cliente Skeleton del servidor 85

Soporte SOAP para Java Invocación estática: un ejemplo 1ª parte 2ª parte HTTP GET, PUT HTTP GET, PUT WWW server WWW server Servicio currency SOAP Servicio eurocal 3ª parte 86

Soporte SOAP para Java Invocación estática: un ejemplo Generación del stub del cliente 87

Soporte SOAP para Java Invocación estática: un ejemplo Generación del esqueleto del servidor 88

Soporte SOAP para Java Invocación estática: un ejemplo import javax.xml.rpc.serviceexception; import NET.webserviceX.www.Currency; import NET.webserviceX.www.CurrencyConvertorLocator; import NET.webserviceX.www.CurrencyConvertorSoap; public class EurocalSOAPImpl implements org.example.www.eurocal.eurocal_porttype{ CurrencyConvertorLocator service; CurrencyConvertorSoap stub; public EurocalSOAPImpl() { service = new CurrencyConvertorLocator(); try { stub = service.getcurrencyconvertorsoap(); } catch (ServiceException e) { e.printstacktrace(); } } 89

Soporte SOAP para Java Invocación estática: un ejemplo public class EurocalSOAPImpl implements org.example.www.eurocal.eurocal_porttype{ public double convertiraeuros(java.lang.string codi, double moneda) throws java.rmi.remoteexception { double rate = stub.conversionrate(currency.fromstring(codi), Currency.EUR); return (moneda*rate); } public double convertireuros(java.lang.string codi, double euros) throws java.rmi.remoteexception { double rate = stub.conversionrate(currency.eur, Currency.fromString(codi)); return (euros*rate); } } 90

Soporte SOAP para Java Soporte SOAP para Java: montaje estático Estructura Código de aplicación Stubs SOAP SOAP runtime HTTP RPC s Generados por Axis Mensajes XML Código de aplicación Stubs SOAP SOAP runtime HTTP 91

Servicios web Indice Conceptos básicos SOAP Estructura de SOAP SOAP y WSDL SOAP UDDI Soporte SOAP para Java Interfaz dinámico de invocaciones Interfaz estático de invocaciones (Axis) Soporte SOAP para PHP Un ejemplo en SOAP La eurocalculadora en SOAP / Java XML-RPC 92

Soporte SOAP para PHP Soporte SOAP para PHP Incluido a partir de PHP5 Obtención de referencias a servidores $client = new SoapClient("http://unhost.upv.es/php/eurocalc.wsdl"); Invocación remota estática $qdst = $client->convertiraeuros( $_POST[ euros"], $_POST[ codi"]); Creación de un servidor $server = new SoapServer("eurocalc.wsdl"); $server->setclass("serveieurocalculadora"); 93

Servicios web Indice Conceptos básicos SOAP Estructura de SOAP SOAP y WSDL SOAP UDDI Soporte SOAP para Java Interfaz dinámico de invocaciones Interfaz estático de invocaciones (Axis) Soporte SOAP para PHP Un ejemplo en SOAP La eurocalculadora en SOAP / Java XML-RPC 94

La Eurocalculadora en SOAP El formulario HTML 95

La Eurocalculadora en SOAP Estructura de la aplicación Cliente Servidor 1 Servidor 2 eurocalc.html HTML Formulario euroclient.php PHP Invocación SOAP eurocalc.wsdl interfaz WSDL EuroCalc.java JAVA o PHP Stubs SOAP ConvertirAEuros multiplicar x coef ConvertirEuros dividir / coef GetExchangeRates.wsdl interfaz WSDL getexchangerates getcurrencycodes convert? http://wavendon.dsdata.co.uk/axis/services/getexchangerates Proporciona cambios oficiales entre monedas 96

La Eurocalculadora en SOAP El cliente <?php... cabeza("eurocalculadora"); echo "<h1> Eurocalculadora </h1>"; $client = new SoapClient("http://unhost.upv.es/php/eurocalc.wsdl");... switch ( $_POST["conv"] ) { case 1:... $qdst = $client->convertiraeuros( $_POST[ euros"], $_POST[ codi"]);... break; case 2:... $qdst = $client->convertireuros( $_POST[ moneda"], $_POST[ codi"], );... break; }...?> Obtener referencia al Servidor 1 Invocación SOAP Invocación SOAP 97

La Eurocalculadora en SOAP El servidor1 en PHP (i) <?php class ServeiEuroCalculadora { function ConvertirEuros($euros, $codi) { $codeclient=new SoapClient( "http://wavendon.dsdata.co.uk/axis/services/getexchangerates?wsdl ); $rate=$codeclient->getexchangerate("eur",$codi); return $euros*$rate; } function ConvertirAEuros($moneda,$codi) { $codeclient=new SoapClient( "http://wavendon.dsdata.co.uk/axis/services/getexchangerates?wsdl"); $rate=$codeclient->getexchangerate($codi,"eur"); return $moneda*$rate; } } Obtener referencia al Servidor 2 Invocación SOAP Obtener referencia al Servidor 2 Invocación SOAP 98

La Eurocalculadora en SOAP El servidor1 en PHP (ii) <?php... $server = new SoapServer("eurocalc.wsdl"); $server->setclass("serveieurocalculadora"); if ( $_SERVER["REQUEST_METHOD"] == "POST") { $server->handle(); } else { echo "This SOAP server can handle following functions: "; $functions = $server->getfunctions(); foreach($functions as $func) { echo $func. "\n"; } }?> Crear Servidor 99

La Eurocalculadora en SOAP El servidor2 en Java (i) import uk.co.dsdata.ws.finance.forex.exchangeservice.*; public class EuroCalc { private GetExchangeRatesService exchangeratesservice; private GetExchangeRates exchangerates; public float ConvertirEuros(float euros, String codi) throws java.rmi.remoteexception { double rate = exchangerates.getexchangerate("eur", codi); return (float) (euros * rate); } public float ConvertirAEuros(float moneda, String codi) throws java.rmi.remoteexception { double rate = exchangerates.getexchangerate(codi, "EUR"); return (float) (moneda * rate); } 100

La Eurocalculadora en SOAP El servidor2 en Java (ii) public class EuroCalc {... public boolean CodiValid(String codi) throws java.rmi.remoteexception { CurrencyData[] array = exchangerates.getcurrencycodes(); boolean existeix = false; for (int i = 0; i < array.length; i++) { if (array[i].getcode().matches(codi)) { existeix = true; break;} } return existeix; } public EuroCalc() throws javax.xml.rpc.serviceexception { exchangeratesservice = new GetExchangeRatesServiceLocator(); exchangerates = exchangeratesservice.getgetexchangerates(); } }; Constructor Inicializar referencia 101

Servicios web Indice Conceptos básicos SOAP Estructura de SOAP SOAP y WSDL SOAP UDDI Soporte SOAP para Java Interfaz dinámico de invocaciones Interfaz estático de invocaciones (Axis) Soporte SOAP para PHP Un ejemplo en SOAP La eurocalculadora en SOAP / Java XML-RPC 102

La Eurocalculadora en XML-RPC La eurocalculadora como servicio web en XML-RPC Se va a adecuar el código de la eurocalculadora en PHP para poderla utilizar como servicio web en XML-RPC XML-RPC como servidor se incorpora a PHP a través de una herramienta GPL XML-RPC Class Server http://www.webkreator.com/download/xcs-1.2.zip 103

La Eurocalculadora en XML-RPC <?php... // --------------------------- Servicios Web ------------------------ Class Test { // Función de pruebas, que nos permite ver el código XML Intercambiado function Test($secret) { if ($secret!= 42 ) { trigger_error(secret does not match., E_USER_ERROR); } } function pts2euro($quant) { escribeip(); return $qorg /167; } function euro2pts($quant) { escribeip(); return $qorg *167; } } 104

XML-RPC Invocación de un servicio web en XML-RPC Para invocarlo habría que enviar, en principio, una solicitud XML y la respuesta es una página web cuyo código es XML. La función Test permite ejecutar el Servicio Web, sin tener que enviar la solictud en XML sino simplemente, una solicitud GET corriente: http://www.midominio.com/eurocal.php/test/42/_method=pts2euro&quant=3546 Respuesta del servicio web <xml version= 1.0 encoding= iso-8859-1?> <methodresponse> <params> <param> <value><string>21,234</string></value> </param> </params> <methodresponse> 105

XML-RPC Invocación de un servicio web desde otros servicios Se trata de una RPC pues se pueden invocar rutinas PHP remotas desde un servidor escrito en PHP. Esta es la potencia de este esquema. En PHP <? include_once(./class.remotetest.php ); RemoteClassRegistry::addURL( DEFAULT_URL, http://www.midominio.com/eurocal.php ); $test = new Test(42); print $test->pts2euro( 3546 );?> - En Perl #!/vol/perl-5.6/bin/perl Use RPC::XML::Client; my $client = RPC::XML::Client->new( http://www.midominio.com/eurocal.php ); my $response = $client->send_request( Test.pts2euro, 3546 ); print $response->value, \n ; 106

XML-RPC Petición XML de un servicio web Las anteriores invocaciones en PHP o Perl generarían automáticamente una petición XML del siguiente estilo: POST /ec UserAgent: SupaDupa XML-RPC Client/0.1 Host: unhost.upv.es Content-Type: text/xml Content-Legth: 201 <xml version= 1.0 encoding= iso-8859-1?> <methodcall> <methodname>test.pts2euro</methodname> <params> <param> <value><string>3546</string></value> </param> </params> <methodcall> 107

Enlaces Enlaces Web Services & Java home - http://java.sun.com/j2ee/webservices/index.html Java Web Services tutorial - http://java.sun.com/xml/docs.html#tutorials Apache Axis http://xml.apache.org/axis/index.html SOAP http://www.w3.org/tr/soap WSDL http://www.w3.org/tr/wsdl JAX-RPC home - http://java.sun.com/xml/jaxrpc/index.html Tutorials: http://www.sosnoski.com 108

XML namespaces [Definition:] An XML namespace is a collection of names, identified by a URI reference [RFC2396], which are used in XML documents as element types and attribute names. <termdef id="dt-dog" term="dog"> XML namespaces differ from the "namespaces" conventionally used in computing disciplines in that the XML version has internal structure and is not, mathematically speaking, a set. These issues are discussed in "A. The Internal Structure of XML Namespaces". 109

XML namespaces An example namespace declaration, which associates the namespace prefix edi with the namespace name http://ecommerce.org/schema: <x xmlns:edi='http://ecommerce.org/schema'> <!-- the "edi" prefix is bound to http://ecommerce.org/schema for the "x" element and contents --> </x> An example of a qualified name serving as an element type: <x xmlns:edi='http://ecommerce.org/schema'> <!-- the 'price' element's namespace is http://ecommerce.org/schema --> <edi:price units='euro'>32.18</edi:price> </x> 110