Xstream com interface

Bom dia galera, beleza?

Estou com um problema que é o seguinte.

Estou usando XStream 1.3 e quero converter uma string em um objeto.

Porem, o codigo em java ja estava implementado e com isso possuo algumas interfaces.

xml

99999999999999 <solicitante

o meu problema que a classe Solicitante possui uma Identificacao que é uma interface e esta interface é implementada pela classe InterfaceCNPJ.

Assim, nao consigo fazer a string virar um objeto solicitante.

Alguem poderia me ajudar?

Att,

donatinho

O xml que você postou é o que está gerando ou é o que você deseja?
Explique um pouco melhor seu problema…

E faça um favor para você mesmo, não use o XStream… Já usei e sempre tive alguns problemas. Depois que encontrei o Simple XML não tive mais nenhum problema. Dê uma olhada http://simple.sourceforge.net/

[]´s

Oi davidbuzatto, como vai?

Pois bem, vou tentar ser mais claro.

O xml é o seguinte:

porem a classe Solicitante implementa a interface Identificacao que instancia um objeto IdentificacaoCNPJ.

SolicitanteModel solMod = new SolicitanteModel();
solMod.setIdentificacao(new IdentificacaoCNPJ("999999999999999"));

Assim, estou usando o XStream, porém consigo transformar de xml para objeto, so que nao consigo ler o valor do atributo CNPJ, sempre retorna vazio.

:shock:

Galera, nao sei se estou sendo claro com minha duvida…

entao, acho que vou melhor a pergunta…

como faco para converter de string para objeto classes que implementam interfaces . . .

Bom dia a todos!

Consegui resolver o problema da seguinte forma:

  • criei uma classe que implementa converter
public class IdentificacaoCNPJConverter implements Converter {

	public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
		
	}

	public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
		IdentificacaoCNPJ iden = null;
		
		while(reader.hasMoreChildren()) {
			reader.moveDown();
			
			if(reader.getNodeName() != null && reader.getNodeName().equals("CNPJ")) {
				iden = new IdentificacaoCNPJ(reader.getValue());
			}
			
			reader.moveUp();
		}
		
		return iden;
	}

	public boolean canConvert(Class clazz) {
		return clazz.equals(IdentificacaoIf.class);
	}
}
  • na classe do confXstream construi o codigo:
xstream.alias("solicitante", SolicitanteModel.class);
		xstream.alias("identificacao", IdentificacaoIf.class);
		
		xstream.alias("identificacao", IdentificacaoCNPJ.class);
		xstream.aliasField("CNPJ", IdentificacaoCNPJ.class, "identificacao");

assim, a conversao de string para objeto funcionou…

See ya

donatinho

:roll: