Mapear objetos de XML [RESOLVIDO]

Caros,

De quais formas posso mapear objetos (são diferentes classes) vindos de um único arquivo XML.
Estou tentando com Xstream, mas parece que não suporta classes diferentes em um mesmo XML.

Grato.

exemplo:

<list>
  <classeX>
    <attr></attr>
  </classeX>
  <classeX>
    <attr></attr>
  </classeX>
  <classeX>
    <attr></attr>
  </classeX>
</list>
  <classeY>
    <attr></attr>
  </classeY>
  <classeZ>
    <attr></attr>
  </classeZ>

Um exemplo:

ByteArrayInputStream inputStream = new ByteArrayInputStream(xml.getBytes("UTF-8"));
		
XStream xStream = new XStream();
		
xStream.alias("classeX", ClasseX.class);
		
ClassePrincipal classePrincipal = (ClassePrincipal) xStream.fromXML(inputStream);

Você deve pesquisar sobre o método alias do xStream

Mas posso extrair objetos de classes diferentes em um unico XML?

A outra classe é atributo da primeira ou são duas classes separadas?

Separadas.

Bom, nunca trabalhei com uma estrutura assim e não sei dizer se o xStream trata esse tipo.

Mas, por mais que os dois objetos/classes sejam separados, acredito que ambos sejam atributos de uma classe principal, certo?

Por que geralmente o XML segue o padrão:

<tagPrincipal>
    <outraTag>
        <atributoTag>alguma coisa</atributoTag>
    </outraTag>
    <maisUmaTag>
        ....
        ....
    </maisUmaTag>
</tagPrincipal>

Se não for, já não saberei como ajudar. :S

Por que esse XML é gerado assim? As informações são tão diferentes para ter que ficarem fora de uma tag principal?

Pra não complicar, coloquei todos como atributos em uma classe principal. Porém surgiu outra dúvida no mapeamento de um ArrayList de objetos como atributo.

public class ClassePrincipal {

private String attr1;
private List<ClasseX> classesX;
}

Como ficaria o stream.alias() para o atributo tipo List acima?
E tb como ficaria o xml?

Abraço.

<principal>
  <pessoa>
    <nome>Ulisses</nome>
    <idade>27</idade>
  </pessoa>
  <produtos>
    <produto>
      <nome>Sabão</nome>
      <valor>10</valor>
    </produto>
    <produto>
      <nome>Farinha</nome>
      <valor>2</valor>
    </produto>
  </produtos>
</principal>
package xtream;

import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.XStream;

public class Teste {
	
	public static void main(String args[]) {
		XStream xs = new XStream();
		
		xs.alias("principal", Principal.class);
		xs.alias("produto", Produto.class);
		xs.alias("pessoa", Pessoa.class);
		xs.alias("produtos", List.class);
		
		Pessoa pa = new Pessoa();
		pa.nome = "Ulisses";
		pa.idade = 27;
		
		Produto p = new Produto();
		p.nome = "Sabão";
		p.valor = 10;
		
		Produto p2 = new Produto();
		p2.nome = "Farinha";
		p2.valor = 2;
		
		List<Produto> produtos = new ArrayList<Produto>();
		produtos.add(p);
		produtos.add(p2);

		Principal principal = new Principal();
		principal.pessoa = pa;
		principal.produtos = produtos;

		String xml = xs.toXML(principal);
		System.out.println(xml);

		Principal principal2 = (Principal) xs.fromXML(xml);
		
	}
}
package xtream;

import java.util.List;

public class Principal {
	
	public Pessoa pessoa;
	public List<Produto> produtos;
	
}
package xtream;

public class Pessoa {
	
	public String nome;
	public int idade;
	
}
package xtream;
public class Produto {
	
	public String nome;
	public int valor;

}

ul1sses, resolveu meu problema.
Agradeço a explicação.
Abraço.