JAX-RS のSunの実装 jersey がGAEにデプロイ出来ない

431 views
Skip to first unread message

ama

unread,
May 27, 2011, 2:03:58 PM5/27/11
to google-app-...@googlegroups.com
天野と申します。はじめまして

JAX-RS のSunの実装 jersey がGAEにデプロイしようとすると
出来ない

om.sun.jersey.core.spi.component.ProviderFactory __getComponentProvider: The provider class, class com.sun.jersey.atom.rome.impl.provider.entity.AtomFeedProvider, could not be instantiated. Processing will continue but the class will not be utilized
java.lang.SecurityException: Unable to get members for class com.sun.jersey.atom.rome.impl.provider.entity.AtomFeedProvider

というエラーが吐かれ実行されません。セキュリティ違反で引っかかって
いると思うので、乗せることは無理だと思うので別の実装を探しているの
ですがGAE上で動作するJAX-RSの実装を知っている人はいらっしゃるでしょうか?

大変申し訳ありませんが、よろしくお願いいたします。

konkicci

unread,
May 28, 2011, 1:56:56 AM5/28/11
to Google-App-Engine-Japan
近藤と申します。はじめまして。

以前(2010年1月頃)、GAEでJAX-RS(jersey)を動かしたことはあります。
その時もセキュリティ違反が発生したので、WEB-INF/classesにJAX-RSのパッチを置いて回避しました。
# WEB-INF/classesはWEB-INF/libよりもクラスの優先順位が高いので、パッチが有効となります。

この問題も同じ方法で回避できるのではないでしょうか?

■以前GAE上でJAX-RS(jersey)を動かすために利用したソース
http://lushlife.googlecode.com/svn/trunk/jax-rs_cdi_jpa/src/com/sun/jersey/server/impl/

Shinichi Ogawa

unread,
May 28, 2011, 2:23:26 AM5/28/11
to google-app-...@googlegroups.com
天野さん

私はJAX-RSの実装を使っていないので検索しただけの結果ですが。

Google App Engine + JAX-RS Jersey ≪ Iqbalyusuf's Blog
http://blog.iparissa.com/google-app-engine-jax-rs-jersey/

Will it play in App Engine / Javaでは Jersey-1.1.5: COMPATIBLE となっていますね。
http://code.google.com/p/googleappengine/wiki/WillItPlayInJava


また以下のフレームワークもApp Engineで動作する可能性がありそうです。
# 確認したわけではありませんが、appengineで使っている報告をみかけた事があります。

Restless: http://code.google.com/p/xydra/wiki/RestLess
Restlet: http://www.restlet.org/
Resteasy: http://www.jboss.org/resteasy

2011/5/28 konkicci <konk...@gmail.com>:

> --
> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
> このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、google-app-engine...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/google-app-engine-japan?hl=ja からこのグループにアクセスしてください。
>
>

ama

unread,
May 28, 2011, 12:36:32 PM5/28/11
to google-app-...@googlegroups.com
天野です

> Will it play in App Engine / Javaでは Jersey-1.1.5: COMPATIBLE となっていますね。
> http://code.google.com/p/googleappengine/wiki/WillItPlayInJava

あーっと、バージョンが高すぎるのか。よく読む前に返信してしまいました orz
バージョンを落として試してみます。


ama

unread,
May 28, 2011, 12:34:03 PM5/28/11
to google-app-...@googlegroups.com
天野です

情報ありがとうございます。GEA本にはお世話になっております。

> Google App Engine + JAX-RS Jersey ≪ Iqbalyusuf's Blog
> http://blog.iparissa.com/google-app-engine-jax-rs-jersey/

急いでいたので、エラーの最初の部分java.lang.SecurityException:
だけで、このライブラリはGAEで使えないと判断してましたが
よく読んでみると、ClassNotFoundException だったので orz
ライブラリが足らなかったようです。

ただ、上記サイトを参考に、最新バージョンで試してみましたが
やはり解決できませんでした。

slim3-blank-1.0.11.zip をベースに以下のライブラリを足しました。

maven の設定
==============================================================
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.bluestemsoftware.open.maven.tparty</groupId>
<artifactId>jettison</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
==============================================================
下記エラーをみると

Caused by: java.lang.ClassNotFoundException: org.codehaus.jackson.map.JsonSerializableWithType

となっているので、jackson関係のクラスが見つからないというエラー
のようです。jackson-core-asl にくっついてダウンロードされる
jackson-mapper-asl-1.7.1 の中に該当ファイルがあったので、
それもWEB-INF/lib に入れてみましたが同じエラーでダメでした。

なにか別のことで引っかかっている気がするのですが
とりあえず、これはここまでの調査で終わらせ、これから
別の実装を試してみようかと思います。

以下、詳細エラー
==============================================================
com.sun.jersey.core.spi.component.ProviderFactory


__getComponentProvider: The provider class, class

com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider, could


not be instantiated. Processing will continue but the class will not be
utilized

java.lang.SecurityException: Unable to get members for class com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider
at com.google.appengine.runtime.Request.process-efc73ad5fb83a74d(Request.java)
at java.lang.Class.getDeclaredMethods(Class.java:252)
at com.sun.jersey.core.reflection.MethodList.getAllDeclaredMethods(MethodList.java:70)
at com.sun.jersey.core.reflection.MethodList.<init>(MethodList.java:64)
at com.sun.jersey.core.spi.component.ComponentConstructor.getPostConstructMethods(ComponentConstructor.java:131)
at com.sun.jersey.core.spi.component.ComponentConstructor.<init>(ComponentConstructor.java:123)
at com.sun.jersey.core.spi.component.ProviderFactory.__getComponentProvider(ProviderFactory.java:165)
at com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:137)
at com.sun.jersey.core.spi.component.ProviderServices.getComponent(ProviderServices.java:256)
at com.sun.jersey.core.spi.component.ProviderServices.getServices(ProviderServices.java:160)
at com.sun.jersey.core.spi.factory.MessageBodyFactory.initWriters(MessageBodyFactory.java:207)
at com.sun.jersey.core.spi.factory.MessageBodyFactory.init(MessageBodyFactory.java:163)
at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1277)
at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:167)
at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:773)
at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:769)
at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:769)
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:764)
at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:488)
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318)
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609)
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
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.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:439)
at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:573)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448)
at com.google.tracing.TraceContext.runInContext(TraceContext.java:688)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
... 44 more
Caused by: java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonSerializableWithType
at com.google.appengine.runtime.Request.process-efc73ad5fb83a74d(Request.java)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
... 46 more
Caused by: java.lang.ClassNotFoundException: org.codehaus.jackson.map.JsonSerializableWithType
at com.google.appengine.runtime.Request.process-efc73ad5fb83a74d(Request.java)
... 44 more

Kenichiro TANAKA

unread,
May 31, 2011, 9:52:08 AM5/31/11
to google-app-...@googlegroups.com
はじめまして。田中と申します。

私も今年の1月頃に、GAEにJerseyを使ったアプリケーションを試したことがあります。
生成したJSONを、extjsで読み込む簡単なサンプル程度のものでしたが、特に引っ掛かる
箇所はなかったです。

Slim3もmavenも使っておらず、ライブラリのバージョンは以下のとおりでした。

Jersey: 1.5
appengine sdk: 1.4.0

参考になるかわかりませんが、その時のコードは以下にあります。

ama

unread,
May 31, 2011, 12:23:16 PM5/31/11
to google-app-...@googlegroups.com
天野です

> Jersey: 1.5
> appengine sdk: 1.4.0
>
> 参考になるかわかりませんが、その時のコードは以下にあります。
> https://bitbucket.org/kenichiro22/jerseyappenginesample/src

田中さんのこの情報と

> Will it play in App Engine / Javaでは Jersey-1.1.5: COMPATIBLE となっていますね。
> http://code.google.com/p/googleappengine/wiki/WillItPlayInJava

小川さんのこの情報とを元にバージョン1.5でweb.xml に以下のパラメータを
追加することで動作しました。

<init-param>
<param-name>com.sun.jersey.config.feature.DisableWADL</param-name>
<param-value>true</param-value>
</init-param>

以下参照情報です。最新の1.7でも、いくつかのライブラリを足せば動作した
(今のところ)ようなので、そのPOMも付けておきます。

単純に依存ライブラリが足らなかったようでした。お騒がせしました。

[pom.xml] =============================================================


<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>

<version>1.5</version>


</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>

<version>1.5</version>


</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>

<version>1.5</version>


</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>

<version>1.5.5</version>


</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-mapper-asl</artifactId>
<version>1.5.5</version>


</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-jaxrs</artifactId>
<version>1.5.5</version>


</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-xc</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>


<artifactId>jettison</artifactId>
<version>1.1</version>
</dependency>

[web.xml] =============================================================
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.feature.DisableWADL</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>your_package_name.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
=============================================================

バージョン1.7 の場合、rome、jdom が必要みたいです

[pom.xml] =============================================================
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>


<version>1.7</version>
</dependency>
<dependency>

<groupId>rome</groupId>
<artifactId>rome</artifactId>
<version>0.9</version>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>


<version>1.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>

<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>


<version>1.8.1</version>
</dependency>
<dependency>

<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>


<version>1.8.1</version>
</dependency>
<dependency>

<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-xc</artifactId>


<version>1.8.1</version>
</dependency>
<dependency>

<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3</version>
</dependency>

Reply all
Reply to author
Forward
0 new messages