Vraptor3 (serialize/deserialize) listas com xstream

Então pessoal, estou com a seguinte situação.

Eu recebo um json de uma coleção serilizada pelo vraptor3 (3.1.0) como esta:


{"list": [
  {
    "id": 1191,
    "cargo": {
      "codigo": "466001",
      "nome": "Técnico em PI"
    },
    "codigoClasse": "A",
    "codigoNivel": "III",
    "dataIngressoCargo": {
      "@class": "sql-timestamp",
      "$": "2006-09-01 00:00:00.0"
    }
  }
]}

usei o modelo simples para serializar a coleção conforme disponível nessa versão mais nova:

Collection<CargoServidor> cargosServidor = obtem()...
this.result.use(json()).from(cargosServidor).include("cargo").serialize();

Código para dserializar:

XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.alias("list", ArrayList.class); //Estou fazendo algo errado aqui?
List<CargoServidor> cargos = (List<CargoServidor>) xstream.fromXML(instream);

Porém na hora de deserializar não está rolando, já tentei criar Wrapper para deserializar a lista, entre outros.
Eu dei uma olhada no github que existe algumas classes deserializer no próprio core do vraptor, porém não entendi como usar, e nem sei se resolve o meu problema.

Será que estou esquecendo de alguma coisa.

achei essa thread do nabble também, porém não sai do lugar: http://old.nabble.com/JSON-Arrays-td21989199.html
Já dei uma fuçada na documentação do Xstream também, será que deixar passar?

Alguma idéia?

Abraços.

Consegui fazer uma gambiarra que funciona…
o XStream não suporta mto bem isso mesmo…

public class ListWrapper {
    private List list;
    //getter
}
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.alias("wrap", ListWrapper.class);
xstream.addImplicitCollection(ListWrapper.class, "list", CargoServidor.class); // o último parâmetro vai ser o target type

String json = //lê o json

ListWrapper wrapper = (ListWrapper) xstream.fromXML("{\"wrap\":" + json + "}");
List<CargoServidor> lista = wrapper.getList();

Fala Lucas tudo certo!

Então,
no final da tarde acabei lendo no faq do xstream que ele não faz isso!! :?

Ai resolvi fazer um “parserzinho genérico”… ficou marretadão, mas ficou genérico para qualquer lista, ou seja,
ele já me retorna a Lista do tipo que sei que vou receber LIst …

não está o código mais lindo , mas funciona…
irei fazer uns testes da maneira que você fez ficou mais bonito e simples.

...//não conhecia
xstream.addImplicitCollection(ListWrapper.class, "list", CargoServidor.class); // o últi
...

Vocês que conhecem o xstream, ficaria elegante implementarmos, isto e mandarmos o patch? o que tu acha?

Abraços.

isso ainda é uma gambiarra, então não é elegante :stuck_out_tongue:

teria que colocar algo no próprio XStream (a classe), tipo um método pra ele saber se virar com a lista…

mas entra na lista de discussões deles e sugere o patch

[]'s