據我所知,駱駝默認使用默認的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模板將被綁定到相同名稱的標題。 –