2012-06-02 12 views
10

Sto ri-chiedendo una domanda senza risposta dai gruppi google ora sola lettura App Engine per Java perché ho lo stesso identico problema. (original)Appengine java - Jersey/Jackson JaxbAnnotationIntrospector NoClassDefFoundError

Ho creato un semplice servizio JSON REST utilizzando jersey, jaxb e jackson. Funziona quasi bene, però il prima richiesta al server finisce sempre con l'eccezione: java.lang.NoClassDefFoundError: org/Codehaus/Jackson/xc/JaxbAnnotationIntrospector

Per qualche ragione gae/la maglia non può trovare questa classe sulla richiesta iniziale. Tuttavia, tutte le richieste successive dopo questo funzionano correttamente, la classe sembra essere stata caricata.

Per ulteriori informazioni:

sto inviando JSON al server - in ispettore di Chrome posso vedere:

Content-Type:application/json;charset=UTF-8 
Request Payload {"stuff":["a","b"],"number":"10"} 

e la firma delle risorse in questione si presenta in questo modo:

@POST 
    @Consumes({MediaType.APPLICATION_JSON}) 
    public void run(Params params){}; 

Qualsiasi aiuto ricevuto molto grato!

EDIT: Ecco il completo stack trace

WARNING: Error for /backtest 
java.lang.NoClassDefFoundError: org/codehaus/jackson/xc/JaxbAnnotationIntrospector 
    at org.codehaus.jackson.jaxrs.MapperConfigurator._resolveIntrospector(MapperConfigurator.java:169) 
    at org.codehaus.jackson.jaxrs.MapperConfigurator._resolveIntrospectors(MapperConfigurator.java:144) 
    at org.codehaus.jackson.jaxrs.MapperConfigurator._setAnnotations(MapperConfigurator.java:131) 
    at org.codehaus.jackson.jaxrs.MapperConfigurator.getDefaultMapper(MapperConfigurator.java:70) 
    at org.codehaus.jackson.jaxrs.JacksonJsonProvider.locateMapper(JacksonJsonProvider.java:609) 
    at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:404) 
    at com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy.readFrom(JacksonProviderProxy.java:139) 
    at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:474) 
    at com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123) 
    at com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46) 
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153) 
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$VoidOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:166) 
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) 
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1483) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1414) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1363) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1353) 
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:895) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:843) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:804) 
    at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163) 
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58) 
    at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168) 
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58) 
    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) 
    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:78) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:369) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: java.lang.ClassNotFoundException: org.codehaus.jackson.xc.JaxbAnnotationIntrospector 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 60 more 
+0

Puoi pubblicare la traccia dello stack completo. – Krrose27

risposta

13

Da quello che posso dirvi molto probabilmente non hai il optional XC Jackson lib.

Il pacchetto XC consente di utilizzare Annotazioni Xml (JAXB) oltre alle Annotazioni di Jackson per il mapping delle classi.

Da quello che posso dire questo errore accadrà solo una volta durante la prima installazione di Jackson quindi, a meno che non sia necessario il supporto JAXB, ignorare il problema.

+2

Ok, sono un po 'imbarazzato: aggiungere la dipendenza risolve il problema e non so perché non l'ho provato prima! È curioso però, non sto usando jaxb da solo (anche se penso che il ragazzo con la domanda originale fosse), quindi non vedo perché avrebbe dovuto essere richiesto sul percorso di classe. Non è qualcosa che potrei semplicemente ignorare, perché causa la mancata riuscita della richiesta iniziale all'istanza del motore dell'app (che ovviamente potrebbe accadere molto in un sito con motore di app a basso traffico). Comunque, grazie per l'aiuto. – MarkNS

Problemi correlati