REST API在devserver上运行,但在AppEngine上缺少构造函数

时间:2016-10-11 10:10:19

标签: java google-app-engine jersey

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

运行本地devserver工作正常,但如果我将其部署到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>

可能导致此错误的原因是什么?如何解决?任何经历?

1 个答案:

答案 0 :(得分:0)

找到解决方案: 在打电话时

mvn appengine:update

没有干净,maven不会从WEB_INF / libs中删除以前版本的JAR,这在我的案例中导致了AppEngine上一堆冲突的JAR。

mvn clean appengine:update

做了这个伎俩。 对于那些有类似错误的人来说,这是我的最终POM:http://pastebin.com/XeFtw77d