PDF de programación - 5.2 JAX-RPC. Caso de estudio: Apache Axis

Imágen de pdf 5.2 JAX-RPC. Caso de estudio: Apache Axis

5.2 JAX-RPC. Caso de estudio: Apache Axisgráfica de visualizaciones

Publicado el 13 de Febrero del 2019
603 visualizaciones desde el 13 de Febrero del 2019
347,8 KB
62 paginas
Creado hace 22a (18/04/2002)
5.2 JAX-RPC. Caso de estudio: Apache

Axis

Introducción (1)

n WSDL

n Lenguaje (aplicación XML) para especificar interfaces

remotos

n El compilador de WSDL permite generar los stubs y

skeletons para poder invocar e implementar servicios web

n JAX-RPC

n API de programación estándar en Java para implementar e

invocar operaciones de Servicios Web mediante el
paradigma de los RPCs

n La especificación todavía no está terminada

n Estas transparencias se basan en la versión 0.7 de la

especificación

n Trabajaremos con Apache Axis

n Implementación OpenSource y gratuita de JAX-RPC
n Estas transparencias se basan en la versión Beta 1 de Axis

Introducción (2)

n WSDL es un lenguaje complejo
n Afortunadamente, casi todas las APIs basadas en

RPCs (ej.: JAX-RPC) permiten
n Definir una interfaz remota en el propio lenguaje de

implementación

n Usar un compilador para generar el documento WSDL a

partir del interfaz remoto

n El documento WSDL generado es útil para que un cliente

(quizás escrito en un lenguaje distinto al del servidor) pueda
usar su compilador de WSDL para obtener el stub del
interfaz remoto

Introducción (3)

n Con JAXP-RPC ...

Interfaz Java

Compilador Java

Compilador Java2WSDL

Documento WSDL

Compilador WSDL2Java

Stubs, skeletons y tipos Java

Introducción (4)

n Modelos de implementación de servicios web
n Modelo basado en servlets (aplicación web J2EE)
n Modelo basado en EJB
n Modelo basado en J2SE

n Modelos de implementación de clientes

n Modelo basado en J2EE (aplicación web J2EE o EJB)
n Modelo basado en J2SE

n Estudiaremos la siguiente combinación

HTTP

Internet

HTTP

war

Aplicaciones web

Cliente J2SE

Servidor web J2EE

Introducción (5)

n Servidor (contenedor) de aplicaciones web J2EE

n J2EE incluye un API para implementar aplicaciones web en

Java

n API de servlets y JSP

n Una aplicación web puede incluir uno o varios servicios web

(o puede contener sólo servicios web)

n Cada aplicación web se empaqueta en un fichero war
n Un servidor de aplicaciones web puede tener varias

aplicaciones web instaladas

n Implementar un servicio web sólo consiste en hacer una

clase que implementa el interfaz remoto, y empaquetar ésta
y las clases generadas por el compilador de WSDL a Java
que requiere la implementación del servicio en el fichero
war

n Axis sólo implementa este modelo de programación de

servicios web

Introducción (y 6)

n ¿ Qué es Axis ?

n Un conjunto de librerías (ficheros jar) que se han de

instalar en el servidor de aplicaciones web

n Incluye

n Herramientas (ej.: compiladores Java2WSDL y WSDL2Java)
n Un servlet que

n Recibe las peticiones SOAP sobre HTTP que envían los clientes
n Invoca la operación correspondiente sobre el servicio web
n Devuelve una respuesta SOAP sobre HTTP con el resultado de la

operación

n Se puede instalar en cualquier servidor de aplicaciones web

J2EE

n En particular, usaremos Apache Tomcat

Ejemplo StockQuote

n Usaremos el ejemplo StockQuote para ilustrar JAX-RPC
n Paquetes es.udc.fbellas.corbaws.stockquote.{wsdl,

client}

n Servicio Web que ofrece una interfaz con una operación que a

partir de un conjunto de identificadores de valores bursátiles
devuelve sus cotizaciones

n Cada cotización incluye

n Su identificador
n Su valor
n El número de segundos de antigüedad que tiene el valor (el valor

real actual sería ligeramente distinto)

Cliente

standalone

HTTP

Internet

HTTP

Servidor de

aplicaciones web

StockQuoteProvider

es.udc.fbellas.corbaws.stockquote.wsdl.StockQuoteProvider

package es.udc.fbellas.corbaws.stockquote.wsdl;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface StockQuoteProvider extends Remote {

TradePrice[] getLastTradePrices(String[] tickerSymbols) throws

RemoteException, IncorrectTickerSymbolException;

}

es.udc.fbellas.corbaws.stockquote.wsdl.TradePrice (1)

package es.udc.fbellas.corbaws.stockquote.wsdl;

import java.io.Serializable;

public class TradePrice implements Serializable {

private String tickerSymbol;
private double price;
private int elapsedSeconds;

public String getTickerSymbol() {

return tickerSymbol;

}

public void setTickerSymbol(String tickerSymbol) {

this.tickerSymbol = tickerSymbol;

}

public double getPrice() {

return price;

}

es.udc.fbellas.corbaws.stockquote.wsdl.TradePrice (y 2)

public void setPrice(double price) {

this.price = price;

}

public int getElapsedSeconds() {

return elapsedSeconds;

}

public void setElapsedSeconds(int elapsedSeconds) {

this.elapsedSeconds = elapsedSeconds;

}

}

es.udc.fbellas.corbaws.stockquote.wsdl.IncorrectTickerSymbolException

public class IncorrectTickerSymbolException extends Exception {

private String incorrectTickerSymbol;

public IncorrectTickerSymbolException(

String incorrectTickerSymbol) {

this.incorrectTickerSymbol = incorrectTickerSymbol;

}

public String getIncorrectTickerSymbol() {

return incorrectTickerSymbol;

}

}

Visión global de WSDL

n Dejaremos momentáneamente la explicación de los

detalles de la definición del interfaz remoto
StockQuoteProvider y sus tipos asociados

n Una vez compilados los anteriores ficheros Java, se

puede obtener el documento WSDL

n Un documento WSDL consta de varias partes

n Definición de tipos de datos
n Definición de mensajes
n Definición de puertos
n Definición de bindings
n Definición de servicios

n Vamos a echar un vistazo al fichero generado

n Objetivo: comprender el formato general de un documento

WSDL

StockQuoteProvider.wsdl (1)

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions

targetNamespace="http://wsdl.stockquote.corbaws.fbellas.udc.es"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:intf="http://wsdl.stockquote.corbaws.fbellas.udc.es"
xmlns:impl="http://wsdl.stockquote.corbaws.fbellas.udc.es-impl"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>

<schema xmlns="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://wsdl.stockquote.corbaws.fbellas.udc.es">
<complexType name="ArrayOf_SOAP-ENC_string">

<complexContent>

<restriction base="SOAP-ENC:Array">

<attribute ref="SOAP-ENC:arrayType"

wsdl:arrayType="xsd:string[]"/>

</restriction>

</complexContent>

</complexType>
<element name="ArrayOf_SOAP-ENC_string" nillable="true"
type="intf:ArrayOf_SOAP-ENC_string"/>

StockQuoteProvider.wsdl (2)

<complexType name="TradePrice">

<sequence>

<element name="tickerSymbol" nillable="true" type="xsd:string"/>
<element name="price" type="xsd:double"/>
<element name="elapsedSeconds" type="xsd:int"/>

</sequence>

</complexType>
<complexType name="ArrayOfTradePrice">

<complexContent>

<restriction base="SOAP-ENC:Array">

<attribute ref="SOAP-ENC:arrayType"

wsdl:arrayType="intf:TradePrice[]"/>

</restriction>

</complexContent>

</complexType>
<element name="ArrayOfTradePrice" nillable="true"
type="intf:ArrayOfTradePrice"/>

</schema>

</types>

Definición de tipos de datos - Comentarios

n Es posible usar varios sistemas de tipos
n El uso de un esquema XML es el más habitual
n Cuando el protocolo que se usa es SOAP, también se pueden

usar tipos SOAP

n En el ejemplo se definen

n El tipo complejo ArrayOf_SOAP-ENC_string, que corresponde

al tipo Java String[]

n Los tipos complejos que representan vectores, se definen como una

especialización por restricción de SOAP-ENC:Array

n Los tipos complejos TradePrice y ArrayOfTradePrice, que

corresponden a los tipos Java TradePrice y TradePrice[]

n Los elementos ArrayOf_SOAP-ENC_string y

ArrayOfTradePrice

n El atributo nillable con valor true especifica que el

correspondiente elemento puede tomar el valor nil (null en
Java)

StockQuoteProvider.wsdl (3)

<wsdl:message name="getLastTradePricesResponse">

<wsdl:part name="return" type="intf:ArrayOfTradePrice"/>

</wsdl:message>
<wsdl:message name="IncorrectTickerSymbolException">

<wsdl:part name="incorrectTickerSymbol" type="SOAP-ENC:string"/>

</wsdl:message>
<wsdl:message name="getLastTradePricesRequest">

<wsdl:part name="in0" type="intf:ArrayOf_SOAP-ENC_string"/>

</wsdl:message>

<wsdl:portType name="StockQuoteProvider">

<wsdl:operation name="getLastTradePrices" parameterOrder="in0">

<wsdl:input message="intf:getLastTradePricesRequest"/>
<wsdl:output message="intf:getLastTradePricesResponse"/>
<wsdl:fault name="IncorrectTickerSymbolException"

message="intf:IncorrectTickerSymbolException"/>

</wsdl:operation>

</wsdl:portType>

Definición de mensajes y puertos – Comentarios (1)

n Definición de mensajes

n Especifica los mensajes que se pueden intercambiar clientes

y servidores

n Cada mensaje consta de “partes”, donde cada parte

especifica un parámetro del mensaje, un valor de retorno o
una excepción

n Definición de puertos

n Un puerto especifica un conjunto de operaciones
n Cada operación indica el mensaje de entrada (petición del
cliente al servicio), el de salida (respuesta del servicio si no
ocurre ninguna excepción) y los posibles mensajes fault
(excepciones) que puede devolver la operación

Definición de mensajes y puertos – Comentarios (y 2)

n Definición de puertos (cont)

n Tipos de parámetros (idem CORBA)

n In: parte que sólo aparece en un mensaje de entrada
n Out: parte que sólo aparece en un mensaje de salida
n Inout: parte que aparece en un mensaje de entrada y salida

n Valor de retorno

n Parte con name="return"

StockQuoteProvider.wsdl (4)

<wsdl:binding name="StockQuoteProviderSoapBinding"

type="intf:StockQuoteProvider">
<wsdlsoap:binding style="rpc"

transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="getLastTradePrices">

<wsdlsoap:operation soapAction=""/>
<wsdl:input>

<wsdlsoap:body use="encoded"

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://wsdl.stockquote.corbaws.fbellas.udc.es"/>

</wsdl:input>
<wsdl:o
  • Links de descarga
http://lwp-l.com/pdf15179

Comentarios de: 5.2 JAX-RPC. Caso de estudio: Apache Axis (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad