2. Marzo 2009 WebServices y Java [CMMi Project] 2
Objetivos
Conocer el modelo SOA y sus
ventajas
Mostrar los lenguajes y protocolos
implicados en la arquitectura SOA
Mostrar una panorámica de las
distintas aproximaciones a SOA
disponibles en Java
Demostrar la creación y consumo
de Servicios Web existentes
3. Marzo 2009 WebServices y Java [CMMi Project] 3
Contenidos
I. Fundamentos de XML
II. Tratamiento de XML en Java
III. Fundamentos de Web Services y
consumo desde Java
IV. Web Services con Apache AXIS
V. Autenticación en Web Services
VI. Transacciones en Web Services
VII. Caso Práctico
4. Marzo 2009 WebServices y Java [CMMi Project] 4
Contenidos
I. Fundamentos de XML
II. Tratamiento de XML en Java
III. Fundamentos de Web Services y
consumo desde Java
IV. Web Services con Apache AXIS
V. Autenticación en Web Services
VI. Transacciones en Web Services
VII. Caso Práctico
5. Marzo 2009 1. Fundamentos de XML 5
1. Introducción a XML
eXtensible Markup Language
Metalenguaje extensible de etiquetas
desarrollado por el W3C
Simplificación y adaptación del SGML
Se propone como un estándar para el
intercambio de información estructurada
entre diferentes plataformas
Permite la compatibilidad entre sistemas
para compartir la información de una
manera segura, fiable y fácil
6. Marzo 2009 1. Fundamentos de XML 6
1. Introducción a XML
Similar a HTML
Etiquetas o “tags”
Apertura y cierre
<etiqueta> </etiqueta>
Autocerradas <etiqueta/>
Pero más estricto
Una etiqueta engloba a todas
Todas las etiquetas cerradas
No mezclar aperturas y cierres
Válido: <a><b></b></a>
Inválido: <a><b></a></b>
7. Marzo 2009 1. Fundamentos de XML 7
2. Origen de XML
Años 70: IBM diseña GML para almacenar
grandes cantidades de información
1986: Normalizado por la ISO SGML
Emplea gramáticas específicas definidas (DTD)
1989: Nace HTML en el marco de SGML
Poco exigente en cuanto a estructura
1998: XML v1.0
revisado 4 veces (última en 2006)
2004: XML v1.1 revisado en 2006
8. Marzo 2009 1. Fundamentos de XML 8
2. Origen de XML
Subconjunto del SGML que permite:
Mezclar elementos de diferentes lenguajes. Es
decir que los lenguajes sean extensibles.
Crear analizadores simples, sin ninguna lógica
especial para cada lenguaje.
Que no se acepte nunca un documento con
errores de sintaxis.
XML está orientado a hacer las cosas más
sencillas para los programas automáticos
que necesiten interpretar el documento.
9. Marzo 2009 1. Fundamentos de XML 9
3. Estructura de documentos XML
Información estructurada
Etiquetas o tags <etiqueta>
Organizada en forma de árbol
Un único nodo raíz
Elementos
<elemento>…</elemento>
<elemento/>
Atributos
<elemento atributo1=“valor1”
atributo2=“valor2” …>
10. 10
3. Estructura de documentos XML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Raiz_Mensaje>
<Mensaje>
<Remitente>
<Nombre>Nombre del remitente</Nombre>
<Mail> Correo del remitente </Mail>
</Remitente>
<Destinatario>
<Nombre>Nombre del destinatario</Nombre>
<Mail>Correo del destinatario</Mail>
</Destinatario>
<Texto>
<Asunto> ... </Asunto>
<Parrafo> ... </Parrafo>
</Texto>
</Mensaje>
</Raiz_Mensaje>
11. 11
3. Estructura de documentos XML
Raiz_Mensaje
Mensaje
Remitente Destinatario Texto
Nombre Mail Nombre Mail Asunto Parrafo
12. Marzo 2009 1. Fundamentos de XML 12
3. Estructura de documentos XML
Documentos bien formados I
Han de tener una estructura estrictamente
jerárquica.
Deben tener un único elemento raíz que
contenga a todos los demás.
Los valores atributos siempre deben estar
entre comillas simples o dobles.
Sensible a mayúsculas y minúsculas.
Elementos delimitados por una etiqueta inicial
y otra final con el mismo nombre.
Elementos vacíos autocerrados con /
13. Marzo 2009 1. Fundamentos de XML 13
3. Estructura de documentos XML
Documentos bien formados II
Prólogo (opcional)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE Nodo_Raiz SYSTEM "Estructura.dtd">
Cuerpo (obligatorio)
Elementos y Atributos
CDATA
<![CDATA[ contenido no procesado ]]>
Comentarios
<!-- comentario XML -->
14. Marzo 2009 1. Fundamentos de XML 14
4. Validación de documentos
Un documento "bien formado" solo se
refiere a su estructura sintáctica
A veces es necesario
Especificar una relación entre los elementos
del documento
Verificar la corrección de los datos
Verificar la integridad de los datos
Entendimiento compartido
Nuevos lenguajes de marcado, para
aplicaciones específicas
15. Marzo 2009 1. Fundamentos de XML 15
4. Validación de documentos
Se comprueba:
Elementos o atributos declarados en el
esquema.
Estructura jerárquica de elementos y atributos.
Orden de los elementos.
Valores de atributos y elementos.
Unicidad de valores.
Se especifica en un documento externo
(documentos de definición)
DTD y XSD
16. Marzo 2009 1. Fundamentos de XML 16
4. Validación de documentos
DTD (Document Type Definition)
Define los tipos de elementos, atributos
y entidades permitidas
Un documento es "válido" si cumple las
reglas de un DTD determinada
Puede ser un fichero externo o definirse
dentro del propio documento XML
17. Marzo 2009 1. Fundamentos de XML 17
4. Validación de documentos
DTD (Document Type Definition)
<!ELEMENT Raiz_Mensaje (Mensaje)>
<!ELEMENT Mensaje (Remitente, Destinatario,
Texto)>
<!ELEMENT Remitente (Nombre, Mail)>
<!ELEMENT Destinatario (Nombre, Mail)>
<!ELEMENT Texto (Asunto, Parrafo)>
<!ELEMENT Nombre (#PCDATA)>
<!ELEMENT Mail (#PCDATA)>
<!ELEMENT Asunto (#PCDATA)>
<!ELEMENT Parrafo (#PCDATA)>
18. Marzo 2009 1. Fundamentos de XML 18
4. Validación de documentos
DTD (Document Type Definition)
<!ELEMENT>
EMPTY (sin contenido)
ANY (en desuso)
#PCDATA
Modificadores (|, ?, *, +)
<!ATTLIST>
<!ATTLIST Nodo atributo CDATA #REQUIRED>
CDATA (texto)
NMTOKEN ( a A 1 . : - _ )
ID, IDREF
#REQUIRED, #IMPLIED
19. Marzo 2009 1. Fundamentos de XML 19
4. Validación de documentos
DTD (Document Type Definition)
<!ELEMENT Raiz_Mensaje (Mensaje*)>
<!ELEMENT Mensaje (Remitente, Destinatario)>
<!ELEMENT Remitente (Nombre, Mail)>
<!ELEMENT Destinatario (Nombre, Mail)>
<!ELEMENT Nombre (#PCDATA)>
<!ELEMENT Mail (#PCDATA)>
<!ATTLIST Mensaje Asunto CDATA #IMPLIED
Parrafo CDATA #REQUIRED>
20. Marzo 2009 1. Fundamentos de XML 20
4. Validación de documentos
Raiz_Mensaje
Mensaje
Remitente Destinatario
Nombre Mail Nombre Mail
Asunto Parrafo
21. 21
4. Validación de documentos
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Raiz_Mensaje>
<Mensaje asunto="…" parrafo="…">
<Remitente>
<Nombre>Nombre del remitente</Nombre>
<Mail> Correo del remitente </Mail>
</Remitente>
<Destinatario>
<Nombre>Nombre del destinatario</Nombre>
<Mail>Correo del destinatario</Mail>
</Destinatario>
</Mensaje>
</Raiz_Mensaje>
22. Marzo 2009 1. Fundamentos de XML 22
4. Validación de documentos
DTD (Document Type Definition)
Limitaciones:
No existe jerarquía de nombres
No existen tipos de datos
Poco flexible a elementos mixtos
No soporta nuevas ampliaciones de XML
23. Marzo 2009 1. Fundamentos de XML 23
4. Validación de documentos
XML Schemas (XSD)
Evolución de DTD descrita por W3C
Más complejo y más potente
Sintaxis XML
Nodos y tipos (primitivos y derivados)
Soporta la extensión del documento
Se puede utilizar para transformar el
documento en una jerarquía de objetos
Utiliza espacios de nombres
(namespaces)
24. Marzo 2009 1. Fundamentos de XML 24
4. Validación de documentos
XML Schemas (XSD)
<xsd:element>
<xsd:attribute>
<xsd:sequence>
<xsd:choice>
<xsd:all>
<xsd:complexType>
…
25. Marzo 2009 1. Fundamentos de XML 25
4. Validación de documentos
XML Schemas (XSD)
<xsd:element
name=“nombre_nodo”
type=“tipo_dato”
default=“valor por defecto”
fixed=“valor fijo”
minOccurs=“cardinalidad mínima”
maxOccurs=“cardinalidad máxima”>
26. Marzo 2009 1. Fundamentos de XML 26
4. Validación de documentos
XML Schemas (XSD)
<xsd:attribute
name=“nombre_atributo”
type=“tipo_dato”
use=“optional o mandatory”
fixed=“valor fijo” >
<xsd:complexType
mixed=“true o false”>
27. Marzo 2009 1. Fundamentos de XML 27
4. Validación de documentos
XML Schemas (XSD)
Tipos Primitivos:
string
boolean
decimal
float
double
dateTime
date
time
…
28. Marzo 2009 1. Fundamentos de XML 28
4. Validación de documentos
XML Schemas (XSD)
Tipos Derivados:
integer (decimal)
long (integer)
normalizedString (string)
token (normalizedString)
Name (token)
ID (Name)
IDREF (Name)
ENTITY (Name)
…
29. Marzo 2009 1. Fundamentos de XML 29
4. Validación de documentos
XML Schemas (XSD)
<xsd:element name="Cliente">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FechaNac"
type="xsd:date" />
<xsd:element name="Direccion"
type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
30. Marzo 2009 1. Fundamentos de XML 30
4. Validación de documentos
XML Schemas (XSD)
<xsd:complexType name="AddressType">
<xsd:sequence>
<xsd:element name="Line1"
type="xsd:string"/>
<xsd:element name="Line2"
type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
31. Marzo 2009 1. Fundamentos de XML 31
4. Validación de documentos
XML Schemas (XSD)
Espacios de Nombres
Definición de tipos para reutilización
Estructurar los esquemas
Equivalente a los paquetes Java
Espacios de Nombres W3C:
xmlns
http://www.w3.org/2001/XMLSchema
http://www.w3.org/2001/XMLSchema-instance
32. Marzo 2009 1. Fundamentos de XML 32
4. Validación de documentos
XML Schemas (XSD)
<xsd:schema
targetNamespace=“espacio”
elementFormDefault=
“qualified|unqualified”
xmlns:xsd=“http://www.w3.org/...”
xmlns:xxx=“espacio xxx”>
<xsd:import
schemaLocation=“fichero.xsd”
namespace=“espacio xxx” />
33. Marzo 2009 1. Fundamentos de XML 33
4. Validación de documentos
XML Schemas (XSD)
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:cmn="CommonTypes" elementFormDefault="qualified"
targetNamespace="CustomerTypes" >
<xs:import namespace="CommonTypes"
schemaLocation="CommonTypes.xsd" />
<xs:complexType name="CustomerType">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
< xs:element name="DeliveryAddress"
type="cmn:AddressType" />
< xs:element name="BillingAddress"
type="cmn:AddressType" />
</xs:sequence>
</xs:complexType>
</xs:schema>
34. Marzo 2009 1. Fundamentos de XML 34
4. Validación de documentos
XML Schemas (XSD)
Formato cualificado
Exige utilizar el espacio de nombres en
todos los nodos
Formato no cualificado
Sólo exige namespace para el nodo raíz
Y para los elementos definidos en el
mismo xsd del nodo raíz
El resto no utiliza namespace
36. Marzo 2009 1. Fundamentos de XML 36
5. Estilos en XML
XSL (eXtensible Stylesheet Language)
Familia de lenguajes basados en el estándar
XML
Describir cómo la información de un
documento
debe ser transformada
o formateada
Para su presentación en un medio
<xsl:stylesheet version="1.0" xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform">
37. Marzo 2009 1. Fundamentos de XML 37
5. Estilos en XML
XSL (eXtensible Stylesheet
Language)
<xsl:template match=“XPath” >
<xsl:for-each select=“XPath” >
<xsl:if test=“condición” >
<xsl:value-of select=“nodo” />
<xsl:output method=“text/xml/html”
indent=“yes/no”>
38. Marzo 2009 1. Fundamentos de XML 38
5. Estilos en XML
XPath
Lenguaje de consulta sobre XML
Formato UNIX con filtrado
Expresión Descripción
nodo Selecciona todos los hijos del nodo indicado
/ Selecciona el nodo raíz
// Selecciona todos los nodos a partir del actual
. Selecciona el nodo actual
.. Selecciona el nodo padre del actual
@ Selecciona atributos
* Wildcard
39. Marzo 2009 1. Fundamentos de XML 39
5. Estilos en XML
Predicados en XPath
[nodo='valor']
[@atributo]
= != < >
Función Descripción
last() Selecciona el último elemento hijo
first() Selecciona el primer elemento hijo
position() Permite filtrar por posición del nodo
comment() Selecciona un nodo comentario
text() Selecciona texto dentro de un nodo
processing-
instruction()
Selecciona una instrucción CDATA
41. Marzo 2009 1. Fundamentos de XML 41
6. Transformación de documentos
XSLT (XSL Transformations)
Parte más importante de XSL
Desarrollado por el W3C
Transforma un documento XML en otro
Añadir y eliminar elementos y atributos
Redistribuir y ordenar elementos
Emplea XPath para navegar por el documento
<xsl:transform version="1.0" xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform">
42. Marzo 2009 1. Fundamentos de XML 42
6. Transformación de documentos
XSLT (XSL Transformations)
El modelo de procesamiento incluye:
Uno o más documentos origen XML
Uno o más módulos de estilo XSLT
Un procesador de plantillas XSLT
Uno o más documentos resultado
43. Marzo 2009 1. Fundamentos de XML 43
6. Transformación de documentos
XSLT (XSL Transformations)
46. 46
6. Transformación de documentos
XML Entrada
<persons>
<person username="JS1">
<name>John</name>
<family-name>Smith</family-name>
</person>
<person username="MI1">
<name>Morka</name>
<family-name>Ismincius</family-name>
</person>
</persons>
XML Salida
<root>
<name username="JS1">John</name>
<name username="MI1">Morka</name>
</root>
47. Marzo 2009 WebServices y Java [CMMi Project] 47
Contenidos
I. Fundamentos de XML
II. Tratamiento de XML en Java
III. Fundamentos de Web Services y
consumo desde Java
IV. Web Services con Apache AXIS
V. Autenticación en Web Services
VI. Transacciones en Web Services
VII. Caso Práctico
48. Marzo 2009 2. Tratamiento de XML en Java 48
1. Introducción a JAX
Java API for XML
Librería de Sun Microsystems
compuesta de varios APIs para el
tratamiento de XML
JAXP para procesamiento
JAXM para mensajería
JAXR para trabajo con registros
JAX-RPC para invocación remota
JAXB para binding
49. Marzo 2009 2. Tratamiento de XML en Java 49
1. Introducción a JAX
Estos APIs se implementan en
varios paquetes de software
Xerces (SAX y DOM)
Crimson XML (SAX y DOM)
Xalan (XSLT y XPath)
Sparta XML (SAX, DOM y XPath)
50. Marzo 2009 2. Tratamiento de XML en Java 50
2. Procesamiento de XML
XML implica datos portables
Java implica código portable
J2EE une estas ventajas
JAXP para procesar XML desde Java
SAX para parsear XML
DOM para construir árboles en memoria
XSLT para presentar y transformar datos
Soporte para espacios de nombres
Trabajo con múltiples documentos XML
51. Marzo 2009 2. Tratamiento de XML en Java 51
2. Procesamiento de XML
JAXP (Java API for XML Processing)
Permite validar y parsear XML
Provee 3 interfaces básicas de creación
y procesamiento de XML
DOM
SAX
StAX
Interfaz para XSTL
Paquete:
javax.xml.parsers
52. Marzo 2009 2. Tratamiento de XML en Java 52
2. Procesamiento de XML
JAXP (Java API for XML Processing)
javax.xml.parsers.DocumentBuilderFactory
Clase de entrada para procesar XML con DOM
javax.xml.parsers.DocumentBuilder
Se construye a través del factory
Método newDocumentBuilder()
Contiene métodos de parse para XML
javax.xml.parsers.SAXParserFactory
Clase de entrada para procesar XML con SAX
javax.xml.parsers.SAXParser
Se construye a través del factory
Método newSAXParser()
Contiene métodos de parse para XML
53. Marzo 2009 2. Tratamiento de XML en Java 53
2. Procesamiento de XML
DOM (Document Object Model)
Modelo independiente de lenguaje para
describir documentos HTML y XML
Propuesto por el W3C para acabar con la
guerra de los navegadores
Adoptado por todos los desarrolladores de
navegadores “excepto” Microsoft
Incluye un API para consultar y manipular
documentos
Paquete:
org.w3c.dom
54. Marzo 2009 2. Tratamiento de XML en Java 54
2. Procesamiento de XML
DOM (Document Object Model)
Simplifica el mapeo de la estructura de XML
Más práctico con documentos pequeños
(<20MB)
Muchos o todos los documentos se deben
parsear
Permite transformar documentos de manera
sencilla
55. Marzo 2009 2. Tratamiento de XML en Java 55
2. Procesamiento de XML
DOM (Document Object Model)
Fácil acceder repetidamente al
documento o de modo no secuencial
Define cómo se relacionan objetos y
elementos de un documento en el
navegador
Permite cualquier lenguaje de
desarrollo de páginas Web
JavaScript
window, document, body, div, p, …
56. Marzo 2009 2. Tratamiento de XML en Java 56
2. Procesamiento de XML
Jerarquía de Objetos DOM
57. Marzo 2009 2. Tratamiento de XML en Java 57
2. Procesamiento de XML
DOM Nivel 1
Publicado en 1998 por la W3C
Provee un modelo completo para HTML y XML
DOM Nivel 2
Publicado a finales de 2000
Añade funciones como getElementById()
Añade soporte para espacios de nombres
DOM Nivel 3
Publicado en 2004
Añade soporte para XPath y eventos de teclado
Añade interfaz de serialización de XML
58. Marzo 2009 2. Tratamiento de XML en Java 58
2. Procesamiento de XML
DOM Parser
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder =
factory.newDocumentBuilder();
Document document = builder.parse(new
File(“text.xml”));
Element root =
document.getDocumentElement();
59. Marzo 2009 2. Tratamiento de XML en Java 59
2. Procesamiento de XML
DOM Parser
getDocumentElement()
getElementsByTagName(String)
getChildNodes():NodeList
getParentNode()
getFirstChild()
getLastChild()
getPreviousSibling()
getAttributes():NamedNodeMap
getNodeName()
getNodeValue()
…
60. Marzo 2009 2. Tratamiento de XML en Java 60
2. Procesamiento de XML
DOM Parser
appendChild(Node)
cloneNode()
insertBefore(Node, Node)
removeChild(Node)
replaceChild(Node, Node)
setNodeValue()
createCDATASection()
importNode(Node, bool)
…
61. Marzo 2009 2. Tratamiento de XML en Java 61
2. Procesamiento de XML
DOM Scripting
Acceso programático a DOM
JavaScript
Originado a partir de DHTML
Utiliza JavaScript, CSS y HTML
Suele ser específico para cada navegador
Suele requerir duplicación de código
Solo disponible en Web
Utiliza etiquetas no estandarizadas
62. Marzo 2009 2. Tratamiento de XML en Java 62
2. Procesamiento de XML
DOM Scripting
Utiliza un lenguaje de scripting y
etiquetas válidas (HTML, XHTML,
XML,...)
Puede utilizarse con cualquier tipo de
documento válido
Puede utilizarse con cualquier lenguaje
de programación o scripting
Es independiente del navegador
63. Marzo 2009 2. Tratamiento de XML en Java 63
2. Procesamiento de XML
JavaScript
Desarrollado en 1996 para Netscape
Lenguaje DOM Nivel 0
Solo admite elementos HTML concretos
Ampliado en 1997
Intermediate DOM
Soporte para CSS
Soporte para capas (layers)
Abandonado por Netscape
65. Marzo 2009 2. Tratamiento de XML en Java 65
2. Procesamiento de XML
JDOM (Java DOM)
DOM para XML diseñado para Java
Integrado con DOM y SAX
Soporta XPath y XSLT
Paquetes
org.jdom
org.jdom.adapters
org.jdom.filter
org.jdom.input
org.jdom.output
org.jdom.transform
org.jdom.xpath
66. Marzo 2009 2. Tratamiento de XML en Java 66
2. Procesamiento de XML
Clases JDOM
Document
Element
Attribute
CDATA
Namespace
Text
XercesDOMAdapter
XPath
XmlTransformer
…
67. Marzo 2009 2. Tratamiento de XML en Java 67
2. Procesamiento de XML
JDOM (Java DOM)
Element root = new Element("shop");
root.setAttribute("name", "shop for geeks");
root.setAttribute("location", "Tokyo, Japan");
Element item1 = new Element("computer");
item1.setAttribute("name", "iBook");
item1.setAttribute("price", "1200$");
root.addContent(item1);
XMLOutputter outputter = new XMLOutputter();
outputter.output(new Document(root),
new FileOutputStream ("foo2.xml"));
69. Marzo 2009 2. Tratamiento de XML en Java 69
2. Procesamiento de XML
SAX (Simple API for XML)
API de XML basada en eventos
Los eventos de parseo se reportan
directamente a la aplicación
Métodos de respuesta permiten
manejar los componentes del
documento
Paquete:
org.xml.sax
70. Marzo 2009 2. Tratamiento de XML en Java 70
2. Procesamiento de XML
SAX (Simple API for XML)
Permite buscar etiquetas concretas de
manera rápida
Trabaja bien con documentos grandes
Es más rápido que DOM
Pero no soporta la transformación de
documentos tan bien como DOM
71. Marzo 2009 2. Tratamiento de XML en Java 71
2. Procesamiento de XML
SAX (Simple API for XML)
SAXParserFactory factory =
SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new XMLParser();
saxParser.parse( new File(argv[0]), handler );
XMLParser debe extender
org.xml.sax.helpers.DefaultHandler que define
métodos para responder a los eventos
72. Marzo 2009 2. Tratamiento de XML en Java 72
2. Procesamiento de XML
SAX (Simple API for XML)
org.xml.sax.helpers.DefaultHandler
startElement() throws SAXException
String uri
String localName
String qualifiedName
Attributes attributes
endElement() throws SAXException
String uri
String localName
String qualifiedName
73. Marzo 2009 2. Tratamiento de XML en Java 73
2. Procesamiento de XML
SAX (Simple API for XML)
org.xml.sax.helpers.DefaultHandler
characters()
startDocument()
endDocument()
processingInstruction()
error()
warning()
…
75. Marzo 2009 2. Tratamiento de XML en Java 75
3. XML Binding
JAXB (Java Architecture for XML Binding)
Entorno de binding en tiempo de ejecución
para aplicaciones cliente (GlassFish)
Incluye capacidades de marshalling,
unmarshalling y validación
Sun: “Proporciona una manera de procesar
contenido XML a través de objetos Java
enlazando su esquema XML con la
representación Java”
Paquete Java:
javax.xml.binding
76. Marzo 2009 2. Tratamiento de XML en Java 76
3. XML Binding
¿Qué es binding?
Literalmente vincular/vinculación
Vamos a vincular un esquema XML (DTD/XSD)
con objetos Java
¿Qué es marshaling?
Transformar un objeto de memoria a un
formato adecuado para ser transmitido
Serializar
¿Qué es unmarshaling?
Operación inversa al marshaling
Deserializar
77. Marzo 2009 2. Tratamiento de XML en Java 77
3. XML Binding
JAXB
78. Marzo 2009 2. Tratamiento de XML en Java 78
3. XML Binding
JAXB. Ventajas
Simplifica el acceso a XML
No requiere parser
Permite acceso no secuencial a nodos
Genera objetos Java directamente usables
Uso eficiente de memoria (respecto a DOM)
Flexible
Permite varios orígenes de datos XML
Permite marshaling a distintas salidas
Permite acceso a datos sin deserializar
Permite validar los datos contra un esquema
Soporta binding personalizado
79. Marzo 2009 2. Tratamiento de XML en Java 79
3. XML Binding
Caso 1: Unmarshaling
Acceder y mostrar información de un
documento XML (books.xml)
En SAX hay que:
Crear el parser SAX
Crear un manejador de contenido
Procesar los eventos de SAX
En JAXB
Vinculamos el esquema XML
Deserializamos el documento en objetos Java
accesibles desde nuestro programa
80. Marzo 2009 2. Tratamiento de XML en Java 80
3. XML Binding
Caso 1: Unmarshaling
Acceder y mostrar información de un
documento XML (books.xml)
En SAX hay que:
Crear el parser SAX
Crear un manejador de contenido
Procesar los eventos de SAX
En JAXB
Vinculamos el esquema XML
Deserializamos el documento en objetos Java
accesibles desde nuestro programa
Collection
Books
Books
bookType
authorName
descriptionisbn name priceauthors
81. Marzo 2009 2. Tratamiento de XML en Java 81
3. XML Binding
Vincular el esquema XML
Utilizaremos esquemas XSD
Son más ricos que los DTD
El proceso de binding implica generar
clases que representen el esquema
Lo realiza un “compilador de binding”
xjc.bat –p <paquete> -d <directorio>
Genera un conjunto de interfaces Java
Y unas implementaciones básicas en el
directorio /impl
82. Marzo 2009 2. Tratamiento de XML en Java 82
3. XML Binding
Vincular el esquema XML
Utilizaremos esquemas XSD
Son más ricos que los DTD
El proceso de binding implica generar
clases que representen el esquema
Lo realiza un “compilador de binding”
xjc.bat –p <paquete> -d <directorio>
Genera un conjunto de interfaces Java
Y unas implementaciones básicas en el
directorio /impl
xjc.bat -p test.jaxb books.xsd -d directoriojavac test/jaxb/*.java test/jaxb/impl/*.java
CollectionType.java CollectionTypeImpl.java
Collection.java CollectionImpl.java
BookType.java BookTypeImpl.java
ObjectFactory.java ObjectFactoryImpl.java
83. Marzo 2009 2. Tratamiento de XML en Java 83
3. XML Binding
Deserializar el documento
El proceso de unmarshaling implica crear un
árbol de objetos de contenido
Que representen la estructura y el contenido
del documento
De manera más eficiente que DOM
Objeto javax.xml.bind.JAXBContext
Indicarle los paquetes que contienen las
interfaces generadas
Objeto javax.xml.bind.Unmarshaller
Obtenido a partir del JAXBContext
84. Marzo 2009 2. Tratamiento de XML en Java 84
3. XML Binding
Deserializar el documento
El proceso de unmarshaling implica crear un
árbol de objetos de contenido
Que representen la estructura y el contenido
del documento
De manera más eficiente que DOM
Objeto javax.xml.bind.JAXBContext
Indicarle los paquetes que contienen las
interfaces generadas
Objeto javax.xml.bind.Unmarshaller
Obtenido a partir del JAXBContext
jc = JAXBContext.newInstance("test.jaxb");
unmarshaller = jc.createUnmarshaller();
85. Marzo 2009 2. Tratamiento de XML en Java 85
3. XML Binding
Deserializar el documento
El objeto javax.xml.bind.Unmarshaller contiene
un método unmarshal() al que hay que indicar
el documento XML a deserializar
Devuelve test.jaxb.Collection
Los getter de las interfaces permiten acceder
al contenido
También se puede modificar ese contenido a
través de los setter
Existen tanto para elementos como para
atributos
86. Marzo 2009 2. Tratamiento de XML en Java 86
3. XML Binding
Deserializar el documento
El objeto javax.xml.bind.Unmarshaller contiene
un método unmarshal() al que hay que indicar
el documento XML a deserializar
Devuelve test.jaxb.Collection
Los getter de las interfaces permiten acceder
al contenido
También se puede modificar ese contenido a
través de los setter
Existen tanto para elementos como para
atributos
Collection collection = (Collection)
unmarshaller.unmarshal(
new File( "books.xml"));
CollectionType.BooksType booksType =
collection.getBooks();
List bookList = booksType.getBook();
87. Marzo 2009 2. Tratamiento de XML en Java 87
3. XML Binding
Validar los datos
JAXB permite validar los datos de un
documento contra su esquema XSD
durante la operación de unmarshaling
Si el documento no es conforme al
esquema se produce un error
La ejecución puede pararse o continuar
a pesar de estos errores
unmarshaller.setValidating(true);
88. Marzo 2009 2. Tratamiento de XML en Java 88
3. XML Binding
Caso 2: Marshaling
Para crear la estructura de árbol en memoria
con DOM hay que:
Crear un objeto Document
Añadirle los nodos hijo necesarios
Añadirle los atributos a los nodos
DOM exige conocer y entender la estructura
del documento XML
JAXB permite acceder a objetos de contenido
obtenidos por unmarshaling
Pero no obliga a navegar por un árbol
89. Marzo 2009 2. Tratamiento de XML en Java 89
3. XML Binding
Caso 2: Marshaling
Hay que vincular el esquema del mismo
modo que en el ejemplo anterior
El esquema representará el documento
a construir
Se debe crear un “árbol de contenidos”
Este árbol es el que se va a serializar
hacia el documento XML
90. Marzo 2009 2. Tratamiento de XML en Java 90
3. XML Binding
Crear un árbol de contenido
Objetos que se van a volcar al XML
Clase ObjectFactory generada tras el
binding del esquema
Contiene los métodos necesarios para
crear los objetos del árbol
Métodos setter de cada objeto para añadir
información al árbol
91. Marzo 2009 2. Tratamiento de XML en Java 91
3. XML Binding
Crear un árbol de contenido
Objetos que se van a volcar al XML
Clase ObjectFactory generada tras el
binding del esquema
Contiene los métodos necesarios para
crear los objetos del árbol
Métodos setter de cada objeto para añadir
información al árbol
ObjectFactory objFactory = new ObjectFactory();
Collection collection = (Collection)
objFactory.createCollection();
Collection.BooksType booksType =
objFactory. createCollectionTypeBooksType();
BookType book = objFactory.createBookType();
92. Marzo 2009 2. Tratamiento de XML en Java 92
3. XML Binding
Serializar el árbol de contenido
Crear un objeto de contexto
JAXBContext indicando el namespace
Paquete que contiene las clases
Crear un Marshaller a partir del objeto
de contexto
Método setProperty() para indicar
propiedades
Método marshal() vuelca el árbol de
contenidos a fichero XML
93. Marzo 2009 2. Tratamiento de XML en Java 93
3. XML Binding
Serializar el árbol de contenido
Crear un objeto de contexto
JAXBContext indicando el namespace
Paquete que contiene las clases
Crear un Marshaller a partir del objeto
de contexto
Método setProperty() para indicar
propiedades
Método marshal() vuelca el árbol de
contenidos a fichero XML
jc = JAXBContext.newInstance("test.jaxb");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(
Marshaller.JAXB_FORMATTED_OUTPUT,
new Boolean(true));
marshaller.marshal(collection,
new FileOutputStream("fichero.xml"));
94. Marzo 2009 2. Tratamiento de XML en Java 94
3. XML Binding
Validar los datos
La validación no forma parte del
proceso de marshaling
Clase javax.xml.bind.Validator
creada a partir del contexto
Permite validar el árbol de contenido
No es necesario que el árbol sea válido
para realizar el marshaling
Validator v = jaxbContext.createValidator();
v.validate(collection);
95. Marzo 2009 WebServices y Java [CMMi Project] 95
Contenidos
I. Fundamentos de XML
II. Tratamiento de XML en Java
III. Fundamentos de Web Services y
consumo desde Java
IV. Web Services con Apache AXIS
V. Autenticación en Web Services
VI. Transacciones en Web Services
VII. Caso Práctico
96. Marzo 2009 3. Fundamentos de Web Services 96
1. Introducción a los Servicios Web
¿Qué es un Servicio Web?
Según Microsoft:
“… es una entidad programable que proporciona un
elemento de funcionalidad determinado, como
lógica de aplicación … (accesible) mediante
estándares de Internet … como XML y HTTP.”
Según Sun:
“… es un componente software con las siguientes
características: 1) Es accesible a través del
interfaz SOAP, 2) Su interfaz se describe en un
documento WSDL.”
97. Marzo 2009 3. Fundamentos de Web Services 97
1. Introducción a los Servicios Web
¿Qué es un Servicio Web?
Según Wikipedia:
“… es un conjunto de protocolos y estándares que sirven
para intercambiar datos entre aplicaciones.”
De otra forma:
“A través de una interfaz estándar … permite el
funcionamiento de una serie de sistemas heterogéneos
como un conjunto integrado.”
Simplificando:
“Sistema diseñado para soportar interoperabilidad entre
máquinas sobre una red.”
98. Marzo 2009 3. Fundamentos de Web Services 98
1. Introducción a los Servicios Web
Simplificando más:
Clase accesible a través de Internet
Alojada en un Servidor Web
Invocación remota de procesos
Autocontenido, Autodescrito, Modular e
Independiente de Plataforma
Estándares (XML, SOAP, RPC)
99. Marzo 2009 3. Fundamentos de Web Services 99
1. Introducción a los Servicios Web
Fundamentos:
Intercambio de información
Procesamiento
Sin intervención del usuario
Acelerando tiempos de respuesta
Normalización
Entre plataformas
Entre lenguajes
Entre sistemas operativos
100. Marzo 2009 3. Fundamentos de Web Services 100
1. Introducción a los Servicios Web
Escenarios:
Simple
Publicación de información
Integración de Aplicaciones
Permite realizar tareas remotas
Soluciones de Flujo de Trabajo
(Workflow)
Integrados con BizTalk o Sun ONE
101. Marzo 2009 3. Fundamentos de Web Services 101
1. Introducción a los Servicios Web
Comunicación Distribuida:
Componentes ubicados en servidores
diferentes deben comunicarse.
referencia remota
<---------referencias locales---------->
RED TCP
Objeto
Cliente
Proxy
Objeto
Remoto
Referencia Remota
102. Marzo 2009 3. Fundamentos de Web Services 102
1. Introducción a los Servicios Web
Comunicación Distribuida:
RMI
Java en ambos extremos
Stub (Proxy Cliente) y Skeleton (Servidor)
Máquina rmiregistry sirve las referencias a objeto
remoto
CORBA
Genérico para objetos de distintos lenguajes
Servidor de nombres (Naming Service) hace de
Skeleton
IDL (Interface Definition Language)
DCOM
Microsoft
COM+ balancea carga, gestiona transacciones y
admite llamadas asíncronas
103. Marzo 2009 3. Fundamentos de Web Services 103
1. Introducción a los Servicios Web
Infraestructura
104. Marzo 2009 3. Fundamentos de Web Services 104
1. Introducción a los Servicios Web
Arquitecturas involucradas:
3 capas (CS):
N capas (SOA):
ClienteClienteCliente
Lógica de
Negocio Servidor
Cliente
Cliente
Cliente
Seguridad
Servidor
Gestión
Validación
105. Marzo 2009 3. Fundamentos de Web Services 105
1. Introducción a los Servicios Web
Arquitectura Orientada a Servicios
Utilizar servicios para implementar la
lógica de negocio
Facilita la interacción entre sistemas
Capas:
Aplicaciones básicas (SD)
Exposición de funcionalidad (WS)
Integración de servicios
Composición de procesos
Entrega
106. Marzo 2009 3. Fundamentos de Web Services 106
1. Introducción a los Servicios Web
Terminología utilizada en SOA
Servicio
Funcionalidad publicada
Orquestación
Coordinación de servicios para implementar
una lógica determinada
Sin estado
Los servicios no dependen unos de otros y se
pueden orquestar de distintas maneras
Proveedor
Consumidor
107. Marzo 2009 3. Fundamentos de Web Services 107
1. Introducción a los Servicios Web
SOA
Exige un cambio de mentalidad
Servicios poco acoplados pero altamente
interoperables
Basados en una definición independiente de
plataforma
Alta reusabilidad
Poco sensible a cambios
Permite modelos de
Consumo de terceros
Colaboración
Integración de tecnologías
108. Marzo 2009 3. Fundamentos de Web Services 108
1. Introducción a los Servicios Web
SOA
Diversos estándares de comunicación
No es obligatorio pero se recomiendan
XML
HTTP
SOAP
WSDL
UDDI
109. Marzo 2009 3. Fundamentos de Web Services 109
2. El protocolo SOAP
Simple Object Access Protocol
Invocación remota basada en XML
Mensaje estructurado en XML con
posibilidad de implementar múltiples
formatos, seguridad etc.
Microsoft (1.0), IBM (1.1), Sun
Contiene llamadas y respuestas de
procedimientos
Trata de sustituir a formatos
propietario
110. Marzo 2009 3. Fundamentos de Web Services 110
2. El protocolo SOAP
SOAP Message
Un mensaje SOAP es un elemento Envelope con una
cabecera opcional y un cuerpo obligatorio
<soap:Envelope>
<soap:Header> ... </soap:Header>
<soap:Body>
<myMethod>
<x xsi:type="xsd:int">5</x>
<y xsi:type="xsd:float">5.0</y>
</myMethod>
</soap:Body>
</soap:Envelope>
111. Marzo 2009 3. Fundamentos de Web Services 111
2. El protocolo SOAP
Permite separar meta-información del
mensaje
Información de enrutado
Información de expiración
…
Define
Un modelo de proceso
Un mecanismo para manejar errores
Un mecanismo para representar datos
Un convenio para RPC
Un marco para vincular protocolos
112. Marzo 2009 3. Fundamentos de Web Services 112
2. El protocolo SOAP
Ventajas:
XML plano --> ubicuidad de
componentes
Comunicación HTTP --> no
cortafuegos
IPSec o SSL proporcionan seguridad
Escalable a conjuntos de servidores
113. Marzo 2009 3. Fundamentos de Web Services 113
2. El protocolo SOAP
Motores SOAP
Framework que se utiliza en
servidores y clientes para facilitar
La serialización de objetos a SOAP
La deserialización de mensajes SOAP a
objetos
SOAPpy
Implementado en Python y Axis
114. Marzo 2009 3. Fundamentos de Web Services 114
2. El protocolo SOAP
Motores SOAP
115. Marzo 2009 3. Fundamentos de Web Services 115
2. El protocolo SOAP
Mensajes de error
SOAP Fault XML <Fault>
<faultcode>
ID del error
<faultstring>
Descripción breve
<detail>
Detalles, volcado de pila,…
116. Marzo 2009 3. Fundamentos de Web Services 116
3. Documentos WSDL
Web Services Description Language
Lenguaje de definición del Servicio Web
Describir interfaces de Servicios Web
Independiente de la implementación
Métodos disponibles, parámetros y
retorno
Mapeado a SOAP de manera unívoca
Equivalente a IDL en CORBA
117. Marzo 2009 3. Fundamentos de Web Services 117
3. Documentos WSDL
Web Services Description Language
Define una o varias operaciones
Incluyendo los mensajes que reciben
Y los mensajes que devuelven
Descritas de forma abstracta
Concretadas en el endpoint
Protocolo
Formato de mensaje
Dirección de Red
118. Marzo 2009 3. Fundamentos de Web Services 118
3. Documentos WSDL
Web Services Description Language
<definitions>
<types/>
<message/> <part/> </message>
<portType><operation/></portType>
<binding/>
<service> <port/> </service>
</definitions>
119. Marzo 2009 3. Fundamentos de Web Services 119
3. Documentos WSDL
Web Services Description Language
types: Declaraciones de tipos de dato
habitualmente en XSD
message: Definición abstracta de mensajes y
sus tipos de dato (part)
portType: Operaciones soportadas por el
servicio y los mensajes que se les envía y/o
recibe
binding: Formato de mensaje y protocolo que
se debe utilizar para invocar las operaciones
service: Colección de endpoints cada uno
representado por un puerto en una dirección
de red y con un nombre de binding
121. Marzo 2009 3. Fundamentos de Web Services 121
4. Registros UDDI
Universal Description, Discovery &
Integration
Catálogo de negocios de Internet
Páginas amarillas
Páginas blancas
Páginas verdes
Accedido por mensajes SOAP para
obtener documentos WSDL
122. Marzo 2009 3. Fundamentos de Web Services 122
4. Registros UDDI
Universal Description, Discovery &
Integration
Mecanismo de descubrimiento de
Servicios Web disponibles
Publicación de Servicios Web
Descubrimiento de Servicios
Equivale al Naming Service en CORBA
123. Marzo 2009 3. Fundamentos de Web Services 123
4. Registros UDDI
JAXR (Java API for XML Registries)
Permite acceder a registros de negocio
basados en UDDI y otros (ebXML)
https://jaxr.dev.java.net/
Proyecto privado
Requiere hacerse miembro para
consultarlo
Se incluye en el proyecto GlassFish
com.sun.connector.jaxr
javax.xml.registry
124. Marzo 2009 3. Fundamentos de Web Services 124
5. Tecnologías J2EE para WS
El API SAAJ
SOAP with Attachments API for Java
Se emplea para escribir mesajes SOAP
directamente en lugar de utilizar un
generador
Permite escribir y leer mensajes SOAP
Algunas implementaciones permiten
enviar y recibir mensajes SOAP
Paquete:
javax.xml.soap
125. Marzo 2009 3. Fundamentos de Web Services 125
5. Tecnologías J2EE para WS
El API SAAJ sin archivos vinculados
SOAPMessage <Message>
SOAPPart <Part>
SOAPEnvelope <Envelope>
SOAPHeader <Header>
SOAPBody <Body>
Se generan con el SOAPMessage
126. Marzo 2009 3. Fundamentos de Web Services 126
5. Tecnologías J2EE para WS
El API SAAJ sin archivos vinculados
127. Marzo 2009 3. Fundamentos de Web Services 127
5. Tecnologías J2EE para WS
El API SAAJ con archivos vinculados
AttachmentPart
Hay que crearlos a mano
Debe contener una cabecera MIME
Tipo de contenido
Opcionalmente tendrá contenido
128. Marzo 2009 3. Fundamentos de Web Services 128
5. Tecnologías J2EE para WS
El API SAAJ con archivos vinculados
129. Marzo 2009 3. Fundamentos de Web Services 129
5. Tecnologías J2EE para WS
El API SAAJ. Conexión
SOAPConnectionFactory factory =
SOAPConnectionFactory.newInstance();
SOAPConnection connection =
factory.createConnection();
//Crear un mensaje SOAP de request
java.net.URL endpoint = new URL("http://...");
SOAPMessage response =
connection.call(request, endpoint);
130. Marzo 2009 3. Fundamentos de Web Services 130
5. Tecnologías J2EE para WS
El API SAAJ. Acceder al contenido
SOAPBody soapBody= response.getSOAPBody();
//Lectura del cuerpo
for(SOAPBodyElement elemento :
soapBody.getChildElements(Name)){
String valor = elemento.getValue();
}
//Modificación del cuerpo
SOAPBodyElement docElement =
soapBody.addDocument(document);
131. Marzo 2009 3. Fundamentos de Web Services 131
5. Tecnologías J2EE para WS
El API SAAJ. Attachments
//Crear y añadir
AttachmentPart attachment =
message.createAttachmentPart();
attachment.setContent("texto", "text/plain");
attachment.setContentId("id");
message.addAttachmentPart(attachment);
//acceder a contenidos
for(AttachmentPart att : message.getAttachments()){
String id = att.getContentId();
String type = att.getContentType();
Object content = att.getContent();
}
132. Marzo 2009 3. Fundamentos de Web Services 132
5. Tecnologías J2EE para WS
El API JAX-RPC
Java API for XML-Based RPC
Permite construir aplicaciones y
Servicios Web con funcionalidades RPC
basadas en XML
Cumple la especificación SOAP 1.1
JAX-RPC 2.0 ha sido renombrado a
JAX-WS 2.0
https://jax-rpc.dev.java.net/
133. Marzo 2009 3. Fundamentos de Web Services 133
5. Tecnologías J2EE para WS
El API JAX-RPC
134. Marzo 2009 3. Fundamentos de Web Services 134
5. Tecnologías J2EE para WS
El API JAX-WS
Tecnología Java para construir clientes y
Servicios Web basados en XML
Orientados a mensajes
Orientados a RPC
Oculta la complejidad de SOAP
Se crea un objeto proxy que invoca a los
métodos del Servicio
Se requiere la anotación javax.jws.WebService
para que la clase se comporte como WS
Se habla de endpoint del WS
135. Marzo 2009 3. Fundamentos de Web Services 135
5. Tecnologías J2EE para WS
JAX-WS Endpoint
Un endpoint requiere:
javax.jws.WebService/WebServiceProvider
@WebService
No admite métodos finales ni estáticos
javax.jws.WebMethod
Parámetros compatibles con JAXB
Clase no abstracta ni final
Con un constructor público por defecto
Sin destructor (finalize)
136. Marzo 2009 3. Fundamentos de Web Services 136
5. Tecnologías J2EE para WS
El API JAX-WS
137. Marzo 2009 3. Fundamentos de Web Services 137
5. Tecnologías J2EE para WS
JAX-WS Endpoint
import javax.jws.WebService;
@WebService()
public class Hello {
private String message = new String(“Hola, ");
public Hello() {}
@WebMethod()
public String sayHello(String name) {
return message + name + ".";
}
}
138. Marzo 2009 3. Fundamentos de Web Services 138
5. Tecnologías J2EE para WS
JAX-WS Client
Un cliente requiere:
javax.xml.ws.WebServiceRef
@WebServiceRef(wsdlLocation="http://...")
Un campo estático que referencie el servicio
static HelloService service;
Un proxy al servicio con el que trabajar
Hello port = service.getHelloPort();
Utilizar el proxy para invocar métodos
String response = port.sayHello(name);
139. Marzo 2009 3. Fundamentos de Web Services 139
5. Tecnologías J2EE para WS
JAX-WS Client
import javax.jws.WebServiceRef;
public class HelloClient {
@WebServiceRef(wsdlLocation =
"http://localhost:8080/helloservice/hello?wsdl")
static HelloService servicio;
public static void main(String[] args) {
Hello puerto = servicio.getHelloPort();
String respuesta = puerto.sayHello(args[0]);
System.out.println(respuesta);
}
}
140. Marzo 2009 3. Fundamentos de Web Services 140
6. Creación de Servicios Web
141. Marzo 2009 3. Fundamentos de Web Services 141
6. Creación de Servicios Web
142. Marzo 2009 3. Fundamentos de Web Services 142
6. Creación de Servicios Web
143. Marzo 2009 3. Fundamentos de Web Services 143
6. Creación de Servicios Web
144. Marzo 2009 3. Fundamentos de Web Services 144
7. Publicación de Servicios Web
145. Marzo 2009 3. Fundamentos de Web Services 145
7. Publicación de Servicios Web
146. Marzo 2009 3. Fundamentos de Web Services 146
7. Publicación de Servicios Web
147. Marzo 2009 3. Fundamentos de Web Services 147
8. Consumo de Servicios Web
148. Marzo 2009 3. Fundamentos de Web Services 148
8. Consumo de Servicios Web
149. Marzo 2009 3. Fundamentos de Web Services 149
8. Consumo de Servicios Web
150. Marzo 2009 3. Fundamentos de Web Services 150
8. Consumo de Servicios Web
151. Marzo 2009 3. Fundamentos de Web Services 151
8. Consumo de Servicios Web
152. Marzo 2009 WebServices y Java [CMMi Project] 152
Contenidos
I. Fundamentos de XML
II. Tratamiento de XML en Java
III. Fundamentos de Web Services y
consumo desde Java
IV. Web Services con Apache AXIS
V. Autenticación en Web Services
VI. Transacciones en Web Services
VII. Caso Práctico
153. Marzo 2009 4. Web Services con Apache AXIS 153
1. Introducción a Apache AXIS
Cliente y Servidor SOAP open source
Implementa el API JAX-RPC
2006 v1.4 Final
Axis2 implementa JAX-WS
Se utiliza con el servidor Tomcat
Posible desplegarlo en otros
WebLogic
GlassFish
154. Marzo 2009 4. Web Services con Apache AXIS 154
Librerias que permiten ejecutar
Servicios Web
Libreria WSDL.jar que general el
WSDL de los Servicios
Parametros de entrada/salida y
metodos a invocar
http://ws.apache.org/axis/
org.apache.axis.client
1. Introducción a Apache AXIS
155. Marzo 2009 4. Web Services con Apache AXIS 155
2. Variables de Sistema
Variables de AXIS
AXIS_HOME=c:axis
AXIS_LIB=%AXIS_HOME%lib
AXISCLASSPATH=%AXIS_LIB%axis.jar;
%AXIS_LIB%commons-discovery.jar;
%AXIS_LIB%commons-logging.jar;
%AXIS_LIB%jaxrpc.jar;%AXIS_LIB%saaj.jar
;%AXIS_LIB%log4j-1.2.8.jar;
%AXIS_LIB%wsdl4j-1.5.1.jar;
I:SunSDKlibantlibxercesImpl.jar;
I:SunSDKlibactivation.jar;
I:SunSDKlibmail.jar
156. Marzo 2009 4. Web Services con Apache AXIS 156
3. Despliegue de Servicios
Desplegar un Servicio manualmente
Copiar el .class del Servicio en la
carpeta classes dentro de Axis
Copiar el .java del Servicio con
extensión .jws en la raíz del Axis
desplegado
Para que se genere el WSDL
157. Marzo 2009 4. Web Services con Apache AXIS 157
Desplegar un Servicio por línea de
comandos
Fichero .wsdd describe el Servicio
XML específico de AXIS
Desde el directorio ejecutar
java -cp %AXISCLASSPATH%
org.apache.axis.client.AdminClient
-lhttp://localhost:8080/axis/services/AdminService
deploy.wsdd
3. Despliegue de Servicios
158. Marzo 2009 4. Web Services con Apache AXIS 158
Desplegar con SOAP Monitor
java org.apache.axis.utils.SOAPMonitor
3. Despliegue de Servicios
159. Marzo 2009 4. Web Services con Apache AXIS 159
Desplegar con SOAP Monitor
3. Despliegue de Servicios
160. Marzo 2009 4. Web Services con Apache AXIS 160
Desplegar con SOAP Monitor
3. Despliegue de Servicios
161. Marzo 2009 4. Web Services con Apache AXIS 161
Habilitar AdminServlet
web.xml
<!--
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
-->
3. Despliegue de Servicios
162. Marzo 2009 4. Web Services con Apache AXIS 162
4. Consumo de Servicios
Consumir un Servicio con AXIS
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) {
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 + "'");
}
}
163. Marzo 2009 4. Web Services con Apache AXIS 163
5. Herramientas AXIS
Varios subsistemas trabajan en
paralelo
Manejadores de mensajes
Servicios
Proveedores
Transporte
WSDD
WSDL
…
164. Marzo 2009 4. Web Services con Apache AXIS 164
5. Herramientas AXIS
165. Marzo 2009 4. Web Services con Apache AXIS 165
5. Herramientas AXIS
WSDL2Java
Aplicación Java que genera clases a
partir de un documento WSDL
Para cada <port> genera una clase
Para cada portType una interfaz
Para cada <binding> un stub Java
Para cada <service> una interfaz de
servicio y una implementación
java org.apache.axis.wsdl.WSDL2Java “fichero-WSDL”
166. Marzo 2009 4. Web Services con Apache AXIS 166
5. Herramientas AXIS
Java2WSDL
Aplicación Java que genera clases a
partir de un documento WSDL
java org.apache.axis.wsdl.Java2WSDL
-o “fichero-WSDL”
-l“url del servicio”
-n <espacio de nombres>
-p “package” “namespace”
“fichero-CLASS”
167. Marzo 2009 4. Web Services con Apache AXIS 167
5. Herramientas AXIS
TCP Monitor
java org.apache.axis.utils.tcpmon
[listenPort] puerto de escucha
[targetHost] servidor
[targetPort] puerto del servidor
Permite
Redirigir el servidor a otro puerto
Monitorizar mensajes en ese puerto
Mantener un log de request-response
168. Marzo 2009 4. Web Services con Apache AXIS 168
5. Herramientas AXIS
TCP Monitor
169. Marzo 2009 4. Web Services con Apache AXIS 169
5. Herramientas AXIS
TCP Monitor
170. Marzo 2009 4. Web Services con Apache AXIS 170
5. Herramientas AXIS
SOAP Monitor
java org.apache.axis.utils.SOAPMonitor
-u [usuario]
-w [password]
-l [http://servidorAXIS]
Permite monitorizar mensajes SOAP
Applet java 1.3
Compilar SOAPMonitorApplet.java
Desplegar deploy-monitor.wsdd
Aplicación incluida en Axis
171. Marzo 2009 4. Web Services con Apache AXIS 171
5. Herramientas AXIS
SOAP Monitor
java org.apache.axis.utils.SOAPMonitor
-u [usuario]
-w [password]
-l [http://servidorAXIS]
Permite monitorizar mensajes SOAP
Applet java 1.3
Compilar SOAPMonitorApplet.java
Desplegar deploy-monitor.wsdd
Aplicación incluida en Axis
172. Marzo 2009 4. Web Services con Apache AXIS 172
5. Herramientas AXIS
SOAP Monitor
173. Marzo 2009 4. Web Services con Apache AXIS 173
5. Herramientas AXIS
SOAP Monitor
174. Marzo 2009 4. Web Services con Apache AXIS 174
6. WSDD
Web Service Deployment Descriptor
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/j
ava">
<service name="MyService" provider="java:RPC">
<parameter name="className"
value="samples.userguide.example3.MyService"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
175. Marzo 2009 4. Web Services con Apache AXIS 175
6. WSDD
Web Service Deployment Descriptor
+axis
|
|-*.jws (Clases/Métodos con Web-Services Nativos)
|
+WEB-INF
|
|-web.xml
|
+classes
|
|- Calculadora.class
176. Marzo 2009 4. Web Services con Apache AXIS 176
6. WSDD
Colocar los ficheros en estos directorios no
garantizan el despliegue
Se debe crear un WSDD y desplegarlo
java org.apache.axis.client.AdminClient
<deployment> es la raíz de un WSDD
Contiene los servicios a registrar
<service name=“servicio”
provider=“java:RCP ó java:MSG”>
Y sus parámetros
<parameter name=“parametro”
value=“valor”/>
177. Marzo 2009 4. Web Services con Apache AXIS 177
6. WSDD
Parámetros WSDD
className: clase Java que se va a activar
allowedMethods: métodos de la clase
permitidos
allowedRoles: usuarios que pueden invocarlo
wsdlServicePort:
scope: Alcance de los objetos creados
(request, session, application)
…
http://www.oio.de/axis-wsdd/
178. Marzo 2009 4. Web Services con Apache AXIS 178
6. WSDD
WSDD de repliegue
<undeployment name="test"
xmlns="http://xml.apache.org/axis/wsdd/">
<service name="servicio1"/>
<service name="servicio2"/>
</undeployment>
179. Marzo 2009 WebServices y Java [CMMi Project] 179
Contenidos
I. Fundamentos de XML
II. Tratamiento de XML en Java
III. Fundamentos de Web Services y
consumo desde Java
IV. Web Services con Apache AXIS
V. Autenticación en Web Services
VI. Transacciones en Web Services
VII. Caso Práctico
180. Marzo 2009 5. CAS SSO en Axis 180
1. Autenticación y Autorización
Autenticación
Asegurar que un usuario es quien dice ser
Autorización
Comprobar que un usuario autenticado tiene
permisos de acceso a un contenido
determinado
181. Marzo 2009 5. CAS SSO en Axis 181
2. CAS
Número CAS
Identificación numérica única
Ticket que se genera al iniciar sesión
Permite autenticar al usuario
Central Authentication Service
Protocolo SSO para Web
Permite acceso de usuarios a múltiples
aplicaciones con una única validación
Permite validar al usuario sin requerir
password
Paquetes CAS implementan el protocolo
http://www.jasig.org/cas
182. Marzo 2009 5. CAS SSO en Axis 182
2. CAS
Proyecto originado en Yale (2001)
Una capa (servidor CAS)
SSO centralizado
CAS 2.0 en 2002
Añade posibilidad de n capas
Añade posibilidad de proxys para SSO
En 2005 pasa a ser proyecto de JA-SIG
CAS 3.0 cambia la arquitectura
Permite extender el servidor
Permite crear plug-ins
183. Marzo 2009 5. CAS SSO en Axis 183
2. CAS
Solución Java que permite autenticar
usuarios en Web
También permite integrarlo con SSO
para validar en varios servidores
Sistema muy sólido de autenticación
Amplio rango de clientes y tecnologías
http://www.ja-sig.org
/wiki/display/CASUM/Technical+Overview
184. Marzo 2009 5. CAS SSO en Axis 184
2. CAS
Involucra
Cliente (browser)
Aplicación Web
Servidor CAS
El cliente accede a un Servidor que
requiere CAS
El Servidor le redirige a CAS
Se valida contra Kerberos, AD, …
Usuario/Password
Si se autentica recibe un ticket
Similar a certificados digitales
185. Marzo 2009 5. CAS SSO en Axis 185
2. CAS
Acción de generar ticket
public final class GenerateServiceTicketAction extends
AbstractAction {
@NotNull private CentralAuthenticationService cas;
protected Event doExecute(final RequestContext
context) {
final Service service =
WebUtils.getService(context);
final String ticketGrantingTicket =
WebUtils.getTicketGrantingTicketId(context);
186. Marzo 2009 5. CAS SSO en Axis 186
2. CAS
try {
final String serviceTicketId =
this.cas .grantServiceTicket(
ticketGrantingTicket, service);
WebUtils.putServiceTicketInRequestScope(context,
serviceTicketId);
return success();
} catch (final TicketException e) {
if (isGatewayPresent(context)) {
return result("gateway");
}
}
return error();
187. Marzo 2009 5. CAS SSO en Axis 187
2. SSO
Single Sign-On
Procedimiento de autenticación
Permite al usuario acceder a varios
sistemas con una sola identificación
“Log in once, access always”
Emplea servidores de autenticación
centralizados
Todas las aplicaciones deben tener
acceso
188. Marzo 2009 5. CAS SSO en Axis 188
2. SSO
5 tipos de SSO
Enterprise single sign-on (E-SSO):
legacy single sign-on
autenticación primaria, a través de un login
para sistemas que pueden deshabilitar la pantalla de
login
Web single sign-on (Web-SSO):
Web access management (Web-AM)
aplicaciones y recursos Web
un proxy redirige a los usuarios a un servidor de
autenticación
utiliza cookies para almacenar usuarios y su estado
Kerberos:
los usuarios se registran en el servidor Kerberos
reciben un "ticket“
lo presentan para obtener acceso
189. Marzo 2009 5. CAS SSO en Axis 189
2. SSO
5 tipos de SSO
Federation:
nueva manera de autenticar
también para aplicaciones Web
protocolos basados en estándares
identificar a los clientes sin necesidad de
autenticación redundante
OpenID:
SSO distribuido y descentralizado
la identidad se compila en una URL
cualquier aplicación o servidor puede
acceder para verificarla
190. Marzo 2009 WebServices y Java [CMMi Project] 190
Contenidos
I. Fundamentos de XML
II. Tratamiento de XML en Java
III. Fundamentos de Web Services y
consumo desde Java
IV. Web Services con Apache AXIS
V. Autenticación en Web Services
VI. Transacciones en Web Services
VII. Caso Práctico
191. Marzo 2009 6. Transacciones en Web Services 191
1. Transacciones Distribuidas
Transacción (TX): secuencia de
operaciones agrupadas como una unidad
El inicio y el final definen los puntos de
consistencia de la base de datos
Si una acción de la transacción no se puede
ejecutar, entonces ninguna acción tendrá
efecto
COMMIT y ROLLBACK
Propiedades:
Atomicidad
Consistencia
Aislamiento
Durabilidad
192. Marzo 2009 6. Transacciones en Web Services 192
1. Transacciones Distribuidas
Transacción Distribuída (DTX): Abarca
dos o más servidores conocidos como
administradores de recursos
Administrador de transacciones coordina
la transacción
Solicita COMMIT a los implicados
Invoca ROLLBACK si alguno falla
Transacción en 2 fases (2PC)
Preparación
Confirmación
193. Marzo 2009 6. Transacciones en Web Services 193
1. Transacciones Distribuidas
Fase de Preparación
El administrador recibe una petición de
transacción distribuida
Comunica a los implicados que está
preparando un COMMIT global
Los implicados comunican si han tenido éxito
o no en la preparación
Fase de Confirmación
Si todos los implicados han tenido éxito envía
COMMIT a todos
COMMIT global si todos responden
Si alguno falla o se consume un timeout
envía ROLLBACK a todos
194. Marzo 2009 6. Transacciones en Web Services 194
1. Transacciones Distribuidas
JTA (Java Transaction API)
API Java para comunicación con
administradores de transacciones e
implicados
Administrador de Recursos
Servidor de Aplicaciones
Aplicaciones Transaccionales
XID: Identificador de una DTX
XARESOURCE: Recurso implicado
195. Marzo 2009 6. Transacciones en Web Services 195
1. Transacciones Distribuidas
JTA (Java Transaction API)
Servidor de
Aplicaciones
Administrador
de Transacción
Administrador
de Recursos
Administrador
de Recursos
Administrador
de Recursos
CRM/ERP
TX App
Recurso
196. Marzo 2009 6. Transacciones en Web Services 196
1. Transacciones Distribuidas
Niveles de Aislamiento
READ_UNCOMMITED
Acceso libre a los recursos de la DTX
Problema de los “dirty reads”
READ_COMMITED
Se exige COMMIT para guardar cambios
Problema de las “lecturas no repetibles”
REPETEABLE_READS
Lecturas repetidas dan los mismos datos
Problema de los “phantom reads”
SERIALIZABLE
Bloquea los resultados de una consulta
197. Marzo 2009 6. Transacciones en Web Services 197
2. Transacciones con EJB
EJB permite modelar el comportamiento
de una DTX
Internamente implementa JTA
Cada EJB comparte el mismo XID
Propaga los COMMIT o ROLLBACK entre
los EJB relacionados
ROLLBACK ante RuntimeException
SessionContext permite administrar los
ROLLBACK
getRollbackOnly() consulta al admin JTA
setRollbackOnly() provoca un ROLLBACK
198. Marzo 2009 6. Transacciones en Web Services 198
2. Transacciones con EJB
Implementar un EJB de sesión sin estado
Añadir los métodos a publicar en la interfaz
remota
En JDev es el .java que creamos
Implementarlos en el EJB bean
Se puede crear un Servicio Web que publique el
EJB
@Resource SessionContext ctx;
@Resource TransactionAttribute ta;
@Resource TransactionManagement tm;
199. Marzo 2009 6. Transacciones en Web Services 199
2. Transacciones con EJB
Propagación de la transacción
Punto clave del comportamiento
Transmitir los COMMIT y ROLLBACK
Indicar si varios EJB comparten XID
Tipos:
PROPAGATION_REQUIRED
PROPAGATION_REQUIRES_NEW
PROPAGATION_MANDATORY
PROPAGATION_SUPPORTS
PROPAGATION_NEVER
PROPAGATION_NOT_SUPPORTED
200. Marzo 2009 6. Transacciones en Web Services 200
2. Transacciones con EJB
PROPAGATION_REQUIRED
Mantiene el XID de transacción o crea uno nuevo
si no existe
PROPAGATION_REQUIRES_NEW
Crea siempre un nuevo XID
EJB1
EJB2
EJB3
EJB4
EJB5
T1
T1
T1
-
T2
T3
202. Marzo 2009 6. Transacciones en Web Services 202
3. Transacciones con Spring
Spring permite definir
el comportamiento
el nivel de aislamiento
Creando Spring beans parametrizados
org.springframework.jdbc.datasource.Da
taSourceTransactionManager
org.springframework.transaction.interce
ptor.TransactionAspectSupport
203. Marzo 2009 6. Transacciones en Web Services 203
3. Transacciones con Spring
Crear una interfaz a publicar
Implementarla
Crear un bean de Spring de
configuración
Añadir un bean que instancie la clase de
implementación
Crear un bean proxy que conecte con la
instancia
Este bean admite configuración de
aislamiento y propagación para cada método
Su target debe ser mi instancia
Requiere un gestor de transacciones
204. Marzo 2009 6. Transacciones en Web Services 204
3. Transacciones con Spring
Crear el bean gestor de transacciones
Cuyo dataSource apunta a un origen de datos
Crear un bean origen de datos
Que apunte a un origen
Que apunte a un JNDI
…
JNDI debe apuntar al recurso en el
web.xml
java:comp/env/[nombre del recurso en
web.xml]
206. Marzo 2009 WebServices y Java [CMMi Project] 206
Contenidos
I. Fundamentos de XML
II. Tratamiento de XML en Java
III. Fundamentos de Web Services y
consumo desde Java
IV. Web Services con Apache AXIS
V. Autenticación en Web Services
VI. Transacciones en Web Services
VII. Caso Práctico
207. Marzo 2009 7. Caso Práctico 207
VII.Caso Práctico
1. Consumir un Servicio Web de
http://www.webservicelist.com/
2. Crear un Servicio Web que
consuma el buscador de Ecocoma
y nos devuelva SOLO resultados
con contenido embebido