2013-04-16 43 views
4

我正在用Jersey和Maven設置一個簡單的REST服務。對於新澤西州的版本大於1.8的IntelliJ在web.xml中引發此錯誤:Jersey用javax衝突Servlet

'com.sun.jersey.spi.container.servlet.ServletContainer' is not assignable to 'javax.servlet.Servlet' 

有誰知道如何才能使用最新版本的澤西解決這一問題?

這是在web.xml

<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" 
    version="2.5"> 

<display-name>R Proxy</display-name> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 
<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/r-proxy-log4j.properties</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<!-- Jersey configuration --> 
<servlet> 
    <servlet-name>jersey-servlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>org.fao.fenix.r.proxy.rest</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 

<!-- Jersey configuration --> 
<servlet-mapping> 
    <servlet-name>jersey-servlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

+0

佔據你可以添加的web.xml的依賴? – Michael

+0

你有沒有想過這是什麼?我也得到了這個。 – marathon

+0

我認爲這個http://stackoverflow.com/questions/10009199/webservices-in-java-using-jersey?rq=1 可以幫助你。 – malatesh

回答

1

我一直在尋找到這一點。這裏是我發現的,希望它可以幫助其他人:

  1. 您的web.xml中可能有錯誤的servlet類。對於Jersey 2.0以上版本,您應該使用「org.glassfish」組而不是舊的「com.sun.jersey」。 所以,你的web.xml中,你應該有:

    <servlet> 
        ... 
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    </servlet> 
    
  2. 我遇到過這個問題曾經也無意中使用同一項目內的不同版本澤西時。我的項目沒有通過Maven導入Jersey 1.9包,但是我的代碼編輯器在項目類路徑上有一個不同版本的Jersey。清理你的類路徑,重新導入你需要的東西並檢查你的澤西版本,它可以解決你的問題。

+0

請注意,如果這可以幫助你。 – Darkane

2

對於所有誰有同樣的問題 - 這是因爲你的類路徑中沒有servlet api。只需將servlet-api依賴添加到您的項目中,一切都會好的。