Escolar Documentos
Profissional Documentos
Cultura Documentos
XML WS
XML WS
Java e XML
Helder da Rocha
www.argonavis.com.br
Sumrio
Parte I: XML e tecnologias relacionadas
Documentos XML; namespaces; processadores DTD e XSchema DOM e SAX XSLT e XPath Introduo a Web Services: SOAP, WSDL, UDDI JAXP - Java API for XML Processing, JDOM, SAX e XSLT JAXB - Java API for XML Binding JAXM - Java API for XML Messaging JAXR - Java API for XML Registry JAXRPC - como criar um Web Service com JAX-RPC Java Web Service Development Kit
2
Apresentar
Breve introduo ao XML e tecnologias relacionadas. Recursos para manipular informaes representadas em XML: ferramentas, linguagens e tecnologias
4
Parte I - Programa
Por que XML? Onde usar XML? Como produzir documentos XML Documentos vlidos: DTD e XML Schema Manipulao via programao em DOM e SAX Transformao: XSLT e XPath Localizao e extrao: XLink, XQuery e XPointer Visualizao: XSL-FO e SVG Demonstrao: gerao de HTML, RTF e PDF Ferramentas e Concluses
5
O que XML?
eXtensible Markup Language: padro W3C Uma maneira de representar informao
no uma linguagem especfica no define vocabulrio de comandos no define uma gramtica, apenas regras mnimas
<contato codigo="33"> <nome>Severino Severovitch</nome> <email>bill@norte.com.br</email> <telefone tipo="celular"> <area>11</area> <numero>9999 4321</numero> </telefone> </contato>
Elemento raiz
<nome/>
Partes de um documento
elemento raiz declarao XML n raiz ( / )
<?xml version="1.0" encoding="iso-8859-1" ?> <cartao-simples> <logotipo href="/imagens/logo14bis.gif" /> <nome>Alberto Santos Dumont</nome> <endereco>Rua do Encanto, 22 - 2o. andar Centro - 25600-000 - Petrpolis - RJ</endereco> <email>dumont@14bis.com.br</email> <telefone tipo="residencial" > <ddd>21</ddd> elementos <numero>2313011</numero> </telefone> </cartao-simples>
atributos
/
cartao-simples
rvore XML
email
nome
Alberto Santos Dumont
dumont@14bis.com.br
href
numero tipo
2313011 residencial
ddd
/imagens/logo14bis.gif
LEGENDA
21
10
XML Namespaces
Limita o escopo de elementos
Evita conflitos quando duas linguagens se cruzam no mesmo documento
Exemplo
prefixo
identificador
<cadastro xmlns:firma="01.234.567/0001-99"> <nome>Severino Severovitch</nome> <firma:nome>Sibria Informtica Ltda.</firma:nome> <email>bill@norte.com.br</email> </cadastro> Este elemento <nome> pertence a outro namespace
11
Porque texto
Fcil de ler, fcil de processar, menos incompatibilidades
VRML
XSLT
W
DOM SAX XSL-FO
PDF PDF PDF RTF TeX SGML PDF e PostScript
SGBD
2000 2001
13
14
Documentos bem-formados obedecem as regras de construo de documentos XML genricos Regras incluem
Ter um, e apenas um, elemento raiz Valores dos atributos estarem entre aspas ou apstrofes Atributos no se repetirem Todos os elementos terem etiqueta de fechamento Elementos estarem corretamente aninhados
15
XML vlido
Um XML bem construdo pode no ser vlido em determinada aplicao Aplicao tpica pode esperar que elementos faam parte de um vocabulrio limitado, certos atributos tenham valores e tipos definidos, elementos sejam organizados de acordo com uma determinada estrutura hierrquica, etc. preciso especificar a linguagem! Esquema: modelo que descreve todos os elementos, atributos, entidades, suas relaes e tipos de dados Um documento XML considerado vlido em relao a um esquema se obedecer todas as suas regras
16
Esquema
Documentos que aderem especificao (vlidos)
17
Solues
DTD
<!ELEMENT contato (nome, email, telefone)> <!ATTLIST contato codigo NMTOKEN #REQUIRED>
XSchema
<xsd:schema xmlns:xsd=".../XMLSchema"> <xsd:element name="contato"> <xsd:complexType> <xsd:attribute name="codigo" use="required">
18
Visualizao em um browser
Folha de estilo: conjunto de regras para formatar ou transformar as informaes de um documento XML CSS - Cascading Style Sheets
Transformao visando apresentao visual Aplicao do estilo em tempo de execuo no cliente
Se no estiver associado a uma folha de estilo, o documento XML no tem uma "aparncia" definida
Internet Explorer e outros mostram a rvore-fonte XML Netscape mostra apenas os ns de texto
19
Servem a finalidades diferentes Implementaes disponveis em vrias linguagens SAX oferece mtodos que respondem a eventos produzidos durante a leitura do documento
notifica quando um elemento abre, quando fecha, etc.
Programador deve implementar um objeto "ouvinte" para capturar os eventos e extrair as informaes desejadas
21
<carta>
Atributos
<mensagem id="1">
mens.setAttribute("id", "1")
22
3. rvore completa
/
mens.appendChild(texto)
Bom dia!
<carta>
2. Sub-rvore <carta>
<mensagem id="1"> <carta>
carta.appendChild(mens)
<mensagem id="1">
Bom dia!
doc.appendChild(carta)
Bom dia!
23
XPath
Linguagem usada para navegar na rvore XML Uma expresso XPath um caminho* na rvore que resulta em um valor (nmero, texto, booleano), objeto (elemento, atributo, n de texto) ou conjunto de objetos Caminhos absolutos
33 Severino Severovitch bill@norte.com.br celular 11 9999 4321
Expresses XPath so usadas dentro de atributos XML Usadas em XSLT, XLink, XQuery e XPointer
* pode tambm ser padro de busca
24
XSLT
XSL Transformations
Linguagem (XML) para criao de documentos que contm regras de transformao para documentos XML Documentos escritos em XSLT so chamados de folhas de estilo e contm
Elementos XSLT: <template>, <if>, <foreach>, ... Expresses XPath para localizar ns da rvore-fonte Texto ou XML a ser gerado no documento-resultado
Processador XSLT
fonteToHtml.xslt
Folha de estilos
fonte.xml
Documento Fonte
Documento Resultado
25
<origem>
rvore-fonte
26
Elementos XSLT geralmente so usados com um prefixo associado ao seu namespace: <xsl:elemento> para evitar conflitos com o documento-resultado.
27
Para obter outros resultados e gerar outros formatos com os mesmos dados, deve-se criar folhas de estilo adicionais
28
29
XSL-FO
XSLT
XML
Fonte
Processador XSLT
XML
Documento XSLFO
FOP
Documento PDF
30
31
XHTML
eXtensible HTML
Linguagem XML de descrio de pgina Web Mesmos elementos do HTML 4.0 Strict Elementos descrevem somente a estrutura dos componentes da pgina.
A forma precisa ser especificada usando CSS: no h elementos/atributos para mudar cor, alinhamento, etc.
Pode ser misturada (estendida) com outras linguagens XML (MathML, SVG, linguagens proprietrias)
XSLT
XML
XML
Processador XSLT
Documento Fonte
Documento XHTML
32
<svg> <circle style="fill: red" cx="3cm" cy="3cm" r="2.5cm" /> <rect style="fill: blue" x="6cm" y="6cm" height="2.5cm" width="1.5cm" />
SVG
Zoom +
33
Exemplo de SVG
JavaScript
<svg width="10cm" height="10cm"> <g onclick="alert('Clicou no grupo 1!')"> CSS <circle style="fill: red" cx="3cm" cy="3cm" r="2.5cm" /> <rect style="fill: blue" x="6cm" y="6cm" height="2.5cm" width="1.5cm" /></g> <g onclick="alert('Clicou no grupo 2!')"> <circle style="fill: green; opacity: 0.5" cx="5cm" cy="5cm" r="2cm" /></g> <a xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/Graphics/SVG"> <text style="color: black; font-family: tahoma; font-size: 12pt" x="3cm" y="8cm"> SVG XML</text></a> </svg>
XLink
34
XMI
Web Services
XML-RPC
CML
35
ebXML
Demonstrao
Exemplo de transformao XML
<xslt> FO PDF
FOP
<xml>
(1)
<xsl:fo>
(1.a) (1.b)
W
Xalan
<xslt> Texto
(3)
<xslt> SVG
JFOR
(4) (2)
<xslt> HTML HTML
2000 2001
SVG
36
Concluses
XML uma tima soluo para compartilhar dados Para implementar solues em gesto de informaes usando XML, pode-se usar
DTD ou XSchema para especificar o modelo de dados e validar as informaes As APIs DOM ou SAX para extrair dados dos documentos, gerar documentos, ler e gravar em bancos de dados XSLT e XPath para transformar os dados em outros formatos XLink, XPointer e XQuery para criar vnculos lgicos entre os documentos e localizar seus componentes XSL-FO ou XHTML para formatar os dados para impresso ou visualizao na tela (PDF, Word ou Web) SVG para gerar informaes em forma de grfico vetorial
38
Fontes
[1] World
http://www.w3.org/XML/. Ponto de partida e principal fonte sobre XML e suas tecnologias "satlite". Contm ltimas especificaes de XML, XPath, XSchema, XSLT, XSL-FO, XQuery, XLink, XPointer, SVG, XHTML, CSS.
[2] Eric
Armstrong et al. Working with XML. Aborda DOM, SAX e XML com Java. SVG Tutorial. http://www.adobe.com/svg/. Contm tutorial sobre SVG e
http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/index.html.
[3] Adobe. [4]
[5] Doug
Tidwell. XSLT. OReilly & Associates, 2001. Explora XSLT com aplicaes Rusty Harold. XML Bible, Second Edition, 2001. Aborda todas as
prticas em Java.
[6] Elliotte [7] Erik
DTD, XSLT, XLink e XPointer (os dois ltimos baseados em especificaes draft).
40
42
A novidade a padronizao!
Todas as camadas em XML!
Fcil de ler, transformar, converter Existe ainda um esforo para padronizar os esquemas que definem a estrutura e vocabulrio do XML usado
43
Registro de servios
Catlogo de endereos: repositrio central que contm informaes sobre web services
Cliente de servios
Aplicao que descobre um web service, implementa sua interface de comunicao e usa o servio
4 5 1 publica Registro de servios mapeia interface usa acha 3 2 procura Cliente
Provedor de servios
44
Camada de mensagens
SOAP
Exemplo
Formulrio HTML
<FORM ACTION="/cgi-bin/catalogo.pl" METHOD="POST"> <H3>Consulta preo de livro</H3> <P>ISBN: <INPUT TYPE="text" NAME="isbn"> <INPUT TYPE="Submit" VALUE="Enviar"> </FORM>
46
2877142566 19.50
ISBNQuery
getPrice()
BD
HTTP/1.1 200 OK Content-type: text/xml Content-length: 77 <resposta> <funcao> <param>19.50</param> </funcao> </resposta>
gera requisio
ISBNClient 1 4
47
XML-RPC
Especificao para RPC em XML via HTTP POST
Projetada para ser a soluo mais simples possvel Vrias implementaes: veja www.xml-rpc.com
48
SOAP
Simple Object Access Protocol Protocolo padro baseado em XML para trocar mensagens entre aplicaes
SOAP no um protocolo RPC, mas um par de mensagens SOAP pode ser usado para esse fim Transporte pode ser HTTP, SMTP ou outro Mensagens podem conter qualquer coisa (texto, bytes) extensvel (mecanismo de RPC, por exemplo, extenso)
Mensagem SOAP Envelope Header XML Body XML
Contedo baseado em esquema do usurio
Envelope Attachment
...
Attachment
49
Parmetro (ISBN)
50
Resposta SOAP-RPC
HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" SOAPAction: "" Date: Thu, 08 Aug 2002 01:48:22 GMT Server: Apache Coyote HTTP/1.1 Connector [1.0] Connection: close <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns: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:enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns0="http://mybooks.org/types" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <env:Body> <ans1:getPriceResponse xmlns:ans1="http://mybooks.org/wsdl"> <result xsi:type="xsd:decimal">19.50</result> </ans1:getPriceResponse> </env:Body> </env:Envelope> Resposta (Preo)
51
Exemplo: WSDL
<?xml version="1.0" encoding="UTF-8"?> <definitions name="BookstoreService" targetNamespace="http://mybooks.org/wsdl" xmlns:tns="http://mybooks.org/wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> Compare com a <types>...</types> mensagem SOAP <message name="BookstoreIF_getPrice"> mostrada <part name="String_1" type="xsd:string"/> anteriormente </message> <message name="BookstoreIF_getPriceResponse"> <part name="result" type="xsd:decimal"/> </message> <portType name="BookstoreIF"> <operation name="getPrice" parameterOrder="String_1"> <input message="tns:BookstoreIF_getPrice"/> <output message="tns:BookstoreIF_getPriceResponse"/> </operation> </portType> <binding ... > ...</binding> <service ... > ... </service> Informa onde est o servio (endpoint) </definitions>
54
55
56
57
Implementao de referncia
Ferramentas de desenvolvimento: Web Deploytool, Compilador JAXRPC (xrpcc), Jakarta Ant, Jakarta Tomcat, Registry Browser e Apache Xindice (banco de dados XML) Servios de registro UDDI, roteamento SOAP e JAXRPC (implementados como servlets no Tomcat)
58
59
http://servidor.com.br/exemplo
Nome default do contexto rea inaccessvel ao cliente Bibliotecas
exemplo.war
HTML JSP JSP JSP
JPG JPG
dir/
HTML
WEB-INF/
Applet.class c.tld
GIF
GIF
/exemplo
lib/
struts.jar
XML
web.xml
classes/
Servlet.class my.properties
Deployment descriptor
mypkg/
Bean.class
Classpath
60
JAXP
Java API for XML Processing Pacotes
Para leitura, criao, manipulao, transformao de XML Parte integrante do J2SDK 1.4 Documento Estilo
XML XSLT
JAXP
DOM
SAX
Componentes
Parsers para SAX e DOM Documento XML / HTML Implementaes em Java das APIs padro SAX e DOM Implementaes Java de API de transformao XSLT
DOM
62
JAXB
Java API for XML Binding (JSR-31)
Mapeia classes Java a documentos XML Permite gerar JavaBeans a partir de esquema XML Permite serializar objetos para XML e vice-versa
Binding
Esquema XML (DTD)
Marshalling
Classe Java
unmarshal()
XML
xjc
marshal()
JAXB
Objeto Java
63
JAXR
Java API for XML Registries
Oferece acesso uniforme a diferentes sistemas de registro de servios baseados em XML Possui mapeamentos para UDDI e ebXML Permite a incluso e pesquisa de organizaes, servios
Pacotes
javax.xml.registry javax.xml.registry.infomodel
Arquitetura
Browsers de registro Componentes J2EE Aplicaes cliente
Registros
UDDI
JAXR
ebXML Outros
Clientes
64
JAXM (e SAAJ)
Java API for XML Messaging (e SOAP with Attachments API for Java)
Conjunto de APIs para manipular envelopes SOAP e transport-los sobre HTTP, SMTP ou outros protocolos Suporta comunicao baseada em eventos (mensagens) e baseada em RPC (par de mensagens requisio/resposta) Suporta especificaes SOAP 1.1 e SOAP with Empresa B Empresa A Attachments
Pacotes:
javax.xml.soap javax.xml.messaging javax.xml.rpc.*
Fonte da ilustrao: JAXM 1.0 specification
SOAP
Cliente
JAXM
Provedor JAXM
Servio
Mensagem SOAP
HTTP
Mensagem SOAP
65
JAX-RPC
Java API for XML-Based Remote Procedure Calls
Um tipo de Java RMI sobre SOAP/HTTP Alto nvel de abstrao permite ignorar envelope SOAP Utiliza WSDL para gerar classes de servidor e cliente
Pacotes
javax.xml.rpc.*
66
Concluso
Use JAX-RPC para criar aplicaes SOAP-RPC com WSDL Use JAXM para messaging ou quando precisar manipular o envelope SOAP diretamente
67
Arquitetura JAX-RPC
SOAP HTTP
68
2. Implementar a interface
package package example.service; example.service; public public class class BookstoreImpl BookstoreImpl implements implements BookstoreIF BookstoreIF { { private private BookstoreDB BookstoreDB database database = = DB.getInstance(); DB.getInstance(); public public BigDecimal BigDecimal getPrice(String getPrice(String isbn) isbn) { { return return database.selectPrice(isbn); database.selectPrice(isbn); } }
} }
69
gendir/
70
71
webapps/
jaxrpc-bookstore.war
72
73
Execuo
O endpoint do servio na implementao de referncia JWSDP 1.0 um servlet
com.sun.xml.rpc.server.http.JAXRPCServlet
Prximas verses (e J2EE 1.4) devem oferecer implementao em stateless session bean
despacha BookstoreImpl
74
Registro do servio
Podemos registrar o nosso Web Service
Automaticamente executando um cliente (ant Interativamente usando o Registry Browser
REGISTER)
75
Cliente
H trs tipos de cliente JAX-RPC:
1. Cliente esttico tipo-RMI: usa stubs gerados em tempo de compilao para se comunicar com o servidor e chama mtodos do servio remoto como se fossem locais 2. Cliente WSDL de interface dinmica (DII): descobre a interface de comunicao em tempo de execuo e chama mtodos via mecanismo similar a Java reflection 3. Cliente WSDL de interface esttica: usa interface Java implementada por stubs gerados em tempo de execuo e chama mtodos remotos como se fossem locais
Clientes precisam aderir ao contrato com o Web Service (WSDL) mas podem ser implementados e usados com ou sem WSDL
76
Clientes JAX-RPC
Cliente de implementao esttica + performance, + acoplamento
2. Chama o servio stub (1) Clientes de implementao dinmica proxy (3) 1. Obtm informaes sobre o servio dynamic (2) - performance, - acoplamento
Service endpoint
WSDL
77
78
Execuo
Para gerar os clientes
Cliente (1): gere stubs com xrpcc -client e arquivo WSDL (use config_wsdl.xml) e depois compile classe do cliente Clientes (2) e (3): apenas compile a classe do cliente
79
Concluses
Nesta palestra apresentamos a arquitetura de Web Services, suas tecnologias fundamentais SOAP, WSDL e UDDI e as APIs Java que as implementam. Java oferece APIs que permitem desde a manipulao direta de XML (DOM e SAX) at a criao de Web Services sem contato com XML (JAX-RPC) JAX-RPC a forma mais fcil e rpida de criar Web Services em Java Servios desenvolvidos em JAX-RPC podero ser acessados de aplicaes .NET e vice-versa.
Web Services viabilizam a integrao de servios entre plataformas diferentes: interoperabilidade!
80
Fontes
JSR-101 Expert Group. Java API for XML-based RPC: JAX-RPC 1.0 Specification. Java Community Process: www.jcp.org. [2] Sun Microsystems. Java Web Services Tutorial. java.sun.com/webservices/. Coleo de
[1]
tutoriais sobre XML, JSP, servlets, Tomcat, SOAP, JAX-RPC, JAXM, etc.
JSR-109 Expert Group. Web Services for J2EE 1.0 (Public Draft 15/04/2002). Java Community Process: www.jcp.org. Descreve o suporte a Web Services em J2EE 1.3 [4] Nicholas Kassem et al. (JSR-67). Java API for XML Messaging (JAXM) e Soap with Attachments API for Java 1.1. java.sun.com. Modelo de programao de baixo nvel (lida
[3]
Roberto Chinnici. Implementing Web Services with the Java Web Services Development Pack. JavaONE Session 1777. java.sun.com/javaone. Apresentao que
oferece uma viso garal de JAX-RPC e o Web Services Development Pack da Sun.
[6] [7]
Brett McLaughlin. Java & XML 2nd. Edition. O'Reilly and Associates, 2001. Explora as
APIs Java para XML e oferece uma introduo programao de WebServices em Java
Ethan Cerami. Web Services Essentials. O'Reilly, Fev 2002. XML-RPC, SOAP, UDDI e
WSDL so explorados de forma didtica e exemplos so implementados em Java usando ferramentas open-source. [8] W3C Web Services Activity. http://www.w3.org/2002/ws/. Pgina que d acesso aos grupos de trabalho que desenvolvem especificaes de SOAP (XMLP), WSDL e Arquitetura
81
Fontes
[9]
[10] [11]
Al Saganich. Java and Web Services Primer. O'Reilly Network 2001. http://www.onjava.com/pub/a/onjava/2001/08/07/webservices.html. timo tutorial
Al Saganich. Hangin' with the JAX Pack. Part 1: JAXP and JAXB, Part 2: JAXM, Part 3: Registries (JAXR), Part 4: JAX-RPC. O'Reilly Network 2001-2002. http://www.onjava.com/pub/a/onjava/2001/11/07/jax.html Esta srie de quatro artigos
publicados entre nov/2001 e abr/2002 talvez o melhor ponto de partida para quem desejar aprender a usar as APIs Java para Web Services.
[13]
David Chappell, Tyler Jewel. Java Web Services. O'Reilly and Associates, Mar 2002.
Explora implementaes Java de Apache SOAP, WSDL e UDDI em Java. Tem um captulo dedicado s APIs do JWSDP.
[14]
Al Saganich. JSR-109 Web Services inside of J2EE Apps. O'Reilly Network, Aug 2002. http://www.onjava.com/pub/a/onjava/2002/08/07/j2eewebsvs.html Mostra um
resumo da proposta do JSR-109, que prev a integrao J2EE-Web Services.
82
helder@argonavis.com.br
www.argonavis.com.br
Palestra: Como Implementar Web Services em Java COMDEX 2002, So Paulo Curso: XML 100 - Introduo a XML 2001, 2002, Helder da Rocha
83