Problema com JAXB [RESOLVIDO]

1 resposta
J

Primeiramente, bom dia!

Estou estudando jaxb e segue o código fonte (os imports foram omitidos):

//Classe Item
@XmlRootElement    
public class Item  
{
	public int id;
	public String text;  
	public String[] a;	
	public Detalhes d;
}
//Classe Detalhes
@XmlType
public class Detalhes {
	String n;
	public Detalhes(String N) {
		n = N;
	}
}
//Classe main
public class Main {
	public static void main( String[] args ) throws Exception {
		String j[] = {"a", "e", "g", "f", "h", "d"};

		Item i = new Item();  
		i.text = "hello";  
		i.id = 1;   
		i.a  = j;
		i.d  = new Detalhes("k");

		Marshaller m = JAXBContext.newInstance( Item.class ).createMarshaller();  

		m.marshal( i, new FileOutputStream(new File("a.xml")) );
	}
}

Essa é uma modificação de um exemplo que peguei na net para estudar.
Quando coloco a classe Item sem o objeto da classe detalhes:

@XmlRootElement    
public class Item  
{
	public int id;
	public String text;  
	public String[] a;	
//	public Detalhes d;
}

funciona (alterando no main também), porém se eu coloco aparece a mensagem "Source not found" no eclipse e não compila.

Não estou usando getters e setters porque nesse é só pra testes mesmo.

O mesmo erro acontece no projeto que estou fazendo, porém nele não precisa ser uma classe como objeto de outra para dar o erro.

Desde já agradeço qualquer ajuda!

1 Resposta

J

Encontrei o problema para o Marshaller. :smiley:

Peguei um exemplo na net:

O problema é que é obrigatório criar o objeto separado e depois colocar no obj a ser transformado em xml e passar o valor por set e não pelo construtor, ou seja, no lugar de:

Item i = new Item(); i.text = "hello"; i.id = 1; i.a = j; i.d = new Detalhes("k");

Colocar:

Item i = new Item(); i.text = "hello"; i.id = 1; i.a = j; Detalhes d = new Detalhes(); //Deixei identado para mostrar a diferença d.setN("k"); i.d = new Detalhes(d);

Criado 6 de abril de 2012
Ultima resposta 7 de abr. de 2012
Respostas 1
Participantes 1