GAEとdevサーバーでコードが正しく動作するまでは、その後、最近私は新しいバージョンをアップロードしたが、それはサーバ上ではまったく動作せず、私のローカルマシン(devサーバ)上でうまく動作する。古いバージョンは引き続きサーバー上で動作します。コードはdevサーバーで動作し、GAEで起動できません
私は新しいバージョンのいずれかのURLを打つたびに、以下のstracktraceはログにあります
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)
これは、私はそれがユーティリティライブラリにあります(見つけることができる最も関連の依存関係であるI )私のプロジェクトで使用しています:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
と十分な真の、その中にjavax.ws.rs.core.Application
クラスがgetProperties()
メソッドが含まれていません。
ここで問題は、なぜ/ devはこのサーバーがdevサーバーで動作しているかです。
このライブラリに影響する最近の変更、またはコードの一般的なレイアウトや作業(既存のコードにいくつかの機能を追加したばかりです)を行っていないので、この問題の原因は何ですか?
GAE Java SDKのバージョン1.9.32を使用していて、最近1.9.34にアップグレードされました。その後、問題が発生しました(ただし、1.9.32への切り替えは役に立たなかった)。 Cloud Platformコンソールは、SDKバージョン1.9.35を示します。必死で
私が試した:
- をきれい& GAE &異なると再アップロード
- 再アップロードコードの新しいバージョンを削除
- 、(また、ライブラリプロジェクトに依存する)の再構築
pom.xml
からバージョン番号
バージョン:
が2.5.1
に設定されている
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
:これに
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
:
<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>
修正プログラムは、この依存関係を変更することでした
あなたが ' 2.5.1 'を使用し、 'jsr311'を持っているということが問題です。ジャージ2はJAX-RS 2.0を使用し、jsr311との互換性はありません。開発者の中でどのように動作していますか?おそらくクラスの読み込みの違い。 JAX-RS 2.0とjsr311はどちらもApplicationクラスですが、JAX-2.0より新しいバージョンです。これはgetPropertiesメソッドを持っています。残念ながら、このエラーが表示された場合、jsr311のApplicationクラスはJAX-RS 2.0バージョンではなく、クラスがロードされたクラスであることを意味します。jsr311を取り除き、何が起こるかを確認してください –
ありがとう、それはまさに私が[Java RestFull WebService:Jersey 2.3.1ライブラリを使ったJAX-RS実装]を読むことで実現したことです。(http://stackoverflow.com/a/19261016/91933 )あなたのコメントがポップアップしたときにそれを変更していました:-)。 – markvgti