Introduo a JAXB 2
Introduo a JAXB 2
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.
27/04/13
} 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
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
< ? 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.
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=11547
4/4