web-dev-qa-db-ja.com

org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

org.glassfish.jersey.servlet.ServletContainerでClassNotFoundExceptionが発生しましたが、昨夜、Eclipse JunoでTomcatサーバー(v7)を起動/再起動しようとしたときに異常に起動しました。

何が起こっているのか分かりません。奇妙なのは、それが完全に前に完全に機能していた間に昨晩起きたということです。

スタックトレースは次のとおりです。

Feb 25, 2014 11:11:19 AM org.Apache.catalina.core.ApplicationContext log
INFO: Marking servlet com.att.ucomm.admin.UCommAdminFunctions as unavailable
Feb 25, 2014 11:11:19 AM org.Apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /UCommAdminFunctions threw load() exception
Java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1671)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1516)
at org.Apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.Java:415)
at org.Apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.Java:397)
at org.Apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.Java:118    )
at org.Apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.Java:1048)
at org.Apache.catalina.core.StandardWrapper.load(StandardWrapper.Java:996)
at org.Apache.catalina.core.StandardContext.loadOnStartup(StandardContext.Java:4762)
at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5045)
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:140)
at org.Apache.catalina.core.StandardContext.reload(StandardContext.Java:3670)
at org.Apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.Java:424)
at org.Apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.Java:1207)
at org.Apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.Java:1393)
at org.Apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.Java:1403)
at org.Apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.Java:1403)
at org.Apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.Java:1382)
at Java.lang.Thread.run(Unknown Source)

Feb 25, 2014 11:11:19 AM org.Apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/UCommAdminFunctions] is completed
Feb 25, 2014 11:13:33 AM org.Apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet com.att.ucomm.admin.UCommAdminFunctions is currently unavailable

ここに私のweb.xmlがあります

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://Java.Sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
    <servlet-name>com.att.ucomm.admin.UCommAdminFunctions</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

    <!-- Register JAX-RS Application, if needed. -->
    <init-param>
        <param-name>com.att.ucomm.admin.UCommAdminFunctions</param-name>
        <param-value>my.package.MyApplication</param-value>
    </init-param>

    <!-- Register resources and providers under my.package. -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.att.ucomm.admin</param-value>
    </init-param>

    <!-- Register my custom provider (not needed if it's in my.package) AND LoggingFilter. -->
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>com.att.ucomm.admin.SecurityRequestFilter;org.glassfish.jersey.filter.LoggingFilter</param-value>
    </init-param>

    <!-- Enable Tracing support. -->
    <init-param>
        <param-name>jersey.config.server.tracing</param-name>
        <param-value>ALL</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>com.att.ucomm.admin.UCommAdminFunctions</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

ジャージのjarファイルがWEB-INF/libにあることを確認しました。

WEB-INF/lib with jersey jars

46
ssankara73

問題:

Java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

Jersey 2.xサーブレットを使用しようとしているが、Jersey 1.xlibs。

Jersey 1.xの場合、次のようにする必要があります。

<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>sample.hello.resources</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>

詳細については、 Jersey 1.x documentation を確認してください。

代わりにJersey 2.xを使用する場合は、を指定する必要がありますJersey 2.xライブラリ。 Mavenベースのプロジェクトでは、次を使用できます。

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.xx</version>
</dependency>
<!-- if you are using Jersey client specific features without the server side -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.xx</version>
</dependency>

Jersey 2.xの場合、web.xmlで何も設定する必要はありません。次のようなクラスを提供するだけで十分です。

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest")
public class ApplicationConfig extends Application {

}

詳細については、 Jersey documentation を確認してください。

以下も参照してください:

85
unwichtich

これは、Jerseyの問題ではなく、Eclipseのセットアップの問題です。

このスレッドからClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer

Eclipseプロジェクトのプロパティ->デプロイメントアセンブリ->追加-> Javaビルドパスエントリ-> Gradle Dependencies-> Finishを右クリックします。

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

20
Adi

Jersey 2.xを使用している場合、次の依存関係を使用します。

<dependency>
   <groupId>org.glassfish.jersey.containers</groupId>
   <artifactId>jersey-container-servlet-core</artifactId>
   <version>2.XX</version>
</dependency>  

XXには、探している特定のバージョンを指定できます。 ジャージーコンテナ

11
agpt

受け入れられた答えに同意します。しかし、私にとっては、問題はそれではなく、代わりにサーブレットクラス名を次のように変更する必要がありました。

<servlet-class>org.glassfish.jersey.servlet.ServletContainer.class</servlet-class> 

に:

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

だから、私の場合は.classを削除してもうまくいきました。それが誰かを助けることを願っています!

3
Nerdy

以下のコードはweb.xmlファイルで私のために働く

<servlet>
    <servlet-name>WebService</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.example.demo.webservice</param-value>
        //Package
    </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>WebService</servlet-name>
    <url-pattern>/webservices/*</url-pattern>
</servlet-mapping>
3
Lalit Kale

jersey-container-servletは、実際にjersey-container-servlet-core依存関係を使用します。しかし、mavenを使用する場合、それは実際には重要ではありません。 jersey-container-servletの使用法を定義するだけで、依存関係も自動的にダウンロードされます。

ただし、jarファイルをプロジェクトに手動で(つまり、Mavenを使用せずに)追加する場合は、実際には両方のjarファイルが必要であることが重要です。 org.glassfish.jersey.servlet.ServletContainerクラスは、実際にはコア依存関係の一部です。

1
bvdb

Mavenを使用しない場合は、jarをWEB-INF/libに配置してみてください。うまくいきました。

1
Jordi M.

私はEclipseでも同じ問題を抱えていました。WAソリューションはlibsをWEB-INF/libにコピーすることでした

0
15412s

Jersey 2.25.1を使用していると仮定すると、これは私のために働いた-私はApache Tomcat Webコンテナを使用しています:

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.25.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.25.1</version>
    </dependency>

注:バージョンを使用しているバージョンに置き換えます

0