Converter xml (classe java) em classe flex

Olá Pessoal estou gerando um xml com o XStream e enviando para o flex, mas estou com dificuldade de
conseguir convertê-lo para arraycollection para o grid.

Alguém sabe como posso fazer isto. Li muitos artigos na net, mas não consegui nenhum que funcionasse.

este é o xml que o java gera:

<list>
  <br.com.cpb.gtf.model.Fone>
    <id_Fone>9748</id_Fone>
    <nomePessoa>WELTRON</nomePessoa>
    <dDD>11</dDD>
    <fone1>81600567</fone1>
    <dDD2>0</dDD2>
    <fone2> </fone2>
    <dDD3>0</dDD3>
    <fone3> </fone3>
    <observacao></observacao>
  </br.com.cpb.gtf.model.Fone>
  <br.com.cpb.gtf.model.Fone>
    <id_Fone>11655</id_Fone>
    <nomePessoa>WENDEL BRAUN</nomePessoa>
    <dDD>11</dDD>
    <fone1>57521431</fone1>
    <dDD2>0</dDD2>
    <fone2> </fone2>
    <dDD3>0</dDD3>
    <fone3> </fone3>
    <observacao></observacao>
  </br.com.cpb.gtf.model.Fone>
</list>

Agradeço muito a ajuda!

Vc poderia usar um serializador, como BlazeDS ou GraniteDS para fazer chamadas remotas. Aí vc simplesmente faria suas classes em java e em flex e esses frameworks se encarregariam do trabalho. Agora se quiser fazer o parsing do xml, leia sobre E4X para saber como navegar em um XML no flex.
Precisando de um curso, de uma olhada nos da Nuccitec

Olá renzonuccitelli!

Obrigado pela resposta. Na realidade eu já utilizo o remoteobject com BlazeDS, mas por causa do lazy loading,
tentei uma alternativa restfull com o xml.

Eu consegui fazer a leitura, contudo, ao meu ver não é a forma ideal, pois é muito trabalhosa. Bem vou deixar o que fiz, talvez ajude alguém com o problema
parecido, mas volto a dizer que achei esta é uma solução ruim, mas resolveu:

coleção para armazenar a lista de telefones( ou a lista do tipo da sua classe)


[Bindable]
private var fones 			: ArrayCollection;

minha classe no flex, uma representação da classe no java



	[RemoteClass(alias="br.com.sistema.model.Fone") ]
	[Bindable]
	public class Fone
	{		
		public var id_Fone:Number;		
		public var nomePessoa:String; 
		public var login:String; 
		public var dDD:Number;
		public var fone1:String;
		public var dDD2:Number;
		public var fone2:String;
		public var dDD3:Number;
		public var fone3:String;
		public var observacao:String;		
		public var ramal:Number;
		public var ramal2:Number;		
		public var departamento:Departamento;		
		public var nomeDepartamento:String;
		public var nomeConjuge:String;
		public var voip:String;
		public var diaAniversario:Number;
		public var mesAniversario:Number;		
		public var usuario:Adm_Usuario;		
		public var dataCadastro:Date;
	
		public function getFone(ddd : String, fone : String ):String
		{
			var phoneFormatter : PhoneFormatter = new PhoneFormatter();
			phoneFormatter.formatString = "(##) ####-####";			
			
			var foneFormatado : String = Funcoes.nullToString( fone ).replace("-","" );
			
			if (foneFormatado.length == 8)
			{				
				foneFormatado = phoneFormatter.format(  ddd + foneFormatado );
			}
			else
			{
				ddd + "-" + Funcoes.nullToString( fone );
			}
			
			return  foneFormatado  
			//return "(" + ddd  + ") -" + Funcoes.nullToString( fone );
		}
			
		public function getRamalEDepartamento():String
		{
			var depto  : String = "";
			var sRamal : String = "";
			
			if ( departamento != null )
			{
				depto = departamento.nome + " - " 
			}

			if ( ramal != 0 )
			{
				sRamal = ramal.toString();
			}
			
			return  depto + sRamal;
		}
		
		public function Fone()
		{
		}
	}

chamando a servlet pelo HTTPService, como um object e não o xml.
O HTTPSercvice converte automaticamente para object, na estrutura parecida com o xml

	<mx:HTTPService 
		id="telefoneServlet"
		showBusyCursor="true"
		url="http://localhost:8080/sistema/getfones"
		resultFormat="object"
		concurrency="last"
		result="getFonesXmlResult(event)"
		fault="telefoneServlet_faultHandler(event)"	/>

function que recebe o resultado do HTTPService


private function getFonesXmlResult(event:ResultEvent):void
{
				
				fones = null;
                                
                                //verificando se o resultado não veio nulo
				if ( event.result.list != null )
				{
                                        //recebendo a lista com os objetos, só que o flex os traz com o ObjectProxy e não como a classe Fone. 
                                        //O Flex não deixa eu fazer o casting para Fone, o que me obriga a fazer atributo por atributo

	 				var objList : Object =  event.result.list["br.com.sistema.model.Fone"];
					fones = new ArrayCollection();
									
					if (objList.hasOwnProperty("length"))
					{
                                                //sou obrigado a percorrer toda a lista e pegar um a um e campo a campo 
						for each (var p:ObjectProxy in objList )
						{
							fones.addItem(getFoneFromObjProxy(p));
						}
					}
					else
					{
						fones.addItem(getFoneFromObjProxy(objList as ObjectProxy ))
					}
}

//criando um objeto Fone campo a campo e retornando ele para ser inserido na lista de Fones

			private function getFoneFromObjProxy(p : ObjectProxy):Fone
			{
				var f : Fone = new Fone();
				f.id_Fone		=	p.id_Fone;
				f.nomeConjuge	=	p.nomeConjuge;
				f.nomePessoa	=	p.nomePessoa;
				
				if (p.dataCadastro is Date )
				{
					f.dataCadastro	=	p.dataCadastro;
				}
				
				f.fone1			=	p.fone1;
				f.dDD			=	p.dDD;
				
				f.fone2			= 	p.fone2;
				f.dDD2			= 	p.dDD2;
				
				f.fone3			=	p.fone3;
				f.dDD3			=   p.dDD3;
				
				if (!isNaN(p.ramal))
				{
					f.ramal			=	p.ramal;
					f.ramal2		=	p.ramal2;
				}
 				else
				{
					f.ramal = 0;
				}
 					
					
				
				if (p.departamento != null)
				{
					var depto : Departamento = new Departamento();
					depto.id_Departamento	=	p.departamento.id_Departamento
					depto.nome				=	p.nome;
					
					f.departamento	=	depto;
				}
				
				f.diaAniversario	=	p.diaAniversario;
				f.mesAniversario	=	p.mesAniversario;
				f.observacao		= 	p.observacao;

				return f;
			}

Depois eu apenas coloco a lista de telefones no Datagrid.

É isso aí galera, espero que possa ajudar alguém!

O Fórum do flex aqui no GUJ, não é muito legal, geralmente vejo poucas respostas, se alguém
souber de algum fórum legal, me avise!

Um abraço!