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

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

[code]
@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;

}[/code]

Saida:

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

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

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

Consegui… Segue a solução:

[code]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;
}

}[/code]

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);
		}

	}