[resolvido] dúvida com XStream + Enum

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>gilbrother@hotmail.com</identificador>
      </mensageiro>

e não apenas:

<mensageiro>
        <tipoMensageiro>MSN_MESSENGER</tipoMensageiro>
        <identificador>gilbrother@hotmail.com</identificador>
      </mensageiro>

:?: :?:

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

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

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!

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…

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.

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

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)