java.lang.ClassCastException: org.glassfish.jersey.servlet.ServletContainer cannot be cast to javax.servlet.Servlet

匿名 (未验证) 提交于 2019-12-03 01:06:02

问题:

I'm unable to start my webapp on my Tomcat 7.0 Server because of the following error :

java.lang.ClassCastException: org.glassfish.jersey.servlet.ServletContainer cannot be cast to javax.servlet.Servlet 

My web.xml , which include the ServlectContainer :

<?xml version="1.0" encoding="UTF-8"?> <!-- This web.xml file is not required when using Servlet 3.0 container,  see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html --> <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>Jersey Web Application</servlet-name>     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>     <init-param>         <param-name>jersey.config.server.provider.packages</param-name>         <param-value>fr.tessi</param-value>     </init-param>     <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping>     <servlet-name>Jersey Web Application</servlet-name>     <url-pattern>/webapi/*</url-pattern> </servlet-mapping> </web-app> 

And here's my pom.xml :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>fr.tessi</groupId> <artifactId>cassandra-cli-back</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>cassandra-cli-back</name>  <build>     <finalName>cassandra-cli-back</finalName>     <plugins>         <plugin>             <groupId>org.apache.maven.plugins</groupId>             <artifactId>maven-compiler-plugin</artifactId>             <version>2.5.1</version>             <inherited>true</inherited>             <configuration>                 <source>1.7</source>                 <target>1.7</target>             </configuration>         </plugin>     </plugins> </build>  <dependencyManagement>     <dependencies>         <dependency>             <groupId>org.glassfish.jersey</groupId>             <artifactId>jersey-bom</artifactId>             <version>${jersey.version}</version>             <type>pom</type>             <scope>import</scope>         </dependency>     </dependencies> </dependencyManagement>  <dependencies>     <dependency>         <groupId>org.glassfish.jersey.containers</groupId>         <artifactId>jersey-container-servlet-core</artifactId>         <!-- use the following artifactId if you don't need servlet 2.x compatibility -->         <!-- artifactId>jersey-container-servlet</artifactId -->     </dependency>     <dependency>         <groupId>javax.servlet</groupId>         <artifactId>servlet-api</artifactId>         <version>2.5</version>         <scope>provided</scope>     </dependency>     <dependency>         <groupId>com.fasterxml.jackson.core</groupId>         <artifactId>jackson-core</artifactId>         <version>${jackson-2-version}</version>     </dependency>     <dependency>         <groupId>com.fasterxml.jackson.jaxrs</groupId>         <artifactId>jackson-jaxrs-json-provider</artifactId>         <version>${jackson-2-version}</version>     </dependency>     <dependency>         <groupId>com.fasterxml.jackson.core</groupId>         <artifactId>jackson-databind</artifactId>         <version>${jackson-2-version}</version>     </dependency>     <dependency>         <groupId>org.glassfish.jersey.media</groupId>         <artifactId>jersey-media-moxy</artifactId>     </dependency>     <dependency>         <groupId>com.netflix.astyanax</groupId>         <artifactId>astyanax-core</artifactId>         <version>1.56.48</version>     </dependency>     <dependency>         <groupId>com.netflix.astyanax</groupId>         <artifactId>astyanax-cassandra</artifactId>         <version>1.56.48</version>     </dependency>     <dependency>         <groupId>com.netflix.astyanax</groupId>         <artifactId>astyanax-thrift</artifactId>         <version>1.56.48</version>     </dependency>     <!-- <dependency>         <groupId>org.slf4j</groupId>         <artifactId>slf4j-api</artifactId>         <version>1.6.1</version>     </dependency> -->  </dependencies> <properties>     <jersey.version>2.6</jersey.version>     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>     <jackson-2-version>2.4.3</jackson-2-version> </properties> 

Despite the scope provided on the 'servlet-api' dependency, it's still downloaded on stratup.

Already tried to change the servlet-class with multiples classes found on StackOverFlow and other websites, but no results. It keep sending an error.

`

回答1:

Is the servlet-api.jar included in your war file? If so, remove it manually.



回答2:

My colleague sorted out the problem. Basically, dependencies conflict. Here is the functionnal dependencies' list :

<dependencyManagement>     <dependencies>         <dependency>             <groupId>javax.servlet</groupId>             <artifactId>servlet-api</artifactId>             <version>2.5</version>             <scope>provided</scope>         </dependency>     </dependencies> </dependencyManagement>  <dependencies>     <dependency>         <groupId>org.glassfish.jersey.containers</groupId>         <!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core" -->         <artifactId>jersey-container-servlet</artifactId>         <version>2.13</version>     </dependency>     <!-- Required only when you are using JAX-RS Client -->     <dependency>         <groupId>org.glassfish.jersey.core</groupId>         <artifactId>jersey-client</artifactId>         <version>2.13</version>     </dependency>     <dependency>         <groupId>org.glassfish.jersey.media</groupId>         <artifactId>jersey-media-json-jackson</artifactId>         <version>2.13</version>     </dependency>     <dependency>         <groupId>javax.servlet</groupId>         <artifactId>servlet-api</artifactId>       </dependency>     <dependency>         <groupId>com.fasterxml.jackson.core</groupId>         <artifactId>jackson-core</artifactId>         <version>${jackson-2-version}</version>     </dependency>     <dependency>         <!-- note: typically only ".0" patch version exists for core annotations -->         <groupId>com.fasterxml.jackson.core</groupId>         <artifactId>jackson-annotations</artifactId>         <version>${jackson-2-version}</version>     </dependency>     <dependency>         <groupId>com.fasterxml.jackson.jaxrs</groupId>         <artifactId>jackson-jaxrs-json-provider</artifactId>         <version>${jackson-2-version}</version>     </dependency>     <dependency>         <groupId>com.fasterxml.jackson.core</groupId>         <artifactId>jackson-databind</artifactId>         <version>${jackson-2-version}</version>     </dependency>     <dependency>             <groupId>com.netflix.astyanax</groupId>         <artifactId>astyanax-core</artifactId>         <version>1.56.48</version>     </dependency>     <dependency>         <groupId>com.netflix.astyanax</groupId>         <artifactId>astyanax-cassandra</artifactId>         <version>1.56.48</version>         <exclusions>             <exclusion>                 <artifactId>servlet-api</artifactId>                 <groupId>org.mortbay.jetty</groupId>             </exclusion>         </exclusions>     </dependency>     <dependency>         <groupId>com.netflix.astyanax</groupId>         <artifactId>astyanax-thrift</artifactId>         <version>1.56.48</version>     </dependency>     <!-- <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId>            <version>1.6.1</version> </dependency> -->   </dependencies> <properties>     <jersey.version>2.13</jersey.version>     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>     <jackson-2-version>2.4.3</jackson-2-version> </properties> 



回答3:

Jersey-server dependency is required, add it to your pom.xml and try deploying.

  <dependency>      <groupId>org.glassfish.jersey.core</groupId>      <artifactId>jersey-server</artifactId>      <version>2.11</version>   </dependency> 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!