SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
argonavis.com.brargonavis.com.braa
bb
xxjj
1
v
bb
aaxxjj
aml helder@argonavis.com.br
helder.da.rocha
argonavisargonavis.com.br.com.br
2004
inding
< >
argonavis.com.brargonavis.com.braa
bb
xxjj
2
Explorar JAXB: uma arquitetura que permite a
integração transparente de Java e XML
Tópicos abordados
 Introdução
 Arquitetura JAXB

XML Schema
 Mapeamento XML-Java
 Como usar JAXB: passo-a-passo

Demonstração
ObjetivosObjetivos
argonavis.com.brargonavis.com.braa
bb
xxjj
3
Mapeamento Java - XMLMapeamento Java - XML
● Como integrar aplicações Java com XML?
●
Alternativas tradicionais: APIs nativas – JAXP
– SAX – leitura seqüencial
com captura de eventos
– DOM – montagem de
árvore de elementos na
memória
● Desvantagens:
– Requerem conhecimento
de XML, uso de APIs burocráticas, ...
– Queremos persistência sem precisar ver XML
JAXP
Documento
XML
Estilo
XSLT
Documento
XML / HTML
DOM
SAX
Texto
DOM
argonavis.com.brargonavis.com.braa
bb
xxjj
4
O que é “XML data binding”?O que é “XML data binding”?
● Mapeamento entre
– Classe – Esquema XML
– Objeto – Instância (documento) XML
Conta
codigo: String
nome: String
saldo: double
conta_4:Conta
codigo="4"
nome="Morticia"
saldo=82.00
<!ELEMENT conta (codigo, nome, saldo)
<!ELEMENT codigo (#PCDATA)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT saldo (#PCDATA)>
<conta>
<codigo>4</codigo>
<nome>Morticia</nome>
<saldo>199.35</saldo>
</conta>
<conta>
<codigo>4</codigo>
<nome>Morticia</nome>
<saldo>0</saldo>
</conta>
<conta>
<codigo>4</codigo>
<nome>Morticia</nome>
<saldo>82.00</saldo>
</conta>
conta_4.xml
conta_3.xml
conta_2.xml
conta.dtd
argonavis.com.brargonavis.com.braa
bb
xxjj
5
Transparência com XML bindingTransparência com XML binding
● Com XML binding é possível ter persistência de
dados em XML sem precisar conhecer XML
● Separação de responsabilidades: dois processos
separados
– 1. Mapeamento e construção das classes Java derivadas
de um esquema XML – requer a construção e
compilação de um ou mais esquemas XML
– 2. Utilização das classes para serialização de objetos
derivados das classes geradas – não requer nenhum
conhecimento de XML: formato no qual os dados são
guardados
argonavis.com.brargonavis.com.braa
bb
xxjj
6
Solução para persistência de dadosSolução para persistência de dados
● Usando serialização Java
● Usando mapeamento Java-XML
Byte
BLOB
writeObject() readObject()
marshal() unmarshal()
<xml>
<xml>
<xml>
argonavis.com.brargonavis.com.braa
bb
xxjj
7
JAXBJAXB
●
Java Architecture for XML Binding
– Parte do Java Web Services Development Pack 1.3/1.4
– Interface genérica para diferentes provedores de serviço
que façam mapeamento XML – Java
– Suporta DTD, XML Schema e outros formatos de
esquema XML
● O que faz
– Mapeia classes Java a documentos XML e gera
JavaBeans a partir de um esquema XML
– Permite serializar objetos para XML e vice-versa,
fazendo validação no processo.
argonavis.com.brargonavis.com.braa
bb
xxjj
8
ArquiteturaArquitetura
Fonte: java.sun.com/jaxb/
argonavis.com.brargonavis.com.braa
bb
xxjj
9
Típico processo JAXBTípico processo JAXB
●
Gerar classes usando o compilador e um XSD
●
Compilar classes geradas e classes da aplicação.
●
Ler arquivos XML (unmarshal), nós DOM, fontes SAX,
etc. e gerar árvore de dados representando os documentos.
Este processo pode ser precedido por uma etapa de
validação do documento em relação ao seu esquema.
●
Processar os dados através das interfaces dos objetos
que representam as instâncias XML usando as classes
geradas.
●
Gravar arquivos XML (marshal). A árvore de dados é
convertida em um ou mais documentos XML. O conteúdo
pode ser validado antes da gravação.
argonavis.com.brargonavis.com.braa
bb
xxjj
10
Processo JAXBProcesso JAXB
Fonte: java.sun.com/jaxb/
argonavis.com.brargonavis.com.braa
bb
xxjj
11
Principais classes e pacotesPrincipais classes e pacotes
●
Pacote javax.xml.bind e dois subpacotes
●
Classes mais importantes
– Unmarshaller – objeto que realiza a leitura de um
arquivo XML e criação de um objeto derivado
– Marshaller – objeto que serializa um objeto em XML
– Validator – objeto usado para validar o documento
XML e/ou os dados
– JAXBContext – abstração usada para gerenciar o
processo de marshalling e unmarshalling. É preciso ter
uma instância deste objeto para obter um Marshaller
ou Unmarshaller.
argonavis.com.brargonavis.com.braa
bb
xxjj
12
O qO que é um Esquema XML?ue é um Esquema XML?
 O esquema representa uma classe
 Os documentos são instâncias
Esquema (universo de
documentos válidos)
Documentos que aderem à
especificação (válidos)
Documento
fora da
especificação
Como definir esquemas:
DTD - Document Type Definition
W3C XML Schema
argonavis.com.brargonavis.com.braa
bb
xxjj
13
DTD vs. XML SchemaDTD vs. XML Schema
●
Um esquema é essencial para que haja comunicação
usando XML
– Pode ser estabelecido "informalmente" (via software)
– Uso formal permite validação usando ferramentas
genéricas de manipulação de XML
● Soluções padrão do W3C
DTD XML Schema
<!ELEMENT contato
(nome, email, telefone)>
<!ATTLIST contato
codigo NMTOKEN #REQUIRED>
<xsd:schema
xmlns:xsd=".../XMLSchema">
<xsd:element name="contato">
<xsd:complexType>
<xsd:attribute name="codigo"
use="required">
• É XML, porém mais complexo
• Suporta namespaces
• Permite definição de tipos
• Simples mas não é XML
• Não suporta namespaces
• Limitado quando a tipos de dados
argonavis.com.brargonavis.com.braa
bb
xxjj
14
Atributos
Elementos
Um DTDUm DTD
<!ELEMENT astro (imagem*) >
<!ELEMENT imagem EMPTY >
<!ATTLIST imagem href CDATA #REQUIRED >
<!ATTLIST astro id ID #REQUIRED >
<!ATTLIST astro nome CDATA #REQUIRED >
<!ATTLIST astro diametrokm NMTOKEN #IMPLIED >
Tipos de dados simples
(somente para atributos)
Modelo de conteúdo
(tipo de dados complexo)
Atributo sempre
associado a elemento
<astro id="p05" nome="Jupiter">
<imagem href="jup31.jpg" />
<imagem href="jup32.jpg" />
</astro>
Exemplo de documento válido
em relação a este DTD
argonavis.com.brargonavis.com.braa
bb
xxjj
15
Um XSD equivalenteUm XSD equivalente
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="astro" type="astroType" />
<xs:element name="imagem" type="imagemType"/>
<xs:attribute name="href" type="xs:anyURI"/>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="nome" type="xs:string"/>
<xs:attribute name="diametrokm" type="xs:decimal"/>
<xs:complexType name="imagemType">
<xs:attribute ref="href" use="required"/>
</xs:complexType>
<xs:complexType name="astroType">
<xs:sequence>
<xs:element ref="imagem" minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="id" use="required"/>
<xs:attribute ref="nome" use="required"/>
<xs:attribute ref="diametrokm"/>
</xs:complexType>
</xs:schema>
Definição de
tipos de dados
Elementos
Atributos
● Esta não é a única forma de construir XML schemas
argonavis.com.brargonavis.com.braa
bb
xxjj
16
Fundamentos XML Schema: TiposFundamentos XML Schema: Tipos
● Há duas qualidades de tipos
●
Tipos simples representam tipos de dados básicos
como texto, números, tokens, booleanos
– Fazem parte do namespace do XML Schema (requerem
prefixo associado ao identificador do namespace), por
exemplo: xs:int, xs:string
●
Tipos complexos representam estruturas do
documento como entidades, atributos, etc.
– Podem fazer parte do namespace default do próprio
documento (e não necessitar de prefixo) se definidos
localmente
argonavis.com.brargonavis.com.braa
bb
xxjj
17
Tipos simples do XML SchemaTipos simples do XML Schema
anySimpleType
duration dateTime time date gYearMonth gYear gMonth gDay
string
normalizedString
token
language Name NMTOKEN
NCName NMTOKENS
ID IDREF ENTITY
IDREFS ENTITIES
decimal
integernonPositiveInteger nonNegativeInteger
negativeInteger
positiveInteger
long
int
short
byte
unsignedLong
unsignedInt
unsignedShort
unsignedByte
boolean base64binary
hexbinary
float double anyURI QName NOTATION
argonavis.com.brargonavis.com.braa
bb
xxjj
18
<element><element>
● Define um elemento
● Deve estar associado a um tipo de dados...
– por referência ...
– ... ou embutido
<xs:complexType name="cometaType">
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute name="nome" type="xs:string" use="required"/>
<xs:attribute name="planetas" type="xs:IDREFS"/>
</xs:complexType>
<xs:element name="cometa" type="cometaType" />
<xs:element name="cometa">
<xs:complexType>
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute name="nome" type="xs:string" use="required"/>
<xs:attribute name="planetas" type="xs:IDREFS"/>
</xs:complexType>
</xs:element>
argonavis.com.brargonavis.com.braa
bb
xxjj
19
<attribute><attribute>
● Define um atributo
● Pode estar embutido na definição de um tipo ou
globalmente acessível (para reutilização)
<xs:attribute name="raio" type="xs:decimal"/>
<xs:complexType name="sateliteType">
<xs:complexContent>
<xs:extension base="astroType">
<xs:attribute ref="raio" use="required"/>
<xs:attribute name="anoDesc" type="xs:int"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
argonavis.com.brargonavis.com.braa
bb
xxjj
20
<complexType><complexType>
● Tipo que pode conter outros elementos ou
atributos
<xs:complexType name="imagemType">
<xs:attribute name="href" type="xs:anyURI"/>
</xs:complexType>
<xs:complexType name="astroType">
<xs:sequence>
<xs:element ref="imagem" minOccurs="0"/>
<xs:element name="satelite" type="sateliteType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="astroID" use="required"/>
<xs:attribute name="nome" type="xs:token" />
<xs:attribute name="diametrokm" type="xs:decimal"/>
</xs:complexType>
argonavis.com.brargonavis.com.braa
bb
xxjj
21
<sequence><sequence>
● Permite definir uma seqüência de elementos
● Equivalente ao modelo de conteúdo (a, b, c) no
DTD
<xs:element name="sistemaEstelar">
<xs:complexType>
<xs:sequence>
<xs:element name="centro" type="centroType"/>
<xs:element name="orbita" type="orbitaType"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="cometa" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Equivale, em DTD, a (centro, orbita*, cometa*)
argonavis.com.brargonavis.com.braa
bb
xxjj
22
<choice><choice>
● Permite escolher um elemento de um conjunto
● Equivalente ao modelo de conteúdo (a | b | c) no
DTD
<xs:complexType name="orbitaType">
<xs:choice>
<xs:element name="estrela" type="estrelaType"/>
<xs:element name="planeta" type="sateliteType"/>
<xs:element name="asteroide" type="sateliteType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
<xs:attribute name="raioMedUA" type="xs:decimal"/>
</xs:complexType>
Equivalente a (estrela | planeta | asteroide*)
argonavis.com.brargonavis.com.braa
bb
xxjj
23
Mapeamento XML JavaMapeamento XML Java
● Os tipos primitivos do
XML Schema são
mapeados a tipos
primitivos da linguagem
Java
●
A tabela ao lado
relaciona os
mapeamentos
argonavis.com.brargonavis.com.braa
bb
xxjj
24
Compilador de schemaCompilador de schema
●
Em JAXB, um esquema (DTD, XSD ou outro) está
associado a uma classe; documentos individuais
(instâncias XML) estão associados a objetos
● Para gerar uma classe (e código auxiliar) a partir
de um esquema, usa-se o compilador xjc
● Objetos criados a partir da classe gerada podem
ser persistidos em XML
Classe
Java
xjc
Esquema XML
(DTD, XSD, ...)
Java Binding
Schema opcional
Binding
XML
unmarshal()
marshal()
Objeto
Java
JAXB
Marshalling/Unmarshalling
argonavis.com.brargonavis.com.braa
bb
xxjj
25
Um exemplo: JAXB passo-a-passoUm exemplo: JAXB passo-a-passo
● 1. Escrever o XML Schema
● 2. Compilar o Schema e gerar classes
● 3. Usar as classes para criar objetos
● 4. Gravar objetos em XML
● 5. Ler objetos do XML
argonavis.com.brargonavis.com.braa
bb
xxjj
26
Passo 1: escrever o schemaPasso 1: escrever o schema
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="contato" type="tipoContato" />
<xsd:complexType name="tipoContato">
<xsd:sequence>
<xsd:element name="nome" type="xsd:string"/>
<xsd:element name="telefone" type="tipoTelefone"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="tipoTelefone">
<xsd:sequence>
<xsd:element name="ddd" type="xsd:int"/>
<xsd:element name="numero" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
argonavis.com.brargonavis.com.braa
bb
xxjj
27
Exemplos de XML compatíveisExemplos de XML compatíveis
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<contato>
<nome>Bug Informática Ltda.</nome>
<telefone>
<ddd>19</ddd>
<numero>77779191</numero>
</telefone>
</contato>
<?xml version="1.0" encoding="iso-
8859-1" standalone="yes" ?>
<contato>
<nome>Bug Informática Ltda.</nome>
<telefone>
<ddd>19</ddd>
<numero>77779191</numero>
</telefone>
</contato>
argonavis.com.brargonavis.com.braa
bb
xxjj
28
Passo 2: gerar as classesPasso 2: gerar as classes
● Configure as variáveis de ambiente e classpath
– JWSDP_HOME
– JAXB_HOME=$JWSDP_HOME/jaxb
● Execute a ferramenta xjc
● $JWSDP_HOME/jaxb/bin/xjc.sh
-d gen.src
-p agenda contato.xsd
● Nosso exemplo usa o Ant:
<target name="compile-jaxb" ...>
<java jar="${jaxb.home}/lib/jaxb-xjc.jar" fork="true">
<arg line="-d ${gen} -p ${pacote} ${etc}/contato.xsd"/>
</java>
</target>
argonavis.com.brargonavis.com.braa
bb
xxjj
29
Classes geradasClasses geradas
Pacote agenda.impl.runtime
●ErrorHandlerAdaptor.java
●
ValidationContext.java
●
SAXUnmarshallerHandlerImpl.java
●
AbstractUnmarshallingEventHandlerImpl.java
●ValidatableObject.java
●
NamespaceContextImpl.java
●
UnmarshallableObject.java
●
ContentHandlerAdaptor.java
●Discarder.java
●
ValidatorImpl.java
●
Util.java
●
SAXUnmarshallerHandler.java
●
DefaultJAXBContextImpl.java
●
InterningUnmarshallerHandler.java
●
SAXMarshaller.java
●
GrammarInfo.java
●UnmarshallingContext.java
●
GrammarInfoImpl.java
●
GrammarInfoFacade.java
●
ValidatingUnmarshaller.java
●
Pacote agenda.impl
●
ContatoImpl.java
●
JAXBVersion.java
●TipoContatoImpl.java
●
TipoTelefoneImpl.java
Pacote agenda.
●
Contato.java
●
ObjectFactory.java
●
TipoContato.java
●
TipoTelefone.java
●
bgm.ser
●
jaxb.properties
Pacote agenda.impl.runtime
●
NamespaceContext2.java
●
UnmarshallingEventHandler.java
●
UnmarshallingEventHandlerAdaptor.java
●
PrefixCallback.java
●
MSVValidator.java
●
UnmarshallerImpl.java
●
MarshallerImpl.java
●
XMLSerializable.java
●
XMLSerializer.java
39 arquivos!
argonavis.com.brargonavis.com.braa
bb
xxjj
30
Passo 3: usar classes geradas...Passo 3: usar classes geradas...
● ... para construir um objeto Contato
ObjectFactory fabrica =
new ObjectFactory();
Contato contato =
fabrica.createContato();
contato.setNome("Nome");
TipoTelefone tel =
fabrica.createTipoTelefone();
contato.setTelefone(tel);
contato.getTelefone().setDdd(11);
contato.getTelefone().setNumero(1234567);
argonavis.com.brargonavis.com.braa
bb
xxjj
31
Passo 4: serializar para XMLPasso 4: serializar para XML
● Gravação no arquivo XML arquivo
JAXBContext ctx =
JAXBContext.newInstance("agenda");
Marshaller marsh = ctx.createMarshaller();
marsh.setProperty("jaxb.formatted.output",
new Boolean(true));
marsh.setProperty("jaxb.encoding",
"iso-8859-1");
File xmlf = new FileOutputStream(arquivo);
marsh.marshal(contato, xmlf);
argonavis.com.brargonavis.com.braa
bb
xxjj
32
Passo 5: ler do XMLPasso 5: ler do XML
● Arquivos XML estão em diretório xml.db (dir).
Código abaixo é para cada arquivo arqXML.
File arquivo = new File(dir, arqXML);
JAXBContext ctx =
JAXBContext.newInstance("agenda");
Unmarshaller unmarshaller =
ctx.createUnmarshaller();
Contato contato = (Contato)
unmarshaller.unmarshal(arquivo);
String nome = contato.getNome();
TipoTelefone tel = contato.getTelefone();
String telefone =
"("+tel.getDdd()+")"+tel.getNumero();
argonavis.com.brargonavis.com.braa
bb
xxjj
33
DemonstraçãoDemonstração
● Aplicação simples que utiliza o esquema mostrado
– Usa esquema (W3C XML Schema) para gerar classes
– Cria cinco objetos usando classes geradas
– Serializa os objetos em cinco documentos XML
– Lê e desserializa os documentos XML e obtém objetos
● Para executar, é preciso
– Ant (o script está em um build.xml)1.3 ou superior
– Java Web Services Development Pack 1.3 ou superior
– Definir variáveis de ambiente (build.properties)
●
Targets
– ant run.criar (cria objetos e grava XMLs em xml.db/)
– ant run.listar (lista dados obtidos dos arquivos XML)
argonavis.com.brargonavis.com.braa
bb
xxjj
34
ConclusõesConclusões
●
Esta palestra explorou os principais recursos do JAXB, que
são a capacidade de ler e gravar documentos XML de
forma transparente, através da geração automática de
código Java e documentos XML
● Vários aspectos importantes foram deixados de fora, como
– Validação na leitura e na gravação
– Manipulação de esquemas mais complexos (documentos
compostos, com namespaces, imports, atributos, tipos
estendidos, herança, etc.)
– Uso de configurações opcionais
– Aplicações em transformação XML e Web Services
●
Aprenda mais sobre JAXB nos links a seguir...
argonavis.com.brargonavis.com.braa
bb
xxjj
35
FontesFontes
● Página principal. java.sun.com/xml/jaxb/
● Java Web Services Tutorial.
java.sun.com/webservices/docs/1.4/tutorial/doc/JAXBWorks.html
● Fordin, Scott. Java Architecture for XML Binding
wwws.sun.com/software/xml/developers/jaxb/
● Shelby, J. Developing with JAXB and Ant
www.onjava.com/pub/a/onjava/2002/03/06/jaxant1.html
● Steinberg, D. et al. Tutorial: Data Binding with
JAXB. www-106.ibm.com/developerworks/edu/x-dw-xjaxb-i.html
argonavis.com.brargonavis.com.braa
bb
xxjj
36
Esta palestra e
código-fonte usado nos
exemplos demonstrados
estão disponíveis em
www.argonavis.com.br/justjava2004
bb
aaxxjj
< >

Mais conteúdo relacionado

Semelhante a JAXB: Uma arquitetura para integração transparente de Java e XML

Semelhante a JAXB: Uma arquitetura para integração transparente de Java e XML (20)

XML e Banco de Dados XML Nativo
XML e Banco de Dados XML NativoXML e Banco de Dados XML Nativo
XML e Banco de Dados XML Nativo
 
Xml pucminas2013
Xml pucminas2013Xml pucminas2013
Xml pucminas2013
 
XML_WS.pdf
XML_WS.pdfXML_WS.pdf
XML_WS.pdf
 
eXtensible Markup Language (XML)
eXtensible Markup Language (XML)eXtensible Markup Language (XML)
eXtensible Markup Language (XML)
 
Aula Xml Schema - XSD
Aula Xml Schema - XSDAula Xml Schema - XSD
Aula Xml Schema - XSD
 
12 sax
12 sax12 sax
12 sax
 
Tw Course Ajax 2007 Ap02
Tw Course Ajax 2007 Ap02Tw Course Ajax 2007 Ap02
Tw Course Ajax 2007 Ap02
 
Java e XML
Java e XMLJava e XML
Java e XML
 
Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01
 
Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)
 
Tag Libraries e JSTL
Tag Libraries e JSTLTag Libraries e JSTL
Tag Libraries e JSTL
 
Parte5 xml
Parte5 xmlParte5 xml
Parte5 xml
 
Introdução JavaScript e DOM 2016
Introdução JavaScript e DOM 2016Introdução JavaScript e DOM 2016
Introdução JavaScript e DOM 2016
 
Banco de Dados XML
Banco de Dados XMLBanco de Dados XML
Banco de Dados XML
 
PostgreSQL-Prático.pdf
PostgreSQL-Prático.pdfPostgreSQL-Prático.pdf
PostgreSQL-Prático.pdf
 
Tp 4 xml
Tp 4   xmlTp 4   xml
Tp 4 xml
 
xDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletxDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdoclet
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLT
 
A e xtensible markup language (xml)
A e xtensible markup language (xml)A e xtensible markup language (xml)
A e xtensible markup language (xml)
 
Pro php and xml web services xml canonical
Pro php and xml web services   xml canonicalPro php and xml web services   xml canonical
Pro php and xml web services xml canonical
 

Mais de Helder da Rocha

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsHelder da Rocha
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Helder da Rocha
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosHelder da Rocha
 
Padrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasPadrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasHelder da Rocha
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a WebHelder da Rocha
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosHelder da Rocha
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Helder da Rocha
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Helder da Rocha
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: SincronizadoresHelder da Rocha
 

Mais de Helder da Rocha (20)

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.js
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativos
 
Padrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasPadrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemas
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a Web
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativos
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 

JAXB: Uma arquitetura para integração transparente de Java e XML

  • 2. argonavis.com.brargonavis.com.braa bb xxjj 2 Explorar JAXB: uma arquitetura que permite a integração transparente de Java e XML Tópicos abordados  Introdução  Arquitetura JAXB  XML Schema  Mapeamento XML-Java  Como usar JAXB: passo-a-passo  Demonstração ObjetivosObjetivos
  • 3. argonavis.com.brargonavis.com.braa bb xxjj 3 Mapeamento Java - XMLMapeamento Java - XML ● Como integrar aplicações Java com XML? ● Alternativas tradicionais: APIs nativas – JAXP – SAX – leitura seqüencial com captura de eventos – DOM – montagem de árvore de elementos na memória ● Desvantagens: – Requerem conhecimento de XML, uso de APIs burocráticas, ... – Queremos persistência sem precisar ver XML JAXP Documento XML Estilo XSLT Documento XML / HTML DOM SAX Texto DOM
  • 4. argonavis.com.brargonavis.com.braa bb xxjj 4 O que é “XML data binding”?O que é “XML data binding”? ● Mapeamento entre – Classe – Esquema XML – Objeto – Instância (documento) XML Conta codigo: String nome: String saldo: double conta_4:Conta codigo="4" nome="Morticia" saldo=82.00 <!ELEMENT conta (codigo, nome, saldo) <!ELEMENT codigo (#PCDATA)> <!ELEMENT nome (#PCDATA)> <!ELEMENT saldo (#PCDATA)> <conta> <codigo>4</codigo> <nome>Morticia</nome> <saldo>199.35</saldo> </conta> <conta> <codigo>4</codigo> <nome>Morticia</nome> <saldo>0</saldo> </conta> <conta> <codigo>4</codigo> <nome>Morticia</nome> <saldo>82.00</saldo> </conta> conta_4.xml conta_3.xml conta_2.xml conta.dtd
  • 5. argonavis.com.brargonavis.com.braa bb xxjj 5 Transparência com XML bindingTransparência com XML binding ● Com XML binding é possível ter persistência de dados em XML sem precisar conhecer XML ● Separação de responsabilidades: dois processos separados – 1. Mapeamento e construção das classes Java derivadas de um esquema XML – requer a construção e compilação de um ou mais esquemas XML – 2. Utilização das classes para serialização de objetos derivados das classes geradas – não requer nenhum conhecimento de XML: formato no qual os dados são guardados
  • 6. argonavis.com.brargonavis.com.braa bb xxjj 6 Solução para persistência de dadosSolução para persistência de dados ● Usando serialização Java ● Usando mapeamento Java-XML Byte BLOB writeObject() readObject() marshal() unmarshal() <xml> <xml> <xml>
  • 7. argonavis.com.brargonavis.com.braa bb xxjj 7 JAXBJAXB ● Java Architecture for XML Binding – Parte do Java Web Services Development Pack 1.3/1.4 – Interface genérica para diferentes provedores de serviço que façam mapeamento XML – Java – Suporta DTD, XML Schema e outros formatos de esquema XML ● O que faz – Mapeia classes Java a documentos XML e gera JavaBeans a partir de um esquema XML – Permite serializar objetos para XML e vice-versa, fazendo validação no processo.
  • 9. argonavis.com.brargonavis.com.braa bb xxjj 9 Típico processo JAXBTípico processo JAXB ● Gerar classes usando o compilador e um XSD ● Compilar classes geradas e classes da aplicação. ● Ler arquivos XML (unmarshal), nós DOM, fontes SAX, etc. e gerar árvore de dados representando os documentos. Este processo pode ser precedido por uma etapa de validação do documento em relação ao seu esquema. ● Processar os dados através das interfaces dos objetos que representam as instâncias XML usando as classes geradas. ● Gravar arquivos XML (marshal). A árvore de dados é convertida em um ou mais documentos XML. O conteúdo pode ser validado antes da gravação.
  • 11. argonavis.com.brargonavis.com.braa bb xxjj 11 Principais classes e pacotesPrincipais classes e pacotes ● Pacote javax.xml.bind e dois subpacotes ● Classes mais importantes – Unmarshaller – objeto que realiza a leitura de um arquivo XML e criação de um objeto derivado – Marshaller – objeto que serializa um objeto em XML – Validator – objeto usado para validar o documento XML e/ou os dados – JAXBContext – abstração usada para gerenciar o processo de marshalling e unmarshalling. É preciso ter uma instância deste objeto para obter um Marshaller ou Unmarshaller.
  • 12. argonavis.com.brargonavis.com.braa bb xxjj 12 O qO que é um Esquema XML?ue é um Esquema XML?  O esquema representa uma classe  Os documentos são instâncias Esquema (universo de documentos válidos) Documentos que aderem à especificação (válidos) Documento fora da especificação Como definir esquemas: DTD - Document Type Definition W3C XML Schema
  • 13. argonavis.com.brargonavis.com.braa bb xxjj 13 DTD vs. XML SchemaDTD vs. XML Schema ● Um esquema é essencial para que haja comunicação usando XML – Pode ser estabelecido "informalmente" (via software) – Uso formal permite validação usando ferramentas genéricas de manipulação de XML ● Soluções padrão do W3C DTD XML Schema <!ELEMENT contato (nome, email, telefone)> <!ATTLIST contato codigo NMTOKEN #REQUIRED> <xsd:schema xmlns:xsd=".../XMLSchema"> <xsd:element name="contato"> <xsd:complexType> <xsd:attribute name="codigo" use="required"> • É XML, porém mais complexo • Suporta namespaces • Permite definição de tipos • Simples mas não é XML • Não suporta namespaces • Limitado quando a tipos de dados
  • 14. argonavis.com.brargonavis.com.braa bb xxjj 14 Atributos Elementos Um DTDUm DTD <!ELEMENT astro (imagem*) > <!ELEMENT imagem EMPTY > <!ATTLIST imagem href CDATA #REQUIRED > <!ATTLIST astro id ID #REQUIRED > <!ATTLIST astro nome CDATA #REQUIRED > <!ATTLIST astro diametrokm NMTOKEN #IMPLIED > Tipos de dados simples (somente para atributos) Modelo de conteúdo (tipo de dados complexo) Atributo sempre associado a elemento <astro id="p05" nome="Jupiter"> <imagem href="jup31.jpg" /> <imagem href="jup32.jpg" /> </astro> Exemplo de documento válido em relação a este DTD
  • 15. argonavis.com.brargonavis.com.braa bb xxjj 15 Um XSD equivalenteUm XSD equivalente <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="astro" type="astroType" /> <xs:element name="imagem" type="imagemType"/> <xs:attribute name="href" type="xs:anyURI"/> <xs:attribute name="id" type="xs:ID"/> <xs:attribute name="nome" type="xs:string"/> <xs:attribute name="diametrokm" type="xs:decimal"/> <xs:complexType name="imagemType"> <xs:attribute ref="href" use="required"/> </xs:complexType> <xs:complexType name="astroType"> <xs:sequence> <xs:element ref="imagem" minOccurs="0"/> </xs:sequence> <xs:attribute ref="id" use="required"/> <xs:attribute ref="nome" use="required"/> <xs:attribute ref="diametrokm"/> </xs:complexType> </xs:schema> Definição de tipos de dados Elementos Atributos ● Esta não é a única forma de construir XML schemas
  • 16. argonavis.com.brargonavis.com.braa bb xxjj 16 Fundamentos XML Schema: TiposFundamentos XML Schema: Tipos ● Há duas qualidades de tipos ● Tipos simples representam tipos de dados básicos como texto, números, tokens, booleanos – Fazem parte do namespace do XML Schema (requerem prefixo associado ao identificador do namespace), por exemplo: xs:int, xs:string ● Tipos complexos representam estruturas do documento como entidades, atributos, etc. – Podem fazer parte do namespace default do próprio documento (e não necessitar de prefixo) se definidos localmente
  • 17. argonavis.com.brargonavis.com.braa bb xxjj 17 Tipos simples do XML SchemaTipos simples do XML Schema anySimpleType duration dateTime time date gYearMonth gYear gMonth gDay string normalizedString token language Name NMTOKEN NCName NMTOKENS ID IDREF ENTITY IDREFS ENTITIES decimal integernonPositiveInteger nonNegativeInteger negativeInteger positiveInteger long int short byte unsignedLong unsignedInt unsignedShort unsignedByte boolean base64binary hexbinary float double anyURI QName NOTATION
  • 18. argonavis.com.brargonavis.com.braa bb xxjj 18 <element><element> ● Define um elemento ● Deve estar associado a um tipo de dados... – por referência ... – ... ou embutido <xs:complexType name="cometaType"> <xs:attribute name="id" type="xs:ID" use="required"/> <xs:attribute name="nome" type="xs:string" use="required"/> <xs:attribute name="planetas" type="xs:IDREFS"/> </xs:complexType> <xs:element name="cometa" type="cometaType" /> <xs:element name="cometa"> <xs:complexType> <xs:attribute name="id" type="xs:ID" use="required"/> <xs:attribute name="nome" type="xs:string" use="required"/> <xs:attribute name="planetas" type="xs:IDREFS"/> </xs:complexType> </xs:element>
  • 19. argonavis.com.brargonavis.com.braa bb xxjj 19 <attribute><attribute> ● Define um atributo ● Pode estar embutido na definição de um tipo ou globalmente acessível (para reutilização) <xs:attribute name="raio" type="xs:decimal"/> <xs:complexType name="sateliteType"> <xs:complexContent> <xs:extension base="astroType"> <xs:attribute ref="raio" use="required"/> <xs:attribute name="anoDesc" type="xs:int"/> </xs:extension> </xs:complexContent> </xs:complexType>
  • 20. argonavis.com.brargonavis.com.braa bb xxjj 20 <complexType><complexType> ● Tipo que pode conter outros elementos ou atributos <xs:complexType name="imagemType"> <xs:attribute name="href" type="xs:anyURI"/> </xs:complexType> <xs:complexType name="astroType"> <xs:sequence> <xs:element ref="imagem" minOccurs="0"/> <xs:element name="satelite" type="sateliteType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="astroID" use="required"/> <xs:attribute name="nome" type="xs:token" /> <xs:attribute name="diametrokm" type="xs:decimal"/> </xs:complexType>
  • 21. argonavis.com.brargonavis.com.braa bb xxjj 21 <sequence><sequence> ● Permite definir uma seqüência de elementos ● Equivalente ao modelo de conteúdo (a, b, c) no DTD <xs:element name="sistemaEstelar"> <xs:complexType> <xs:sequence> <xs:element name="centro" type="centroType"/> <xs:element name="orbita" type="orbitaType" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="cometa" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> Equivale, em DTD, a (centro, orbita*, cometa*)
  • 22. argonavis.com.brargonavis.com.braa bb xxjj 22 <choice><choice> ● Permite escolher um elemento de um conjunto ● Equivalente ao modelo de conteúdo (a | b | c) no DTD <xs:complexType name="orbitaType"> <xs:choice> <xs:element name="estrela" type="estrelaType"/> <xs:element name="planeta" type="sateliteType"/> <xs:element name="asteroide" type="sateliteType" minOccurs="0" maxOccurs="unbounded"/> </xs:choice> <xs:attribute name="raioMedUA" type="xs:decimal"/> </xs:complexType> Equivalente a (estrela | planeta | asteroide*)
  • 23. argonavis.com.brargonavis.com.braa bb xxjj 23 Mapeamento XML JavaMapeamento XML Java ● Os tipos primitivos do XML Schema são mapeados a tipos primitivos da linguagem Java ● A tabela ao lado relaciona os mapeamentos
  • 24. argonavis.com.brargonavis.com.braa bb xxjj 24 Compilador de schemaCompilador de schema ● Em JAXB, um esquema (DTD, XSD ou outro) está associado a uma classe; documentos individuais (instâncias XML) estão associados a objetos ● Para gerar uma classe (e código auxiliar) a partir de um esquema, usa-se o compilador xjc ● Objetos criados a partir da classe gerada podem ser persistidos em XML Classe Java xjc Esquema XML (DTD, XSD, ...) Java Binding Schema opcional Binding XML unmarshal() marshal() Objeto Java JAXB Marshalling/Unmarshalling
  • 25. argonavis.com.brargonavis.com.braa bb xxjj 25 Um exemplo: JAXB passo-a-passoUm exemplo: JAXB passo-a-passo ● 1. Escrever o XML Schema ● 2. Compilar o Schema e gerar classes ● 3. Usar as classes para criar objetos ● 4. Gravar objetos em XML ● 5. Ler objetos do XML
  • 26. argonavis.com.brargonavis.com.braa bb xxjj 26 Passo 1: escrever o schemaPasso 1: escrever o schema <?xml version="1.0" encoding="iso-8859-1" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="contato" type="tipoContato" /> <xsd:complexType name="tipoContato"> <xsd:sequence> <xsd:element name="nome" type="xsd:string"/> <xsd:element name="telefone" type="tipoTelefone"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="tipoTelefone"> <xsd:sequence> <xsd:element name="ddd" type="xsd:int"/> <xsd:element name="numero" type="xsd:int"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
  • 27. argonavis.com.brargonavis.com.braa bb xxjj 27 Exemplos de XML compatíveisExemplos de XML compatíveis <?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?> <contato> <nome>Bug Informática Ltda.</nome> <telefone> <ddd>19</ddd> <numero>77779191</numero> </telefone> </contato> <?xml version="1.0" encoding="iso- 8859-1" standalone="yes" ?> <contato> <nome>Bug Informática Ltda.</nome> <telefone> <ddd>19</ddd> <numero>77779191</numero> </telefone> </contato>
  • 28. argonavis.com.brargonavis.com.braa bb xxjj 28 Passo 2: gerar as classesPasso 2: gerar as classes ● Configure as variáveis de ambiente e classpath – JWSDP_HOME – JAXB_HOME=$JWSDP_HOME/jaxb ● Execute a ferramenta xjc ● $JWSDP_HOME/jaxb/bin/xjc.sh -d gen.src -p agenda contato.xsd ● Nosso exemplo usa o Ant: <target name="compile-jaxb" ...> <java jar="${jaxb.home}/lib/jaxb-xjc.jar" fork="true"> <arg line="-d ${gen} -p ${pacote} ${etc}/contato.xsd"/> </java> </target>
  • 29. argonavis.com.brargonavis.com.braa bb xxjj 29 Classes geradasClasses geradas Pacote agenda.impl.runtime ●ErrorHandlerAdaptor.java ● ValidationContext.java ● SAXUnmarshallerHandlerImpl.java ● AbstractUnmarshallingEventHandlerImpl.java ●ValidatableObject.java ● NamespaceContextImpl.java ● UnmarshallableObject.java ● ContentHandlerAdaptor.java ●Discarder.java ● ValidatorImpl.java ● Util.java ● SAXUnmarshallerHandler.java ● DefaultJAXBContextImpl.java ● InterningUnmarshallerHandler.java ● SAXMarshaller.java ● GrammarInfo.java ●UnmarshallingContext.java ● GrammarInfoImpl.java ● GrammarInfoFacade.java ● ValidatingUnmarshaller.java ● Pacote agenda.impl ● ContatoImpl.java ● JAXBVersion.java ●TipoContatoImpl.java ● TipoTelefoneImpl.java Pacote agenda. ● Contato.java ● ObjectFactory.java ● TipoContato.java ● TipoTelefone.java ● bgm.ser ● jaxb.properties Pacote agenda.impl.runtime ● NamespaceContext2.java ● UnmarshallingEventHandler.java ● UnmarshallingEventHandlerAdaptor.java ● PrefixCallback.java ● MSVValidator.java ● UnmarshallerImpl.java ● MarshallerImpl.java ● XMLSerializable.java ● XMLSerializer.java 39 arquivos!
  • 30. argonavis.com.brargonavis.com.braa bb xxjj 30 Passo 3: usar classes geradas...Passo 3: usar classes geradas... ● ... para construir um objeto Contato ObjectFactory fabrica = new ObjectFactory(); Contato contato = fabrica.createContato(); contato.setNome("Nome"); TipoTelefone tel = fabrica.createTipoTelefone(); contato.setTelefone(tel); contato.getTelefone().setDdd(11); contato.getTelefone().setNumero(1234567);
  • 31. argonavis.com.brargonavis.com.braa bb xxjj 31 Passo 4: serializar para XMLPasso 4: serializar para XML ● Gravação no arquivo XML arquivo JAXBContext ctx = JAXBContext.newInstance("agenda"); Marshaller marsh = ctx.createMarshaller(); marsh.setProperty("jaxb.formatted.output", new Boolean(true)); marsh.setProperty("jaxb.encoding", "iso-8859-1"); File xmlf = new FileOutputStream(arquivo); marsh.marshal(contato, xmlf);
  • 32. argonavis.com.brargonavis.com.braa bb xxjj 32 Passo 5: ler do XMLPasso 5: ler do XML ● Arquivos XML estão em diretório xml.db (dir). Código abaixo é para cada arquivo arqXML. File arquivo = new File(dir, arqXML); JAXBContext ctx = JAXBContext.newInstance("agenda"); Unmarshaller unmarshaller = ctx.createUnmarshaller(); Contato contato = (Contato) unmarshaller.unmarshal(arquivo); String nome = contato.getNome(); TipoTelefone tel = contato.getTelefone(); String telefone = "("+tel.getDdd()+")"+tel.getNumero();
  • 33. argonavis.com.brargonavis.com.braa bb xxjj 33 DemonstraçãoDemonstração ● Aplicação simples que utiliza o esquema mostrado – Usa esquema (W3C XML Schema) para gerar classes – Cria cinco objetos usando classes geradas – Serializa os objetos em cinco documentos XML – Lê e desserializa os documentos XML e obtém objetos ● Para executar, é preciso – Ant (o script está em um build.xml)1.3 ou superior – Java Web Services Development Pack 1.3 ou superior – Definir variáveis de ambiente (build.properties) ● Targets – ant run.criar (cria objetos e grava XMLs em xml.db/) – ant run.listar (lista dados obtidos dos arquivos XML)
  • 34. argonavis.com.brargonavis.com.braa bb xxjj 34 ConclusõesConclusões ● Esta palestra explorou os principais recursos do JAXB, que são a capacidade de ler e gravar documentos XML de forma transparente, através da geração automática de código Java e documentos XML ● Vários aspectos importantes foram deixados de fora, como – Validação na leitura e na gravação – Manipulação de esquemas mais complexos (documentos compostos, com namespaces, imports, atributos, tipos estendidos, herança, etc.) – Uso de configurações opcionais – Aplicações em transformação XML e Web Services ● Aprenda mais sobre JAXB nos links a seguir...
  • 35. argonavis.com.brargonavis.com.braa bb xxjj 35 FontesFontes ● Página principal. java.sun.com/xml/jaxb/ ● Java Web Services Tutorial. java.sun.com/webservices/docs/1.4/tutorial/doc/JAXBWorks.html ● Fordin, Scott. Java Architecture for XML Binding wwws.sun.com/software/xml/developers/jaxb/ ● Shelby, J. Developing with JAXB and Ant www.onjava.com/pub/a/onjava/2002/03/06/jaxant1.html ● Steinberg, D. et al. Tutorial: Data Binding with JAXB. www-106.ibm.com/developerworks/edu/x-dw-xjaxb-i.html
  • 36. argonavis.com.brargonavis.com.braa bb xxjj 36 Esta palestra e código-fonte usado nos exemplos demonstrados estão disponíveis em www.argonavis.com.br/justjava2004 bb aaxxjj < >