2015-04-03 39 views
2

我想使用CXF但不使用彈簧來運行簡單的Web應用程序。我能夠使用Jersey實現一個Servlet,現在我正在嘗試使用CXF。以下是我的web.xml。使用CXF而不使用彈簧的JAX-RS

<!DOCTYPE web-app PUBLIC 
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
     "http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Output Socket</display-name> 
    <servlet> 
     <servlet-name>JAXServlet</servlet-name> 
     <servlet-class> 
      org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet 
     </servlet-class> 
     <init-param> 
      <param-name>jaxrs.serviceClasses</param-name> 
      <param-value>org.myCompany.servlet</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>JAXServlet</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

而在pom.xml中,我有以下依賴項。

 <dependency> 
      <groupId>javax.ws.rs</groupId> 
      <artifactId>javax.ws.rs-api</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-frontend-jaxws</artifactId> 
      <version>2.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
      <version>2.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-transports-http</artifactId> 
      <version>2.6.1</version> 
     </dependency> 

我不確定這個配置。

  <init-param> 
       <param-name>jaxrs.serviceClasses</param-name> 
       <param-value>org.myCompany.servlet</param-value> 
      </init-param> 

一旦我在我的tomcat中部署war文件,我收到以下異常。

拋出java.lang.ClassNotFoundException:org.myCompany.servlet

我在做什麼錯在這裏。任何幫助,將不勝感激

回答

3

你需要以下配置:

<init-param> 
     <param-name>jaxrs.serviceClasses</param-name> 
     <param-value>org.myCompany.servlet</param-value> 
</init-param> 

這就是你必須提到你的服務類。並且錯誤表示它沒有找到類org.myCompany.servlet。 所以請確保您的服務類存在良好的包裝和名稱。

+0

我發現了這個問題。這是一個愚蠢的錯誤。我只放了包,而不是完整的類路徑名。我說的原因是我在同一個包中有兩個Java類。有沒有辦法只提到包名?如果你知道你能否解釋一下,我是否需要擁有所有這些依賴關係?我只需要一個servlet後端在調用url時運行 – user3919392 2015-04-03 14:33:57

+0

您不能只提及包名稱需要完整的類名,但是您可以列出所有以逗號分隔的類:org.myCompany.servlet.MyClass1, org.myCompany.servlet.MyClass2 ....我不確定你需要cxf-rt-frontend-jaxws依賴性原因它是用於SOAP Web服務的 – jMounir 2015-04-03 14:46:29

+0

對不起,我明白了。非常感謝 – user3919392 2015-04-03 14:50:14