XStream - Atributo de XML pode ser uma Classe Java ou apenas valor literal?

4 respostas
A

String xml ="
<proposicao Ano='2010' Numero='8050' Tipo='PL'>
<idProposicao>490340</idProposicao>
</proposicao>
";

@XStreamAlias("proposicao")
public class ProposicaoTO {
	
	@XStreamAlias("idProposicao")
	private Long id;
	
	@XStreamAsAttribute
	@XStreamAlias("Tipo")
	private TipoProposicaoTO tipoProposicao;

	@XStreamAsAttribute
	@XStreamAlias("Numero")
	private int numero;

	@XStreamAsAttribute
	@XStreamAlias("Ano")
	private int ano;
}

Saida:

ProposicaoTO(id=490340, tipoProposicao=null, numero=8050, ano=2010)

4 Respostas

A

Já criei diversos Converts. Acho que é uma limitação mesmo da ferramenta.

alias

Pode ser uma classe java sim, do jeito que vc fez, mas esse seu atributo está instanciado? Pela saída que vc colocou ai, nao…e o XStream não imprime no xml os atribulos nulos

A

Consegui.. Segue a solução:

public class Test {

	public static void main(String[] args) {
		String x = "&lt;proposicao Ano='2010' Numero='8050' Tipo='PL' data='1154097812245'&gt;&lt;idProposicao&gt;490340&lt;/idProposicao&gt;&lt;/proposicao&gt;";

		XStream xstream1 = new XStream();
		xstream1.processAnnotations(ProposicaoWebServiceTO.class);
		xstream1.registerConverter(new Test().new TipoConverter());
		xstream1.registerConverter(new SingleValueCalendarConverter());
		System.out.println(xstream1.fromXML(x));
	}

	@XStreamAlias("proposicao")
	class ProposicaoWebServiceTO {

		@XStreamAlias("idProposicao")
		private Long id;

		@XStreamAsAttribute
		@XStreamAlias("Tipo")
		private TipoProposicaoTO tipoProposicao;

		@XStreamAsAttribute
		@XStreamAlias("Numero")
		private int numero;
		
		@XStreamAsAttribute
		private GregorianCalendar data = new GregorianCalendar();
		
	}
	
	

	@Data
	class TipoProposicaoTO {
		private String siglaProposicao;
	}
}
A
class TipoConverter implements SingleValueConverter {

		public String toString(Object obj) {
			return ((TipoProposicaoTO) obj).getSiglaProposicao();
		}

		public Object fromString(String name) {
			TipoProposicaoTO tipoProposicaoTO = new TipoProposicaoTO();
			tipoProposicaoTO.setSiglaProposicao(name);
			return tipoProposicaoTO;
		}

		public boolean canConvert(Class type) {
			return type.equals(TipoProposicaoTO.class);
		}

	}
Criado 17 de abril de 2013
Ultima resposta 17 de abr. de 2013
Respostas 4
Participantes 2