当前位置: 首页 > 知识库问答 >
问题:

代码在dev服务器上工作,在GAE上启动失败

翟奇逸
2023-03-14

直到最近,我的代码在GAE和开发服务器上都运行良好。然后最近我上传了一个新版本,它在服务器上根本不起作用,在我的本地机器(dev服务器)上运行良好。旧版本继续在服务器上工作。

每次我点击更新版本的任何URL时,都会在日志中找到以下stracktraces:

Uncaught exception from servlet
java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:287)
    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:389)
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
    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.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:206)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:179)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:136)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:468)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:256)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:235)
    at java.lang.Thread.run(Thread.java:745)

这是我能找到的最相关的依赖项(它位于我在项目中使用的实用程序库中):

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
</dependency>

没错,javax。ws。rs.core。其中的应用程序类不包含方法。

现在的问题是,为什么/如何在dev服务器上运行这些代码?

我最近没有做任何影响这个库甚至代码的总体布局和工作的更改(只是在现有代码中添加了一些功能),那么是什么导致了这个问题呢?

当时使用的是GAE Java SDK的1.9.32版本,最近升级到1.9.34——之后问题就出现了(然而,切换回1.9.32并没有帮助)。云平台控制台表示SDK版本1.9.35。

在绝望中,我试着:

  • 清洁

来自pom的版本。xml:

<commons.codec.version>1.10</commons.codec.version>
<commons.io.version>2.4</commons.io.version>
<commons.lang3.version>3.4</commons.lang3.version>
<commons.validator.version>1.5.0</commons.validator.version>
<freemarker.version>2.3.20</freemarker.version>
<google.http.client.version>1.21.0</google.http.client.version>
<guava.version>19.0</guava.version>
<guice.servlet.version>4.0</guice.servlet.version>
<guice.version>4.0</guice.version>
<jackson.version>2.7.0</jackson.version>
<jersey.version>2.5.1</jersey.version>
<joda.money.version>0.10.0</joda.money.version>
<junit.version>4.12</junit.version>
<lombok.version>1.16.6</lombok.version>
<objectify.version>5.1.9</objectify.version>
<stripe.version>1.38.0</stripe.version>

<appengine.version>1.9.32</appengine.version>
<gcloud.plugin.version>2.0.9.88.v20151125</gcloud.plugin.version>
<resources.plugin.version>2.7</resources.plugin.version>

(可能错过1或2)

共有1个答案

顾乐心
2023-03-14

修复是更改此依赖项:

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
</dependency>

到此:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>${jersey.version}</version>
</dependency>

其中${jersey.version}设置为2.5.1。到目前为止不知道这是如何工作的...

当我阅读JavaRestFullWebService: JAX-RS实现与泽西2.3.1库时,我意识到了这个潜在的问题,这也是@peeskillet的评论弹出的时候。

 类似资料:
  • 我有一个应用程序,它使用一个在开发环境中工作的数据列表,但在生产环境中返回一个没有查找的空白字段。我想广泛使用datalist,因为它很容易提供一个自动完整的工具,但除非它在生产中工作。 Dev是在Win7下的IE11.0上的MVC VS 2010,在HTML5Test中得分302。产品是服务器2012 R2标准上的IE11.0,报告为Win8.1,在HTML5Test中得分为312分。 经过大量

  • 尝试远程启动服务时遇到奇怪的行为。 编辑:我进一步研究了这个问题,发现只有在尝试运行我的特定服务时才会出现这种情况。这意味着我的服务必须从已经登录的用户的会话中运行(这就是为什么如果我之前使用mstsc访问服务器,它仍然可以工作)。所以我想我的新问题是--有没有一种方法可以让我从PowerShell登录到远程机器? 多谢了。

  • 问题内容: 我正在尝试在开发GAE服务器上模拟HTTPServletRequest数据。我正在运行Eclipse插件1.3.7 我试图做到这一点: 运行以下命令会产生异常: java.lang.NoClassDefFoundError:sun.reflect.ReflectionFactory是一个受限类。有关更多详细信息,请参阅Google App Engine开发人员指南。 关于如何在GAE开

  • 启动服务器时,出现以下错误:无法启动服务器。 localhost上的服务器GlassFish Server Open Source Edition 3(Java EE 6)无法启动。

  • 我试图在非自定义端口(例如25565)上使用命令启动minecraft服务器: java-jar craftbukkit.jar [12:24:27 WARN]:要启动具有更多ram的服务器,请将其启动为“java-xmx1024m-xms1024m-jar minecraft_server.jar” [12:24:27信息]:正在加载属性 [12:24:27信息]:默认游戏类型:生存 [12:2