VRaptor 3.1 - Serialização json

Estou tentanto serializar um objeto utilizando Results.json, e esta dando a seguinte exception:

[quote]
br.com.caelum.vraptor.InterceptionException: com.thoughtworks.xstream.core.TreeMarshaller$CircularReferenceException:
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
Caused by: com.thoughtworks.xstream.core.TreeMarshaller$CircularReferenceException:
at com.thoughtworks.xstream.core.TreeMarshaller.convert(TreeMarshaller.java:83)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:78)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:157)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:148)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.visit(AbstractReflectionConverter.java:118)
at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:129)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:100)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:58)
at com.thoughtworks.xstream.core.TreeMarshaller.convert(TreeMarshaller.java:86)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:78)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:157)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:148)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.visit(AbstractReflectionConverter.java:118)
at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:129)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:100)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:58)
at com.thoughtworks.xstream.core.TreeMarshaller.convert(TreeMarshaller.java:86)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:78)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:63)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:56)
at com.thoughtworks.xstream.core.TreeMarshaller.convert(TreeMarshaller.java:86)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:78)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:63)
at com.thoughtworks.xstream.core.TreeMarshaller.start(TreeMarshaller.java:98)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.marshal(AbstractTreeMarshallingStrategy.java:38)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:837)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:826)
at com.thoughtworks.xstream.XStream.toXML(XStream.java:801)
at br.com.caelum.vraptor.serialization.xstream.XStreamSerializer.serialize(XStreamSerializer.java:195)
at br.com.rkam.clog.controller.CooperadoController.jaExiste(CooperadoController.java:103)
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:50)
… 39 more[/quote]

o json gerado é esse:

[quote]{“cooperado_$$_javassist_9”: {
"@resolves-to": “cooperado”,
“cnpj”: 76890987689098,
“nome”: “jose da silva”,
“endereco”: “”,
“cidade”: “”,
“uf”: “”,
“email”: “”,
“telefone”: “(78) 9098-7790”,
“contato”: “”,
“situacao”: “A”,
“empresa”: {
“codigo”: 5,
“descricao”: “TESTE1”,
“situacao”: “A”
},
“motoristas”: [
false,
{
"@class": “cooperado”[/quote]

Alguém tem idéia do que pode estar acontecendo?

referencia circular…

evite-a excluindo o campo que dá essa referencia circular…

vendo o objeto json gerado, como o que esta postado aqui no tópico eu não consegui identificar o que esta gerando a referência circular, alguma dica?

vc tah serializando um proxy do hibernate…
vc tá usando a última versão do xstream? a 1.3.1?

Na teoria não deveria ser um proxy, pois estou testando se existe antes de serealizar, como o código abaixo:

public void jaExiste(Cooperado cooperado){ Cooperado coop = this.service.obter(cooperado); if(coop != null && coop.getCnpj() > 0){ this.result.use(Results.json()).from(coop).exclude("motoristas").serialize(); } }

Sim, estou usando a ultima versão do xstream, a 1.3.1

resolvi o problema da referencia circular, mais ainda o json não esta saindo correntamente.

Na documentação diz que o json ficaria parecido com isso:

[quote]{“cliente”: {
“nome”: “Joao”
}}[/quote]

Mais não é isso que esta acontecendo, o json gerado esta assim:

[quote]{“cliente_$$_javassist_2”: {
"@resolves-to": “cliente”,
“codigo”: 4,
“empresa”: {
“codigo”: 12,
“descricao”: “COOPERCARGA”,
“status”: “A”
},
“cnpj”: 30679645907,
“nome”: “”,
“status”: “A”,
“clientesCheckpoints”: [
false,
{
"@class": “cliente”[/quote]

Onde eu já mandei exluir todas as propriedades que eu não queria, e ainda assim esta gerando o objeto json com todas as propriedades.

o problema que tá acontecendo é que o hibernate te manda um proxy do javassist qdo vc faz o select no banco (via session.get ou session.load)

o proxy tem campos a mais que acabam sendo serializados junto com a entidade… Vamos ver se conseguimos colocar algo no próprio VRaptor… já tem uma issue cadastrada:

desculpa a demora em responder isso

Acho que temporariamente você pode criar um clone do seu objeto ou até mesmo fazendo um set via bean-utils. Algo como isso:

[code]Cliente cliente = [busca do banco];
Cliente clone = new Cliente();
clone.setId(cliente.getId());
clone.setNome(cliente.getNome());

result.use(Results.json()).from(clone).exclude(“motoristas”).serialize(); [/code]

É garcia, a solução que estou usando temporiamente é essa que você postou acima. Apesar de não ser tão elegante, esta resolvendo o meu problema.

[quote=Lucas Cavalcanti]o problema que tá acontecendo é que o hibernate te manda um proxy do javassist qdo vc faz o select no banco (via session.get ou session.load)

o proxy tem campos a mais que acabam sendo serializados junto com a entidade… Vamos ver se conseguimos colocar algo no próprio VRaptor… já tem uma issue cadastrada:

desculpa a demora em responder isso[/quote]

Como que faz para enviar um list JSON para o controller ? qual o formato do json ? como devo recebe-lo no controller ? obrigado.

se estiver usando jquery dá pra tentar transformar o json em query string e mandar, ou usar a anotação @Consumes(“application/json”) no método do controller.

o formato é parecido com o formato da serialização, mas tem que ter obrigatoriamente o root com o nome do parâmetro que vc escolheu.

[quote=Lucas Cavalcanti]se estiver usando jquery dá pra tentar transformar o json em query string e mandar, ou usar a anotação @Consumes(“application/json”) no método do controller.

o formato é parecido com o formato da serialização, mas tem que ter obrigatoriamente o root com o nome do parâmetro que vc escolheu.[/quote]

Amigo, anotei o método do controller da seguinte forma:

        @Consumes("application/json")
	@Path("/fones/salvar.json")
	public void salvarFone(List<Fone> fones){	

da dando o seguinte ERRO:

&lt;html&gt;&lt;head&gt;&lt;title&gt;Apache Tomcat/6.0.26 - Error report&lt;/title&gt;&lt;style&gt;&lt;!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--&gt;&lt;/style&gt; &lt;/head&gt;&lt;body&gt;&lt;h1&gt;HTTP Status 415 - Request with media type [application/x-www-form-urlencoded]. Expecting one of [application/json].&lt;/h1&gt;&lt;HR size="1" noshade="noshade"&gt;<p><b>type</b> Status report</p><p><b>message</b> <u>[color=red]Request with media type [application/x-www-form-urlencoded]. Expecting one of [application/json].</u></p><p><b>description</b> <u>The server refused this request because the request entity is in a format not supported by the requested resource for the requested method (Request with media type [application/x-www-form-urlencoded]. Expecting one of [application/json].).[/color]</u></p>&lt;HR size="1" noshade="noshade"&gt;&lt;h3&gt;Apache Tomcat/6.0.26&lt;/h3&gt;&lt;/body&gt;&lt;/html&gt;

como vc tá passando o json?

esta indo neste formato:

{"fones": [{"fone.numero":"(034)3232-3232","fone.obs":"","fone.foneTipo.id":"1"},{"fone.numero":"(034)3434-3434","fone.obs":"","fone.foneTipo.id":"2"}]}

estou enviando com o $.ajax do jQuery:

	 $.ajax({
	      type: 'post',
	      dataType: 'json',
	      data: fones,
	      url:URLSalvarFones,
	      success: function(objRetorno){
	    	...
              }
         )};

se vc coloca o json no data, por padrão o JQuery vai tentar transformar o json em query string (dá uma olhada num firebug da vida pra ver o que acontece)

tem um option do ajax que muda o content type da requisição, tente colocá-lo como application/json

se o json for facilmente transformável em formencoded (queryString) tente fazer isso e tirar o @Consumes.

[quote=Lucas Cavalcanti]se vc coloca o json no data, por padrão o JQuery vai tentar transformar o json em query string (dá uma olhada num firebug da vida pra ver o que acontece)

tem um option do ajax que muda o content type da requisição, tente colocá-lo como application/json

se o json for facilmente transformável em formencoded (queryString) tente fazer isso e tirar o @Consumes.[/quote]

Lucas eu não entendi muito o que vc falou, não conheço esse “queryString” e nem “formencoded”…

Eu Estou usando esse mesmo ajax para inserir apenas um objeto como abaixo e esta funcionando certinho:

var funcaoMinisterio = {
				"funcaoMinisterio.nome":nome,
				"funcaoMinisterio.descricao":descricao,
				"funcaoMinisterio.ministerio.id":ministerioId,
				}

Porem não estou conseguindo enviar uma lista de objetos, segue abaixo o que apareçe no firebug, se vc tiver qualquer solução para passar uma lista de objetos via ajax é bem vinda.

Postar:

Parâmetrosapplication/x-www-form-urlencoded

{"fones": [{"fone.numero"...	
JSON
		
	
fones
	[Object { fone.numero="(234)3243-4234", fone.foneTipo.id="1", fone.obs=""}, Object { fone.numero="(234)3234-2342", fone.foneTipo.id="1", fone.obs=""}]
	
0
	Object { fone.numero="(234)3243-4234", fone.foneTipo.id="1", fone.obs=""}
	
fone.foneTipo.id
	"1"
	
fone.numero
	"(234)3243-4234"
	
fone.obs
	""
	
1
	Object { fone.numero="(234)3234-2342", fone.foneTipo.id="1", fone.obs=""}
	
fone.foneTipo.id
	"1"
	
fone.numero
	"(234)3234-2342"
	
fone.obs
	""
Fonte
{"fones": [{"fone.numero":"(234)3243-4234","fone.obs":"","fone.foneTipo.id":"1"},{"fone.numero":"(234)3234-2342","fone.obs":"","fone.foneTipo.id":"1"}]}

Cabeçalho:

Cabeçalhos de Resposta
Server	Apache-Coyote/1.1
Content-Type	text/html;charset=utf-8
Content-Length	1342
Date	Thu, 17 Nov 2011 16:19:56 GMT
Cabeçalhos de Solicitação
Host	localhost:8080
User-Agent	Mozilla/5.0 (Windows NT 5.2; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0
Accept	application/json, text/javascript, */*; q=0.01
Accept-Language	pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding	gzip, deflate
Accept-Charset	ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection	keep-alive
Content-Type	application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With	XMLHttpRequest
Referer	http://localhost:8080/iCelula/membro/novo
Content-Length	152
Cookie	JSESSIONID=504B75678AE2841DBB4339A535E3D47F

cabeçalho da request:

Content-Type application/x-www-form-urlencoded; charset=UTF-8

tem que mudar pra application/json

dá uma olhada na doc do $.ajax, tem uma propriedade que muda esse content type

[quote=Lucas Cavalcanti]cabeçalho da request:

Content-Type application/x-www-form-urlencoded; charset=UTF-8

tem que mudar pra application/json

dá uma olhada na doc do $.ajax, tem uma propriedade que muda esse content type[/quote]

Estamos quase lá !!!

Configurei o ajax dessa forma:

$.ajax({
	     contentType:"application/json; charset=utf-8", 
             type: 'post',
	     dataType: 'json',
	     data: data,
	     url:URL,
	     success: function(objRetorno){
	         ...
	      }
	  });

Agora o erro é outro:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jsonDeserializer': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.vraptor.deserialization.JsonDeserializer]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/codehaus/jettison/mapped/Configuration
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:333)
	at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:329)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:263)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1101)
	at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:86)
	at br.com.caelum.vraptor.deserialization.DefaultDeserializers.deserializerFor(DefaultDeserializers.java:46)
	at br.com.caelum.vraptor.interceptor.DeserializingInterceptor.intercept(DeserializingInterceptor.java:81)
	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.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:89)
	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.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	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.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.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 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:312)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:174)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
	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:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	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:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.vraptor.deserialization.JsonDeserializer]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/codehaus/jettison/mapped/Configuration
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:110)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
	... 75 more
Caused by: java.lang.NoClassDefFoundError: org/codehaus/jettison/mapped/Configuration
	at com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver.&lt;init&gt;(JettisonMappedXmlDriver.java:48)
	at br.com.caelum.vraptor.deserialization.JsonDeserializer.&lt;init&gt;(JsonDeserializer.java:27)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
	... 77 more
Caused by: java.lang.ClassNotFoundException: org.codehaus.jettison.mapped.Configuration
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
	... 84 more