[RESOLVIDO] XStream - Problema com método fromXML

2 respostas
TheKill

Fala pessoal, venho aqui postar esse problema que encontrei…
Imagine o seguinte objeto:

Carro;

int nroPortas;
BigDecimal valor;
int ano;

gets and sets
...

Beleza… gerei o xml gravei tudo OK.

Segundo passo.
Leio o XML tudo OK.

Terceiro passo.
Objeto Carro sofre mudanças.

Carro;

BigDecimal valor;
int ano;

gets and sets
...

Agora vou salvar os novos dados na tela visual
Leio o XML salvo anteriormente que ainda possui os 3 campos
e BUUUM campo nroPortas nao existe mais

Nota.: O problema é quando faço o fromXML(“XML”);
ele não consegue detectar que o objeto sofreu mudanças.

2 Respostas

Kanin_Dragon

Já tive o mesmo problema que você, o xstream não consegue fazer o parse do seu XML para um objeto caso esse objeto não tenha atributos com os mesmos nomes dos nós do seu xml.

A solução que que adotei depois de muita pesquisa foi sobreescrever o método “wrapMapper” do Xstream.

Basta utilizar o trecho de código abaixo.

XStream xstream = new XStream(new DomDriver()) {
            @Override
            protected MapperWrapper wrapMapper(MapperWrapper next) {
                return new MapperWrapper(next) {
                    @Override
                    public boolean shouldSerializeMember(Class definedIn,
                            String fieldName) {
                        if (definedIn == Object.class) {
                            return false;
                        }
                        return super.shouldSerializeMember(definedIn, fieldName);
                    }
                };
            }
        };
TheKill

Kanin Dragon:
Já tive o mesmo problema que você, o xstream não consegue fazer o parse do seu XML para um objeto caso esse objeto não tenha atributos com os mesmos nomes dos nós do seu xml.

A solução que que adotei depois de muita pesquisa foi sobreescrever o método “wrapMapper” do Xstream.

Basta utilizar o trecho de código abaixo.

XStream xstream = new XStream(new DomDriver()) { @Override protected MapperWrapper wrapMapper(MapperWrapper next) { return new MapperWrapper(next) { @Override public boolean shouldSerializeMember(Class definedIn, String fieldName) { if (definedIn == Object.class) { return false; } return super.shouldSerializeMember(definedIn, fieldName); } }; } };

Porra, agradeço pelo sua ajuda…
Realmente era exatamente isso que estava procurando…

Comunidade Java o/

Criado 23 de fevereiro de 2011
Ultima resposta 23 de fev. de 2011
Respostas 2
Participantes 2