Jersey + Googleアプリエンジンを使用して、2日間シンプルなHello Worldアプリケーションを構築しようとしています。単純なAppEngineプロジェクトの場合、これらのチュートリアルに従い、両方とも問題なく動作します https://developers.google.com/appengine/docs/Java/gettingstarted/creatinghttps://developers.google .com/appengine/docs/Java/webtoolsplatform
しかし今、私はジャージーを追加しようとしており、このチュートリアルに従っています http://www.vogella.com/articles/REST/article.html 。
しかし、サーバーは私に与え続けます
Java.lang.ClassNotFoundException:com.Sun.jersey.spi.container.servlet.ServletContainer
これらの行をweb.xmlに追加すると:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestServer</display-name>
<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.property.packages</param-name>
<param-value>com.test.myproject</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Jersey JAX-RS 2.1 RI bundle
を here からダウンロードし、チュートリアルの説明に従ってWEB-INF/lib
フォルダーにすべてのjarファイルを追加しました。そして2日後でも何も機能していません。私はGoogleで何度か検索しましたが、どうやらMavenを使用している人はどうにかしてそれを解決しましたが、私はMavenを使用していません。
インポートされたcom.Sun.jersey.spi.container.servlet.ServletContainer
にもJersey jars
が存在するかどうかを確認するために、この完全修飾名をJavaで記述し、インテリセンスで名前を終了させようとしましたが、インテリセンスを取得できませんでしたcom.Sun.je
なので、私の最後の推測は、最新のJerseyビルドでパッケージの再配置があり、jersey
が_の中になくなったということですcom.Sun
。私は疲れ果てており、あらゆる種類の助けに感謝します。
あなたはJersey 2(JAX-RS 2のRI)をダウンロードしました。参照しているチュートリアルではJersey 1を使用しています。( here )からJersey 1.17.1をダウンロードしてください。
Jersey 1はcom.Sun.jersey
を使用し、Jersey 2はorg.glassfish.jersey
を使用しているので例外です。
init-param
で始まるcom.Sun.jersey
もJersey 2では認識されません。
Jersey 2でリソースとプロバイダを登録する はJersey 2でクラス/インスタンスを登録する方法に関する追加情報を含みます。
Jersey 2.xを使用している場合は、サーブレットクラスが変更されているため、web.xmlで異なる設定が必要です。以下の設定でweb.xmlを更新できます。
<servlet>
<servlet-name>myrest</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>your.package.path</param-value>
</init-param>
<init-param>
<param-name>unit:WidgetPU</param-name>
<param-value>persistence/widget</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myrest</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
これをpomに追加する
<dependency>
<groupId>com.Sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.Sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.Sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.17.1</version>
</dependency>
これはEclipseのセットアップの問題であり、Jerseyの問題ではありません。
このスレッドからClassNotFoundException:com.Sun.jersey.spi.container.servlet.ServletContainer
Eclipseプロジェクトの「プロパティー」 - >「デプロイメント・アセンブリー」 - >「追加」 - >「Javaビルド・パス項目」 - >「Gradle依存関係」 - >「完了」を右クリックします。
そのため、EclipseはApacheの起動時にGradleの依存関係を使用していませんでした。
これを試して :
org.glassfish.jersey.servlet.ServletContainer
サーブレットクラス
私も同様の問題に直面しました。以下のリンクからステップステップチュートリアルを実行することで問題を解決しました。
http://examples.javacodegeeks.com/enterprise-Java/rest/jersey/jersey-hello-world-example/
Apache-Tomcat-7.0.56-windows-x64\Apache -Tomcat-7.0.56\webapps\JerseyJSONExample\WEB-INF\lib
"2014/11/23 12:06 AM 130,458 jersey-client-1.9.jar
11/23/2014 12:06 AM 458,739 jersey-core-1.9.jar
11/23/2014 12:06 AM 147,952 jersey-json-1.9.jar
11/23/2014 12:06 AM 713,089 jersey-server-1.9.jar "4ファイル1,450,238バイト
http://examples.javacodegeeks.com/enterprise-Java/rest/jersey/json-example-with-jersey-jackson/
両方のリンクは、物事がどのように機能するかについての良い絵を与え、多くの時間を節約しました。
別のガイドに従っていますが、あなたと同じ問題がありました: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/
奇妙な部分は、私が使用したこのガイドでは、バージョン間(1.x対2.x)の互換性に問題がないはずです。ガイドに従ってpom.xml
および1.xバージョンの前に述べたように、web.xml
youはクラス(com.Sun.jersey.spi.container.servlet.ServletContainer
)を参照します。私が推測できるように、これは機能しているはずです。
私の推測は、JDK 1.7を使用しているため、このクラスはもう存在しないためです。
後、私は私の前に答えで解決しようとしましたが、助けませんでした、pom.xml
を変更し、web.xml
でエラーを変更しました:Java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
おそらく存在するはずです!
このエラーの結果、「新しい」ソリューションが見つかりました: http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0- release /
Maven(アーキタイプ)を使用して、ジャージプロジェクトを生成します。
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0
そしてそれは私のために働いた! :)
ビルドパスの問題により、このエラーが発生します。ビルドパスに "Server Runtime"ライブラリを追加する必要があります。
"Java.lang.ClassNotFoundException: com.Sun.jersey.spi.container.servlet.ServletContainer"
クラスが見つからないという例外を解決するには、以下の手順に従ってください。
project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0
を右クリック
Jersey 1.xを使用していたにもかかわらず、同じエラーが発生し、クラスパスに正しいjarファイルがありました。 vogellaのチュートリアルに従ってその手紙を読み、1.xのjarファイルを使用したい場合は、jerseyライブラリをWEB-INF/libフォルダに追加する必要があります。これで問題は確実に解決されます。
jersey-bundle-1.17.1.jar
をプロジェクトのlibに追加する必要があります
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <!-- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> --> <init-param> <param-name>com.Sun.jersey.config.property.packages</param-name> <!-- <param-name>jersey.config.server.provider.packages</param-name> --> <param-value>package.package.test</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
同じエラーが発生し、2時間以上デバッグしてすべてのオプションを試してみました。私はMaven/POMを使用していなかったので、私は少数によって与えられたその解決策を利用することができませんでした。
TomをTomcat/libに直接追加する(NOT WEB-INF\lib)フォルダとTomcatを再起動します。
誰かがJerseyを使用してHello Worldアプリケーションを構築しようとしている場合、最も簡単な方法の1つはJerseyの資料に従うことだと思います。
https://jersey.github.io/download.html
すでにMavenを使用している場合は、結果が表示されるまでに数分かかります。
私は以下を使いました。
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.26
元の問題に戻ってくる - Java.lang.ClassNotFoundException:com.Sun.jersey.spi.container.servlet.ServletContainer
上記のとおり、JAX 2.xバージョンではServletContainerクラスはパッケージ - org.glassfish.jersey.servlet.ServletContainer - に移動されました。関連のjarファイルは jersey-container-servlet-core.jar jaxrs-ri-2.2.1.Zip にバンドルされています。
手動でZipファイルに含まれるすべてのjarファイルをコピーすることでmvnなしでJAX RSを解決することができます jaxrs-ri-2.2.1.Zip (私はこのバージョンを使用しました、WEB-INF/libフォルダへの任意の2.xバージョンで動作します。ライブラリを正しいフォルダにコピーすると、実行時にそれらが利用可能になります。
プロジェクトをビルドおよびデプロイするためにEclipseを使用している場合、これは必須です。
それは基本的にあなたが使っているジャージのバージョンによります。 Jersey ver.1.X.Xを使用している場合は追加する必要があります。
Jersey 1は "com.Sun.jersey"を使用し、Jersey 2はorg.glassfishを使用します。サーブレットクラスタグ。また、com.Sun.jerseyで始まるinit-paramもJersey 2では認識されません。
そして、すべてのjarファイルをWEB-INF libフォルダに追加します。
Pom.xmlファイルに追加する必要があります
<dependency>
<groupId>com.Sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.8</version>
</dependency>
単純な回避策は、Eclipseのデプロイメントアセンブリに依存関係やライブラリがあるかどうかを確認することです。おそらくTomcatを使用している場合、サーバーが使用しているライブラリを識別していない可能性があります。その場合はデプロイメントアセンブリで明示的に指定してください。
あなたの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.property.packages</param-name>
<param-value>com.test.myproject</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
このため:
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.myproject</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
これはJersey 2.xがcom.Sun.jersey(Jersey 1.xで使用)の代わりにorg.glassfish.jerseyパッケージを使用しているため例外です。 JAX-RS 2.0およびJersey 2.xに移行すると、com.Sun.jerseyで始まるinit-paramもJersey 2.xでは認識されません。
いつでもmavenを使用している場合、pom.xmlは次のようになります。
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.X</version>
</dependency>
ご希望のバージョンの2.Xに置き換えてください。 2.15