【问题标题】:Jersey + App Engine project launch errorJersey + App Engine 项目启动错误
【发布时间】:2012-02-25 07:40:56
【问题描述】:

做了很多搜索,但没有运气。

我正在尝试制作一个集成 Jersey 和 Google App Engine 的“hello world”应用程序。 在 Eclipse 中,我创建了一个“Web 应用程序项目”并将 Jersey JAR 添加到构建路径中。 然后我修改了web.xml,看起来是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.example.myJersey</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

在包 'com.example.myJersey' 我有 HelloWorldResource.java,这里是摘录:

// The Java class will be hosted at the URI path "/helloworld"
@Path("/helloworld")
public class HelloWorldResource {

    // The Java method will process HTTP GET requests
    @GET 
    // The Java method will produce content identified by the MIME Media
    // type "text/plain"
    @Produces("text/plain")
    public String getClichedMessage() {
        // Return some cliched textual content
        return "Hello World";
    }
}

当我点击运行时,我得到这个错误:

INFO: Successfully processed C:\Users\upelsin\wtf-rest\war\WEB-INF/web.xml
фев 02, 2012 5:05:16 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: failed Jersey Web Application: java.lang.IncompatibleClassChangeError: Implementing class
фев 02, 2012 5:05:16 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: failed com.google.appengine.tools.development.DevAppEngineWebAppContext@1aa58969{/,C:\Users\upelsin\wtf-rest\war}: java.lang.IncompatibleClassChangeError: Implementing class
фев 02, 2012 5:05:16 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: failed JettyContainerService$ApiProxyHandler@6d26b88a:  java.lang.IncompatibleClassChangeError: Implementing class
фев 02, 2012 5:05:16 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: Error starting handlers
java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79)
at com.sun.jersey.api.core.servlet.WebAppResourceConfig.init(WebAppResourceConfig.java:102)
at com.sun.jersey.api.core.servlet.WebAppResourceConfig.<init>(WebAppResourceConfig.java:89)
at com.sun.jersey.api.core.servlet.WebAppResourceConfig.<init>(WebAppResourceConfig.java:74)
at com.sun.jersey.spi.container.servlet.WebComponent.getWebAppResourceConfig(WebComponent.java:672)
at com.sun.jersey.spi.container.servlet.ServletContainer.getDefaultResourceConfig(ServletContainer.java:414)
at com.sun.jersey.spi.container.servlet.ServletContainer.getDefaultResourceConfig(ServletContainer.java:581)
at com.sun.jersey.spi.container.servlet.WebServletConfig.getDefaultResourceConfig(WebServletConfig.java:87)
at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:703)
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:373)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)

编辑: 可能 web.xml 中存在错误配置。看起来 Jetty 不喜欢 Jersey 的 servlet 类。

我将不胜感激。

【问题讨论】:

    标签: java google-app-engine servlets jetty jersey


    【解决方案1】:

    我最近在 GitHub 上整理了一个 project template,将 Jersey 和 Guice 结合为 AppEngine。与正在运行的应用进行比较可能会有所帮助。

    【讨论】:

      【解决方案2】:

      看看这个:

      http://code.google.com/p/googleappengine/wiki/WillItPlayInJava

      确保您运行 Jersey 1.5 并按照文档中的要求进行配置。另外,您在使用其他库吗?那些可能会造成类加载冲突?

      【讨论】:

        【解决方案3】:

        泽西岛需要 Java 1.6。这是运行 Google App Engine 的吗?也许您的 Google App 实例已配置为在较早的 Java 版本上运行。

        【讨论】:

        • 感谢您指出这一点,我检查并实例运行 1.6。我也在为 1.6 编译我的项目。
        猜你喜欢
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 2012-05-04
        • 2015-04-21
        • 2012-02-23
        • 2015-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多