google-app-engine - java.lang.IncompatibleClassChangeError : Implementing class deploying to app engine 错误

标签 google-app-engine jersey

我在 JRE 1.6 上使用 Jersey 1.13 编写了几个 REST 服务。一切都在本地运行良好,但在我部署到 GAE 后出现此错误:

****Uncaught exception from servlet
java.lang.IncompatibleClassChangeError: Implementing class
    at com.google.appengine.runtime.Request.process-139e1bda14d5aebc(Request.java)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79)
    at com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:104)
    at com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:78)
    at com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:89)
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:700)
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:678)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:203)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:452)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:458)
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:698)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:336)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:328)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:456)
    at java.lang.Thread.run(Thread.java:679)****

如有任何帮助,我们将不胜感激。

最佳答案

这个异常是由asm-4.0.jar 和asm-3.1.jar 之间的兼容性问题引起的。新版本的 AppEngine 使用了 asm-4.0.jar,它与依赖 asm-3.1.jar 的 Jersey 不兼容。要让 Jersey 仍然在 GAE 1.7 上工作,您必须删除对 asm-4.0.jar 的依赖。

查看这篇文章:http://cloudvane.com/2012/09/23/problem-with-google-appengine-and-jersey-with-java/

它经过测试和验证,就像这样:

  1. 将 asm-3.3.1.jar 添加到您的 war->lib
  2. 将它添加到你重新构建的路径中
  3. 物理删除 asm-4.0.jar
  4. 项目 -> 属性 -> Google -> AppEngine:将 Datanuclueus 切换到 v1

就是这样!

关于google-app-engine - java.lang.IncompatibleClassChangeError : Implementing class deploying to app engine 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12166382/

相关文章:

python - 您可以在 Google App 引擎 - Python 上解压缩和查看内容吗?

google-app-engine - Google 托管 VM 部署错误

java - 是否可以在本地 GAE 服务器上创建 GAE cron 作业?

java - 如何在 Jersey REST 服务方法参数上使用 jackson mixin

java - 使用 ClientResponse 发布时 Jersey 客户端 MessageBodyProviderNotFoundException

java - JAX-RS/Jersey 如何自定义错误处理?

wordpress - 如何从指向由 google app engine 托管的应用程序的域托管 wordpress 博客?

google-app-engine - 如何确保应用引擎应用仅可用于 Google Cloud Task?

java - 未在子资源方法上调用 Jersey NameBinding 过滤器

java - 如何在 Jersey 和 Apache Http 客户端中使用代理身份验证?