据我所知,骆驼默认使用默认的RESTLET引擎。我怎样才能告诉骆驼使用Jetty呢?RESTLET骆驼与码头
我知道有办法打包你的应用程序并将其部署在Tomcat或Jetty中。但是,如果我这样做,最大的问题就是如何与RESTLET集成。
我做了一些进一步的挖掘。我带上了骆驼的一个tomcat例子。然后我试图让它具有RESTLET能力。它几乎可以工作。现在的问题是参数没有传递给路由。我希望在调用这个服务器时:http://x.x.x.x:8080/rs/user/?name=Paul,我会得到:Hello Paul你好吗?
但是,我只是得到:你好吗?
我的骆驼的配置是:
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="restlet:/user/?restletMethods=GET,POST" />
<transform>
<simple>Hello ${header.name} how are you?</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>
而我的web.xml是:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:camel-config.xml</param-value>
</context-param>
<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>
我正在一点点接近我的调查。看起来$ {in.body}确实会将请求的主体传递给路由。我仍然试图找出头上发生了什么。我甚至尝试使用生产者模板来调用头文件,但它仍然有效。所以,这不知何故暗示在RESTLET中访问标题的方式与在纯粹的servlet中不同?这里是我的制作人模板:
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("name","Paul");
context.createProducerTemplate().requestBodyAndHeaders(
"restlet:http://localhost:8080/camel-example-servlet-tomcat/rs/user/?restletMethod=post", "Halleluia",headers);
对不起。你的意思是只有URI模板值才会被绑定到头文件中? – Klaus
查看[Camel Restlet文档](http://camel.apache.org/restlet.html#Restlet-SinglerestletendpointtoservicemultiplemethodsandURItemplates)。有一个使用URI模板的例子,例如'/ users/{username}',而不是查询参数。 URI模板将被绑定到相同名称的标题。 –