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.
alias
Abril 17, 2013, 2:04pm
#3
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 = "<proposicao Ano='2010' Numero='8050' Tipo='PL' data='1154097812245'><idProposicao>490340</idProposicao></proposicao>";
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);
}
}