2014-03-05 80 views
0

我試圖用apache駱駝develp休息服務。我的項目是一個部署在tomcat上的spring mvc war。阿帕奇駱駝+春天(戰爭)+雄貓+休息

我不想使用apache cxf(cxf servlet)。

 public class SampleRouter extends RouteBuilder { 

      @override 
      public void configure() throws Exception { 
       from("cxfrs://http://localhost:1234/sample") 
       .process (new Processor() { 
        public void process(Exchange exchange) throws Exception { 
         System.out.println("test"); 
        } 
       })).setBody(constant("SUCCESS")); 
      } 
     } 


     @Path("/sample") 
     public class SampleResource { 

      @GET 
      public void test() { 

      } 
     } 

web.xml有dispatcherservlet,contextloaderlistener。

調度-servlet.xml中具有MVC:註解drivem,上下文:組分掃描,

 <camelContext id="server" trace="true" xmlns="http://camel.apache.org/schema/spring"> 
      <contextScan /> 
     </camelContext> 

的pom.xml具有駱駝核,駱駝CXF,駱駝流,CXF-RT-運輸-http-jetty,cxf-rs-frontend-jaxrs,camel-spring,spring-webmvc,spring-web,spring-context。

Tomcat在8080上運行,服務器啓動時似乎沒有異常。但是,我試圖擊中url(http://localhost:1234/sample),似乎沒有任何事情發生。

我在想什麼?我最終將這個延伸到REST,以使用認證,過濾器和攔截器將DSL或REST遷移到Java DSL。

我也試過cxf:rsServer,並在路由器類中提到過。

此外,在未來,如果我必須使用https而不是http?或者我如何使url不被硬編碼?

回答

0

您需要在cxfrs端點上設置resourceClass選項。這裏是一個例子

from("cxfrs://http://localhost:1234/sample?resourceClasses=my.pachage.SampleResource") 

你可以在camel-cxfrs component page找到一些例子。

如果要通過servlet傳輸導出CXF服務,則需要執行一些工作,如it所述。

如果要動態地改變地址,你可以,如果你正在尋找通過使用servlet進行傳輸,那麼你需要一個耗時CXF休息服務啓動駱駝航線採取看看camel properties component.

+0

正如我所說的,我沒有使用CXF Servlet或Camel Servlet。另外,我正在部署Tomcat。我在cxf:rsServer xml config中配置的端口爲123,而tomcat在8080上運行。 我只想確認是否可以在不使用servlet的情況下在tomcat上進行部署。另外,我不確定爲什麼我需要爲服務配置不同的端口,而不是服務器以及它如何工作。另外爲什麼我需要包含cxf-jetty jar,儘管我使用的是tomcat。 –

+0

我可以得到一些幫助嗎? –

+0

可以在不使用servlet傳輸的情況下發布webserivce。在這種情況下,您只需確保cxf-rt-http-jetty jar在您的類路徑中。 –

0

  1. 清理你的pom.xml並刪除任何對jetty的引用。
  2. 將CXF servlet添加到您的網站。XML

    <servlet> 
        <servlet-name>CXFServlet</servlet-name> 
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
        <load-on-startup>1</load-on-startup> 
    </servlet> 
    
    <!-- all our webservices are mapped under this URI pattern --> 
    <servlet-mapping> 
        <servlet-name>CXFServlet</servlet-name> 
        <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
    
  3. 添加servlet的運輸依賴:

    <dependency> 
        <groupId>org.apache.cxf</groupId> 
        <artifactId>cxf-rt-transports-http</artifactId> 
        <version>${cxf-version}</version> 
    </dependency> 
    
  4. 在Spring /駱駝配置

    <import resource="classpath:META-INF/cxf/cxf.xml"/> 
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 
    
    <cxf:rsServer id="rsServer" address="/restService" 
    serviceClass="com.something.test.SimpleServiceImpl" 
    loggingFeatureEnabled="true" loggingSizeLimit="20" /> 
    
  5. 建立從這一消費端點作爲路線:

    from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer") 
        .to("log:TEST?showAll=true") 
    
  6. 現在可以觀看/使用(具有一個方法調用)端點:http://host:port/context/services/restService?_wadl

+0

正如我所提到的,我不想使用CXFServlet或CamelServlet並希望在tomcat上部署這場戰爭。 –