2014-03-05 81 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上部署这场战争。 –