Вы находитесь на странице: 1из 4

27/04/13

Verso para impresso: Introduo a JAXB 2

www.de vm e dia.com .br

[ve rso para im pre sso]

Introduo a JAXB 2
Introduo a JAXB 2

Iniciando o uso da especificao Java Architecture for XML Binding.

Iniciando o uso da especificao Java Architecture for XML Binding. A JAXB uma das APIs da plataforma Java EE e fornece suporte manipulao de objetos Java e XML. Sua principal caracterstica a capacidade de vincular XML a objetos Java e vice-versa. E o melhor que ela j est includa na JDK 6. Usando JAXB somos capazes de criar facilmente classes a partir de um schema (XSD). Isso mesmo. Com ela somos capazes de transformar um arquivo XSD em um conjunto de classes num piscar de olhos. Mas isso ser assunto para outro artigo. No momento vamos nos focar nos processos de Marshall e Unmarshall. Marshall o processo de transformar objetos Java em XML e o Unmarshall faz o caminho inverso, usa os dados de um XML para popular objetos Java. Para o artigo eu estou usando JDK 6 e Netbeans IDE 6.1.

Criando XML a partir de objetos Java


Vamos usar o processo de Marshall para transformar objetos Java em XML com o uso de anotaes. O primeiro passo criar um novo projeto Java com o nome JAXBContato. Criando os POJOs Crie a classe principal Contato como exibido na Listagem 01. Note que ela possui a uma anotao @XmlRootElement. Essa anotao indica que o valor da classe ser representado como um elemento XML principal. p a c k a g ec o n t a t o ; i m p o r tj a v a x . x m l . b i n d . a n n o t a t i o n . X m l R o o t E l e m e n t ; @ X m l R o o t E l e m e n t p u b l i cc l a s sC o n t a t o{ p r i v a t eS t r i n gn o m e ; p r i v a t eS t r i n gs e x o ; p r i v a t ei n ti d a d e ; p r i v a t eE n d e r e c oe n d e r e c o ; p u b l i cC o n t a t o ( ){ } p u b l i cC o n t a t o ( S t r i n gn o m e ,S t r i n gs e x o ,i n ti d a d e , E n d e r e c oe n d e r e c o ){ t h i s . n o m e=n o m e ; t h i s . s e x o=s e x o ; t h i s . i d a d e=i d a d e ; t h i s . e n d e r e c o=e n d e r e c o ; } / *M t o d o sg e t t e r ses e t t e r so m i t i d o sp a r an oo c u p a re s p a o* /
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=11547 1/4

27/04/13

Verso para impresso: Introduo a JAXB 2

} Listagem 01. Cdigo do contato. A segunda classe a ser criada ser Endereo (Listagem 02). Perceba que a classe de endereo est com uma anotao diferente da anterior. A anotao @XmlType indica que essa classe na verdade mapeia um tipo de informao especfico (XML schema). Como a classe Contato possui o atributo endereco do tipo Endereo, ento as informaes do endereo estaro dentro do objeto contato que ser criado. p a c k a g ec o n t a t o ; i m p o r tj a v a x . x m l . b i n d . a n n o t a t i o n . X m l T y p e ; @ X m l T y p e p u b l i cc l a s sE n d e r e c o{ p u b l i cE n d e r e c o ( ){ } p u b l i cE n d e r e c o ( S t r i n gl o g r a d o u r o ,i n tn u m e r o ,S t r i n gb a i r r o , S t r i n gc i d a d e ,S t r i n gc e p ){ t h i s . l o g r a d o u r o=l o g r a d o u r o ; t h i s . n u m e r o=n u m e r o ; t h i s . b a i r r o=b a i r r o ; t h i s . c i d a d e=c i d a d e ; t h i s . c e p=c e p ; } p r i v a t eS t r i n gl o g r a d o u r o ; p r i v a t ei n tn u m e r o ; p r i v a t eS t r i n gb a i r r o ; p r i v a t eS t r i n gc i d a d e ; p r i v a t eS t r i n gc e p ; / *M t o d o sg e t t e r ses e t t e r so m i t i d o sp a r an oo c u p a re s p a o* / } Listagem 02. Cdigo do endereo. Entendendo e Testando Para testar iremos criar uma classe que chamaremos JAXBTeste como na Listagem 03. Agora vamos por partes. Criamos os objetos contato e endereo, e populamos seus atributos. Para criar o XML precisamos de um JAXBContext. Iremos criar um objeto context passando o nome do nosso pacote ao JAXBContext. Esse context nos fornecer um objeto Marshaller, e o Marshaller que tem a capacidade de transformar objetos Java em XML. Um ponto importante a necessidade de um arquivo com o nome jaxb.index, contendo o nome das classes que queremos transformar em XML, e deve estar no mesmo pacote das classes (Figura 01). Ele requerido pelo JAXB para gerar as classes em tempo de execuo. Essa no a nica forma de fazer isso, mas a que atende ao nosso caso especfico.

www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=11547

2/4

27/04/13

Verso para impresso: Introduo a JAXB 2

Figura 01. Arquivo jaxb.index p a c k a g ec o n t a t o ; / *O si m p o r t sf o r a mo m i t i d o sp a r an oo c u p a re s p a o* / p u b l i cc l a s sJ a x b T e s t e{ p u b l i cs t a t i cv o i dm a i n ( S t r i n ga r g s [ ] )t h r o w sJ A X B E x c e p t i o n , F i l e N o t F o u n d E x c e p t i o n { E n d e r e c oe n d e r e c o=n e wE n d e r e c o ( " R u aM o r a e s " ,4 0 ," C e n t r o " , " R i od eJ a n e i r o " ," 2 0 0 0 0 0 0 0 " ) ; C o n t a t oc o n t a t o=n e wC o n t a t o ( " M a r c oM a c i e l " ," M " , 3 4 ,e n d e r e c o ) ; J A X B C o n t e x tc o n t e x t=J A X B C o n t e x t . n e w I n s t a n c e ( " c o n t a t o " ) ; / / s a d a1c o n s o l e M a r s h a l l e rm=c o n t e x t . c r e a t e M a r s h a l l e r ( ) ; m . s e t P r o p e r t y ( M a r s h a l l e r . J A X B _ F O R M A T T E D _ O U T P U T ,t r u e ) ; m . m a r s h a l ( c o n t a t o ,S y s t e m . o u t ) ; / / s a d a2a r q u i v o F i l ef=n e wF i l e ( " s r c / c o n t a t o . x m l " ) ; M a r s h a l l e rm 2=c o n t e x t . c r e a t e M a r s h a l l e r ( ) ; m 2 . m a r s h a l ( c o n t a t o ,n e wF i l e O u t p u t S t r e a m ( f ) ) ; } } Listagem 03. Cdigo de teste. Usamos duas formas de apresentar o XML. A primeira atravs do console e a segunda para arquivo. A sada na tela e o arquivo gerado devem estar parecidos com a listagem abaixo (Listagem 04). Note que a tag endereo foi criada dentro da tag contato. Lembra que a classe Contato possui um atributo do tipo Endereo?
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=11547 3/4

27/04/13

Verso para impresso: Introduo a JAXB 2

< ? x m lv e r s i o n = " 1 . 0 "e n c o d i n g = " U T F 8 "s t a n d a l o n e = " y e s " ? > < c o n t a t o > < i d a d e > 3 4 < / i d a d e > < n o m e > M a r c oM a c i e l < / n o m e > < s e x o > M < / s e x o > < e n d e r e c o > < b a i r r o > C e n t r o < / b a i r r o > < c e p > 2 0 0 0 0 0 0 0 < / c e p > < c i d a d e > R i od eJ a n e i r o < / c i d a d e > < l o g r a d o u r o > R u aM o r a e s < / l o g r a d o u r o > < n u m e r o > 4 0 < / n u m e r o > < / e n d e r e c o > < / c o n t a t o > Listagem 04. XML gerado.

Vinculando objetos Java a partir de XML


Vamos usar o processo de Unmarshall para vincular as informaes contidas em um arquivo XML a objetos Java. Para isso iremos usar o mesmo arquivo criado anteriormente. Vamos copi-lo e mudar seu nome para contato2.xml. Nele iremos alterar algumas informaes s para verificar se o processo ir funcionar. Agora iremos incluir as linhas abaixo (Listagem 05) ao final da nossa classe de teste. Na primeira linha usamos o mesmo context para criar um Unmarshaller. Depois o Unmarshaller cria um objeto usando as informaes do arquivo alterado contato2.xml. S para testar iremos mostrar o contedo desse objeto no console usando o formato XML, e tambm atravs dos getters do novo contato criado. U n m a r s h a l l e ru m=c o n t e x t . c r e a t e U n m a r s h a l l e r ( ) ; O b j e c to b j=u m . u n m a r s h a l ( n e wF i l e ( " s r c / c o n t a t o 2 . x m l " ) ) ; m . m a r s h a l ( o b j ,S y s t e m . o u t ) ; C o n t a t oc o n t a t o 2=( C o n t a t o )o b j ; S y s t e m . o u t . p r i n t l n ( c o n t a t o 2 . g e t N o m e ( ) + "" + c o n t a t o 2 . g e t S e x o ( ) ) ; Listagem 05. Fazendo Unmarsheller. Como vocs viram, trabalhar com Java e XML ficou moleza usando JAXB 2. Um grande abrao e at a prxima, Marco Antonio Maciel.

por Marco Antonio Maciel


Marco Antonio Maciel (maciel3000@gmail.com) profissional de TI a mais de 13 anos e sempre atuou com desenvolvimento de sistemas. Tem grande experincia tanto com aplicaes para desktop quanto com aplicaes para web. J trabalhou com Clipper, Visual Basic, Delphi, ASP e PHP, mas sua paixo mesmo o Java e todos os seus sabores. Atualmente trabalha em uma empresa do ramo de sade com as plataformas Java EE e Java SE. www.devmedia.com.br/articles/viewcomp.asp?comp=11547

www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=11547

4/4