web-dev-qa-db-ja.com

java.lang.ClassNotFoundException:com.Sun.jersey.spi.container.servlet.ServletContainer

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 bundlehere からダウンロードし、チュートリアルの説明に従って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。私は疲れ果てており、あらゆる種類の助けに感謝します。

80
M-WaJeEh

あなたは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でクラス/インスタンスを登録する方法に関する追加情報を含みます。

147
Michal Gajdos

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>
29
p27

これを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>
22
user1249655

これはEclipseのセットアップの問題であり、Jerseyの問題ではありません。

このスレッドからClassNotFoundException:com.Sun.jersey.spi.container.servlet.ServletContainer

Eclipseプロジェクトの「プロパティー」 - >「デプロイメント・アセンブリー」 - >「追加」 - >「Javaビルド・パス項目」 - >「Gradle依存関係」 - >「完了」を右クリックします。

そのため、EclipseはApacheの起動時にGradleの依存関係を使用していませんでした。

11
Adi

これを試して :

org.glassfish.jersey.servlet.ServletContainer

サーブレットクラス

3
Pichitron

私も同様の問題に直面しました。以下のリンクからステップステップチュートリアルを実行することで問題を解決しました。

http://examples.javacodegeeks.com/enterprise-Java/rest/jersey/jersey-hello-world-example/

  • 注意すべき主なことは、ジャージライブラリはTomcatのWEB-INF/libフォルダに正しく配置されるべきであるということです。上記のリンクに記載されているEclipseの設定によって自動的に行われます。依存JARファイルを含むWARファイルが作成されます。そうでなければ、ClassNotFound Exceptionに関する問題に遭遇するでしょう。

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バイト

  • 2番目のチュートリアルでは、JSON出力を生成し消費するWebサービスを作成する方法について説明します。

http://examples.javacodegeeks.com/enterprise-Java/rest/jersey/json-example-with-jersey-jackson/

両方のリンクは、物事がどのように機能するかについての良い絵を与え、多くの時間を節約しました。

2
yogishaj

別のガイドに従っていますが、あなたと同じ問題がありました: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/

奇妙な部分は、私が使用したこのガイドでは、バージョン間(1.x対2.x)の互換性に問題がないはずです。ガイドに従ってpom.xmlおよび1.xバージョンの前に述べたように、web.xmlyouはクラス(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

そしてそれは私のために働いた! :)

2
Paulo Oliveira

ビルドパスの問題により、このエラーが発生します。ビルドパスに "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を右クリック

1
Sachin G N

Jersey 1.xを使用していたにもかかわらず、同じエラーが発生し、クラスパスに正しいjarファイルがありました。 vogellaのチュートリアルに従ってその手紙を読み、1.xのjarファイルを使用したい場合は、jerseyライブラリをWEB-INF/libフォルダに追加する必要があります。これで問題は確実に解決されます。

0
rickygrimes

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>

0
Ahmad R. Nazemi

同じエラーが発生し、2時間以上デバッグしてすべてのオプションを試してみました。私はMaven/POMを使用していなかったので、私は少数によって与えられたその解決策を利用することができませんでした。

TomをTomcat/libに直接追加する(NOT WEB-INF\lib)フォルダとTomcatを再起動します。

0
Velu

誰かが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
0

元の問題に戻ってくる - 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を使用している場合、これは必須です。

0
Andy1625

それは基本的にあなたが使っているジャージのバージョンによります。 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フォルダに追加します。

0
Arun

Pom.xmlファイルに追加する必要があります

<dependency>
    <groupId>com.Sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.8</version>
</dependency>
0
KARTHIKEYAN.A

単純な回避策は、Eclipseのデプロイメントアセンブリに依存関係やライブラリがあるかどうかを確認することです。おそらくTomcatを使用している場合、サーバーが使用しているライブラリを識別していない可能性があります。その場合はデプロイメントアセンブリで明示的に指定してください。

0
shine

あなたの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