Json + Generics

已查看 52 次
跳至第一个未读帖子

Kaio Valente

未读,
2011年4月29日 18:07:152011/4/29
收件人 caelum-...@googlegroups.com
Criei uma classe utilitária responsável por devolver para a tela um objeto e uma mensagem. O objeto que tenho como atributo dessa classe é de um tipo genérico, conforme a linha a seguir:

Apresentador<Curso> apresentador = new Apresentador<Curso>(curso,Mensagem.SUCESSO);

Onde curso é um objeto Curso e Mensagem.SUCESSO uma String. Ao retornar o objeto apresentador via json, conforme o código:

result.use(Results.json()).from(apresentador).include("objeto").serialize();

A resposta da minha requisição é o seguinte erro:

sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

Tanto a classe Apresentador quanto a classe Curso implementam Serializable.

Seria isso um problema do vraptor?
__
Att.
Kaio Valente

Washington Botelho

未读,
2011年4月29日 19:25:442011/4/29
收件人 caelum-...@googlegroups.com
Oi Kaio,

É um bug do VRaptor para serializar Generics.

Tenta usar esse snapshot em anexo.

--
Washington Botelho

http://wbotelhos.com.br
http://twitter.com/wbotelhos


2011/4/29 Kaio Valente <ksmva...@gmail.com>

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.

vraptor-3.3.2-SNAPSHOT.jar

Kaio Valente

未读,
2011年5月3日 21:12:262011/5/3
收件人 caelum-...@googlegroups.com
Desculpa a demora pra dar um feedback, só hj pude fazer o teste.

Ao trocar o jar do vraptor do "vraptor-3.2.0.jar" pelo que o Washington passou, deu o seguinte erro ao levantar o tomcat:

java.lang.NoClassDefFoundError: org/scannotation/AnnotationDB

Parece que preciso adicionar mais algum jar...
__
Att.
Kaio Valente

Lucas Cavalcanti

未读,
2011年5月3日 21:47:282011/5/3
收件人 caelum-...@googlegroups.com
precisa do jar do scannotation, que está no zip do vraptor

2011/5/3 Kaio Valente <ksmva...@gmail.com>

Kaio Valente

未读,
2011年5月4日 17:56:102011/5/4
收件人 caelum-...@googlegroups.com
Esse snapshot não resolveu o problema de serializar Generics. Continua dando no retorno do json:


sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

Mas resolveu o problema de CircularReferenceException.
__
Att.
Kaio Valente

Lucas Cavalcanti

未读,
2011年5月4日 18:13:052011/5/4
收件人 caelum-...@googlegroups.com

Kaio Valente

未读,
2011年5月4日 18:56:182011/5/4
收件人 caelum-...@googlegroups.com
Dá esse erro ao levantar o tomcat:

java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;
    at br.com.caelum.vraptor.scan.WebBasedClasspathResolver.getClassLoader(WebBasedClasspathResolver.java:42)
    at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scanPackage(ScannotationComponentScanner.java:93)
    at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scanBasePackages(ScannotationComponentScanner.java:80)
    at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scan(ScannotationComponentScanner.java:55)
    at br.com.caelum.vraptor.scan.WebAppBootstrapFactory.create(WebAppBootstrapFactory.java:65)
    at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:83)
    at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:110)
__
Att.
Kaio Valente

Lucas Cavalcanti

未读,
2011年5月4日 19:54:122011/5/4
收件人 caelum-...@googlegroups.com
putz, valeu por apontar isso.. esse método deve existir só no servlet 3.0 =(

de qqer forma não era pra dar o erro de casting no snapshot que o washington te mandou..

pode me mandar a stack trace do erro por favor?
2011/5/4 Kaio Valente <ksmva...@gmail.com>

Anderson Parra

未读,
2011年5月5日 07:16:002011/5/5
收件人 caelum-...@googlegroups.com
Lucas, o método utilizado só existe no servlet 3.0 mesmo. Um amigo pegou esse problema essa semana, mas ainda não tinha dado tempo de reportar.

[]s

2011/5/4 Lucas Cavalcanti <lucasm...@gmail.com>



--
Anderson Parra
cel.: (11) 9761-3862

Kaio Valente

未读,
2011年5月5日 08:06:532011/5/5
收件人 caelum-...@googlegroups.com
Hoje a noite eu mando a stacktrace do erro de casting.
__
Att.
Kaio Valente

Lucas Cavalcanti

未读,
2011年5月5日 10:26:382011/5/5
收件人 caelum-...@googlegroups.com

Kaio Valente

未读,
2011年5月5日 18:43:502011/5/5
收件人 caelum-...@googlegroups.com
Esse snapshot tbm não resolveu =/

Segue stack trace completa:

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
    at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
    at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:51)
    at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.com.senai.ccp.interceptor.LoginInterceptor.intercept(LoginInterceptor.java:33)
    at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
    at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
    at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:87)
    at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
    at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
    at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)
    at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
    at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
    at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
    at br.com.caelum.vraptor.serialization.xstream.XStreamSerializer.getActualType(XStreamSerializer.java:237)
    at br.com.caelum.vraptor.serialization.xstream.XStreamSerializer.include(XStreamSerializer.java:208)
    at br.com.senai.ccp.controller.PropostaController.adicionarCurso(PropostaController.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
    ... 45 more
__
Att.
Kaio Valente
回复全部
回复作者
转发
0 个新帖子