【问题标题】:REST API runs on devserver, but is missing constructor on AppEngineREST API 在 devserver 上运行,但在 AppEngine 上缺少构造函数
【发布时间】:2016-10-11 10:10:18
【问题描述】:

我使用 Jersey 2.23.2 在 AppEngine 上创建了一个 REST 接口

运行本地开发服务器工作正常,但如果我将其部署到 AppEngine,API 调用会导致 500 错误并且日志包含此异常:

Uncaught exception from servlet
java.lang.NoSuchMethodError: org.glassfish.jersey.server.ApplicationHandler.<init>
  (Ljavax/ws/rs/core/Application;Lorg/glassfish/hk2/utilities/Binder;)V
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:359)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
...

http://pastebin.com/R1j7CzxK 的完整堆栈)

按照here 的建议,我花了很多精力消除任何 jar 冲突,所以最后我的 pom 看起来像 http://pastebin.com/m6UEB3E4

这是我的 web.xml 的相关部分:

<servlet>
    <servlet-name>MyManager</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>my.package.controller.ApiController</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>my.package.controller</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>MyManager</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

什么可能导致此错误,我该如何解决?有什么经验吗?

【问题讨论】:

    标签: java google-app-engine jersey


    【解决方案1】:

    找到解决方案: 打电话时

    mvn appengine:update
    

    如果没有 clean,maven 不会从 WEB_INF/libs 中删除以前版本的 JAR,在我的例子中,这会导致 AppEngine 上出现一大堆相互冲突的 JAR。

    mvn clean appengine:update
    

    成功了。 对于那些遇到类似错误的人,这是我的最终 POM:http://pastebin.com/XeFtw77d

    【讨论】:

      猜你喜欢
      • 2019-10-31
      • 1970-01-01
      • 2023-03-10
      • 2021-12-29
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      相关资源
      最近更新 更多