Gerando XML com JAXB

Java Architecture for XML Binding ou simplesmente JAXB é a solução muito boa e prática para quem precisa trabalhar com leitura e criação de arquivos XML em java.

Abaixo um exemplo que fiz para um teste em uma POC.

Definindo os Bean que irei usar para gerar o XML

Resolver e Municao.

A ideia é que um Revolver tenha uma lista de munições e assim eu consiga gerar um XML que me represente um resvoler e suas munições.

Beans


//Primeiro Bean

@XmlRootElement(name="root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Revolver {

     @XmlElement
     private Integer calibre;
     
     @XmlElement
     private String serie;
     
     @XmlElementWrapper(name="itensTambor")
     private List tambor;

     public Integer getCalibre() {
          return calibre;
     }
     public void setCalibre(Integer calibre) {
          this.calibre = calibre;
     }
     public String getSerie() {
          return serie;
     }
     public void setSerie(String serie) {
          this.serie = serie;
     }
     public List getTambor() {
          return tambor;
     }
     public void setTambor(List tambor) {
          this.tambor = tambor;
     }

}

// Segundo Bean

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="rootTambor")
@XmlAccessorType(XmlAccessType.FIELD)
public class Camara {

     @XmlElement
     private String municao;

     public String getMunicao() {
          return municao;
     }

     public void setMunicao(String municao) {
          this.municao = municao;
     }
}

Note que o segredo aqui é simplesmente anotar os atributos dos beans que você quer sejam tags do xml.
A vantagem de usar as annotations é não ter que você mesmo escrever/gerar um arquivo XSD.
Agora que tenho os objetos que quero usar para gerar o arquivo XML, o segredo é so popular o objeto e invocar o JAXB.


import javax.xml.bind.annotation.XmlElement;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import br.com.foxtec.bean.Camara;
import br.com.foxtec.bean.Revolver;

public class UsarArma {

/**
* @param args
*/
public static void main(String[] args) {

     Revolver revolver = new Revolver();
     revolver.setCalibre(45);
     revolver.setSerie("4587AXCd556");

     List tambor = new ArrayList();
     Camara camara = new Camara();
     camara.setMunicao("OGIVAL");
     tambor.add(camara);
     
     camara = new Camara();
     camara.setMunicao("OGIVAL");
     tambor.add(camara);
     
     camara = new Camara();
     camara.setMunicao("PONTA OCA");
     tambor.add(camara);

     revolver.setTambor(tambor);
     JAXBContext context;
     try {
          context = JAXBContext.newInstance(new Class[]{Revolver.class});
          Marshaller marshaller = context.createMarshaller();
          marshaller.marshal(revolver, new FileWriter("revolver.xml"));
     } catch (JAXBException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
     } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
     }

}

Para fazer o processo inverso :

     JAXBContext context = JAXBContext.newInstance(new Class[]{Revolver.class});
     Unmarshaller unmarshaller = context.createUnmarshaller();
     Revolver revolver = (Revolver) unmarshaller.unmarshal(new File("revolver.xml"));

Referências
Java Architecture for XML Binding (JAXB)

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s