[resolvido] dúvida com XStream + Enum

5 respostas
paulovittor23

Boa noite !

Alguém sabe por que quando tento serializar este enum:

public enum TipoMensageiro {
	
	MSN_MESSENGER{
		{ descricao = "Msn Messenger"; } 
	},
	ICQ{
		{ descricao = "Icq"; } 
	},
	GOOGLE_TALK{
		{ descricao = "Google Talk"; } 
	},
	SKYPE{ 
		{ descricao = "Skype"; } 
	},
	YAHOO_MESSENGER{ 
		{ descricao = "Yahoo Messenger"; } 
	},
	AOL_INSTANT_MESSENGER{ 
		{ descricao = "Aol Instant Messenger"; } 
	};
	
	String descricao = null;
	
	public String getDescricao() {
		return descricao;
	}
	
}

o resultado gerado é:

<mensageiro>
        <tipoMensageiro class="meu.pacote.TipoMensageiro">MSN_MESSENGER</tipoMensageiro>
        <identificador>[email removido]</identificador>
      </mensageiro>

e não apenas:

<mensageiro>
        <tipoMensageiro>MSN_MESSENGER</tipoMensageiro>
        <identificador>[email removido]</identificador>
      </mensageiro>

:?: :?:

obs.: O segundo resultado só acontece quando eu retiro o atributo descricao do enum…

desde já agradeço a atenção !

5 Respostas

bcartaxo

Oq vou falar é especulação baseada no q eu tenho estudado pra tirar cetificação, são suposições, aviso logo =P

enums são similares a classes, porém cada elemento é como se fosse uma constante estática, porém quanto vc insere uma atributo é como se ele virasse uma classe de fato, e cada lemento tivesse q ser instanciado. Então o XStream interpreta como se fosse uam classe.

VOu lembrar mais uma vez, isso é uma total especulação sem nenhum fundamento teórico. Espera pra ver se entra alguém pra explicar de fato isso.

Flw

Paulo_Silveira

Paulo!

Nao use enum dessa maneira para setar um atributo dela! Utilize o construtor!! Crie um construtor na enumeracao que receba e popule descricao, ai declare a enum como enum Tipo {MSN(“msn msgner…”)} e assim por diante…

Isso nao eh uma resposta para o seu problema com o xstream e nao sei se resolve…

mister_m

Existe uma razão muito simples do seu problema com XStream. Da forma como você declarou suas enums, cada uma delas é uma subclasse anônima da classe da enum e por isso o XStream se perde e resolve qualificar o nome da classe. Seguindo a dica do Paulo, creio que seu problema será resolvido.

paulovittor23

Hum…valeu pela ajuda de todos !

A questão em si é, eu queria que apartir de um tipo de enum eu tivesse pré-definida uma descrição do mesmo…ou seja, quando eu desserializasse um objeto a partir do tipo do enum recuperado eu poder buscar a descrição do mesmo…

Vou seguir o conselho do Paulo e utilizar o construtor do enum para tentar fazer isso…

Pena que só vou poder fazer isso a noite, quando sair do trabalho… :roll:

Depois eu posto aqui o resultado ou qqr outra dúvida que apareça !

[]s

paulovittor23

funcionou perfeitamente a idéia de usar o construtor !

public enum TipoMensageiro {
	
	AIM( "AOL Instant Messenger" ),
	ICQ( "Icq" ),
	GTALK( "Google Talk" ),
	MSN ( "Msn Messenger" ),
	SKYPE( "Skype" ),
	YAHOO( "Yahoo Messenger" );
	
	private String descricao = null;
		
	TipoMensageiro( String descricao ){
		this.descricao = descricao;
	}

	public String getDescricao() {
		return descricao;
	}
	
}

Tnks ! 8)

Criado 28 de junho de 2007
Ultima resposta 29 de jun. de 2007
Respostas 5
Participantes 4