Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG include/exclude IllegalArgumentException: Field path 'param...' doesn't exists in interface java.util.Collection #438

Open
locoepoco opened this issue May 17, 2012 · 5 comments

Comments

@locoepoco
Copy link

include/exclude lança exception quando a Collection/List está dentro de outra classe.

Ex:

public class Grid<T> {
    private final int page;
    private final int total;
    private final int limit;
    private final boolean success;
    private final Collection<T> list;

No controller na hora de serializar gostaria de retirar alguns campos da lista, pegar somente o que for necessário.

Com include tentei assim:

result.use(json()).withoutRoot()
.from(new Grid<Bairro>(page, this.repository.count(), limit, true, "get", bairroList))
.include("list.id", "list.nome" etc....)//para pegar apenas alguns campos da lista
.serialize();

Com exclude:

result.use(json()).withoutRoot()
.from(new Grid<Bairro>(page, this.repository.count(), limit, true, "get", bairroList))
.include("list")//para incluir a lista
.exclude("list.id", "list.nome" etc....)//para tentar remover alguns campos da lista.
.serialize();

Nas duas tentativas, é lançada a exception:

09:23:04,113 DEBUG [XStreamConverters ] registered Xstream converter forbr.com.caelum.vraptor.validator.MessageConverter
09:23:04,113 DEBUG [XStreamConverters ] registered Xstream converter forbr.com.caelum.vraptor.serialization.xstream.XStreamConverters$NullConverter
09:23:04,130 DEBUG [DefaultExceptionMapper] find for exception class java.lang.IllegalArgumentException
09:23:04,130 DEBUG [DefaultExceptionMapper] find for exception class java.lang.NullPointerException
17/05/2012 09:23:04 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [default] in context with path [/siscompras] threw exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.IllegalArgumentException: Field path 'list.nome' doesn't exists in interface java.util.Collection
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)

Um comentário a fazer é que se eu uso a collection/List como argumento para o from(List) ele permite fazer exclude/include.

@renanreismartins
Copy link
Contributor

A versão 3.5 que tem o plugin de serialização de json (https://github.com/renanreismartins/vraptor-gson), corrige os problemas de serialização de json

@garcia-jj
Copy link
Member

@renanreismartins, há testes unitários que cobrem este cenário?

@garcia-jj
Copy link
Member

Escrevi algumas linhas para testar este cenário e não consegui reproduzir o bug. Inclusive o utilitário para Ext-JS usa este mesmo tipo de classe e funciona corretamente. https://gist.github.com/garcia-jj/5381386

Acredito que esta issue pode ser finalizada.

@renanreismartins
Copy link
Contributor

Oi Otávio não haviam testes, achei que tinha algo parecido em um projeto mas não achei. No seu teste dá certo porque o Grid tem o tipo genérico definido Flight, no caso do amigo o tipo não é definido. É T, portando realmente ainda acontece o erro.

@garcia-jj
Copy link
Member

Hmmm, entendi. Fiz os testes com o generic T e o teste falha tanto no XStream quando no Gson.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants