2013-04-16 2 views
4

Jersey와 Maven을 사용하여 간단한 REST 서비스를 설정하고있다. 1.8보다 큰 뉴저지의 버전 인 IntelliJ의 web.xml에이 오류가 발생합니다 :저지가 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

에 의해 점유 된 종속성을 추가해야합니다에 해당? – Michael

+0

이것이 무엇인지 알아 냈습니까? 나는 이것도 얻고있다. – marathon

+0

내 생각에 this http://stackoverflow.com/questions/10009199/webservices-in-java-using-jersey?rq=1 도움이됩니다. – malatesh

답변

1

에게 있습니다. 여기 내가 찾은 것입니다, 희망이 다른 사람을 도울 수 있습니다

  1. 당신은 당신의 web.xml에 잘못된 서블릿 클래스가있을 수 있습니다. Jersey 2.0 이상에서는 이전 "com.sun.jersey"대신 "org.glassfish"그룹을 사용해야합니다. 그래서, 당신의 web.xml 내에서, 당신은해야한다 : 실수로 같은 프로젝트 내에서 뉴저지의 다른 버전을 사용하는 경우

    <servlet> 
        ... 
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    </servlet> 
    
  2. 내가 한 번뿐만 아니라이 문제가 발생했습니다. 내 프로젝트는 Maven을 통해 Jersey 1.9 번들을 가져 왔지만 내 코드 편집기는 프로젝트 클래스 경로에서 Jersey의 다른 버전을 사용했습니다. 클래스 패스를 정리하고 필요한 것을 다시 가져오고 저지 버전을 확인하십시오. 그러면 문제가 해결 될 수 있습니다.

+0

이것이 도움이된다면 upvote하십시오. – Darkane

2

동일한 문제가있는 모든 사용자 - 클래스 경로에 서블릿 API가 없기 때문입니다. 프로젝트에 servlet-api 의존성을 추가하기 만하면됩니다.