将Camel路由作为Web容器下的REST服务进行曝光

时间:2011-04-14 15:47:21

标签: spring rest restlet apache-camel cxfrs

我有Camel路由,我想将其作为REST Web服务公开。应用程序部署在Web容器(Jetty / Tomcat)上,Spring也用于DI和其他“基础设施”事物。

我查看了camel-restletcamel-cxfrs组件,虽然它们都支持将路由暴露为REST服务但我无法找到如何避免启动单独的服务器。我真正想要的是能够以类似于为Spring-WS入站端点定义路由的方式定义Camel路由,例如。

from("restlet://application/user/{id}").to(...)

Web应用程序的配置应该负责接受请求并将它们传输到适当的端点。

不得不承认我很惊讶我无法找到有关该主题的足够信息,我认为我的要求不是很奇特。

2 个答案:

答案 0 :(得分:5)

请参阅此示例 http://camel.apache.org/cxf-tomcat-example.html

对于Apache CXF,您可以使用servlet传输,它允许您使用作为主机容器的Tomcat / Jetty。

如果您使用OSGi,那么请看一下: http://camel.apache.org/cxf-example-osgi.html 它显示了如何将CXF与OSGi HTTP服务一起使用,这对CXFRS也应该有效。

答案 1 :(得分:3)

这是一个迟到的答案,但可能会帮助其他人。

Apache Camel现在似乎支持使用主机容器(例如Tomcat / Jetty)公开Restlet Web服务

============== 8< snip snip ========================

在webapp中使用Restlet servlet

自Camel 2.8起可用 有三种方法可以在servlet容器中配置Restlet应用程序,并使用子类SpringServerServlet通过注入Restlet组件在Camel中启用配置。 在servlet容器中使用Restlet servlet可以使用URI中的相对路径配置路由(删除硬编码绝对URI的限制),并使托管servlet容器能够处理传入请求(而不是必须生成单独的服务器进程)在一个新的港口)。 要进行配置,请将以下内容添加到camel-context.xml;

<camelContext>
  <route id="RS_RestletDemo">
    <from uri="restlet:/demo/{id}" />
    <transform>
      <simple>Request type : ${header.CamelHttpMethod} and ID : ${header.id}</simple>
    </transform>
  </route> 
</camelContext>



<bean id="RestletComponent" class="org.restlet.Component" />

<bean id="RestletComponentService" class="org.apache.camel.component.restlet.RestletComponent">
  <constructor-arg index="0">
    <ref bean="RestletComponent" />
  </constructor-arg>
</bean>
And add this to your web.xml;
<!-- Restlet Servlet -->
<servlet>
  <servlet-name>RestletServlet</servlet-name>
  <servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
  <init-param>
    <param-name>org.restlet.component</param-name>
    <param-value>RestletComponent</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/rs/*</url-pattern>
</servlet-mapping>

然后,您将能够访问

中部署的路线
http://localhost:8080/mywebapp/rs/demo/1234

where localhost:8080 is the server and port of your servlet container

============== snip snip&gt; 8 ========================

此信息发现于2014年1月16日http://camel.apache.org/restlet.html的底部