Ola galera!
Estou desenvolvendo uma modulo para geração de xml e recupereação do mesmo, estou utilizando as seguintes classes para fazer isso:
Fábrica de Xml
@XmlRegistry
public class ObjectFactory {
public ObjectFactory(){
}
public Pessoa createPessoa() {
return new Pessoa();
}
public Endereco createEndereco() {
return new Endereco();
}
public IndicadorComposicao createIndicador(){
return new IndicadorComposicao();
}
public IndicadorComposicaoItem createComposicaoGrupoIndicador() {
return new IndicadorComposicaoItem();
}
}[/code]
Classe que irá ser a tag Pai
[code]
@XmlRootElement
public class IndicadorComposicao {
private String descricao;
private Long idIndicador;
private Collection<IndicadorComposicaoItem> composicao = new ArrayList<IndicadorComposicaoItem>();
public Collection<IndicadorComposicaoItem> getComposicao() {
return composicao;
}
public void setComposicao(Collection<IndicadorComposicaoItem> lista) {
this.composicao = lista;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Long getIdIndicador() {
return idIndicador;
}
public void setIdIndicador(Long idIndicador) {
this.idIndicador = idIndicador;
}
}
[/code]
Classe que conterá as tags filhas
[code]package com.consist.xml;
import javax.xml.bind.annotation.XmlType;
@XmlType
public class IndicadorComposicaoItem {
private Long idIndicador;
private double peso;
public Long getIdIndicador() {
return idIndicador;
}
public void setIdIndicador(Long idIndicador) {
this.idIndicador = idIndicador;
}
public double getPeso() {
return peso;
}
public void setPeso(double peso) {
this.peso = peso;
}
}[/code]
E a classe main para ver se ta funcionando certinho
[code]public class Teste {
public static void main(String teste[]) {
Collection<IndicadorComposicaoItem> lista = new ArrayList<IndicadorComposicaoItem>();
IndicadorComposicao indicador = new IndicadorComposicao();
indicador.setDescricao("Receita");
indicador.setIdIndicador(new Long(1));
IndicadorComposicaoItem comp = new IndicadorComposicaoItem();
comp.setIdIndicador(new Long(10));
comp.setPeso(70);
lista.add(comp);
IndicadorComposicaoItem comp2 = new IndicadorComposicaoItem();
comp2.setIdIndicador(new Long(20));
comp2.setPeso(30);
lista.add(comp2);
indicador.setComposicao(lista);
JAXBContext context = null;
Marshaller marshaller = null;
// Gera o arquivo XML
try {
context = JAXBContext.newInstance(com.consist.xml.IndicadorComposicao.class);
marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(indicador, System.out); // mostra no console como o xml será gerado
File f = new File("src/composicao.xml");
marshaller.marshal(indicador, new FileOutputStream(f)); // gera o arquivo composica.xml
} catch (Exception e) {
e.printStackTrace();
}
// recupera o arquivo XML
try {
Unmarshaller unmarshaller = context.createUnmarshaller();
Object obj = unmarshaller.unmarshal(new File("src/composicao.xml"));
IndicadorComposicao ind2 = (IndicadorComposicao)obj;
System.out.println( ind2.getDescricao() );
} catch (Exception e) {
e.printStackTrace();
}
}
}[/code]
Galera, fuciona certinho, ele mostra no console dessa forma:
[code]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<indicadorComposicao>
<composicao>
<idIndicador>10</idIndicador>
<peso>70.0</peso>
</composicao>
<composicao>
<idIndicador>20</idIndicador>
<peso>30.0</peso>
</composicao>
<descricao>Receita</descricao>
<idIndicador>1</idIndicador>
</indicadorComposicao>
Na classe Main eu fiz 2 comentários, o 1º // mostra no console como o xml será geradom, e o 2º // gera o arquivo composica.xml.
O que eu quero é uma maneira que do mesmo jeito que ele mostra no console e cria o arquivo .xml, eu quero fazer com que ele jogue o conteúdo em uma String. É possível? Alguém sabe me dizer? Ou até mesmo jogar para uma variavel do tipo XML.
Desde já agradeço!