300.7. 示例
注意
从 Camel 2.7 开始,在 Spring web 应用程序中使用 Servlet 更加简单。详情请查看 Servlet Tomcat 示例。
在本例中,我们定义了一个在 http://localhost:8080/camel/services/hello 中公开 HTTP 服务的路由。
首先,您需要通过普通 Web 容器或 OSGi 服务发布 CamelHttpTransportServlet。使用 Web.xml
文件发布 CamelHttpTransportServlet,如下所示:
<web-app> <servlet> <servlet-name>CamelServlet</servlet-name> <display-name>Camel Http Transport Servlet</display-name> <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CamelServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>
然后,您可以按照以下方法定义路由:
from("servlet:hello?matchOnUriPrefix=true").process(new Processor() { public void process(Exchange exchange) throws Exception { String contentType = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class); String path = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class); path = path.substring(path.lastIndexOf("/")); assertEquals("Get a wrong content type", CONTENT_TYPE, contentType); // assert camel http header String charsetEncoding = exchange.getIn().getHeader(Exchange.HTTP_CHARACTER_ENCODING, String.class); assertEquals("Get a wrong charset name from the message heaer", "UTF-8", charsetEncoding); // assert exchange charset assertEquals("Get a wrong charset naem from the exchange property", "UTF-8", exchange.getProperty(Exchange.CHARSET_NAME)); exchange.getOut().setHeader(Exchange.CONTENT_TYPE, contentType + "; charset=UTF-8"); exchange.getOut().setHeader("PATH", path); exchange.getOut().setBody("<b>Hello World</b>"); } });
注意
指定 camel-servlet 端点的相对路径
由于我们将 HTTP 传输与公布的 servlet 绑定,因此我们不知道 servlet 的应用上下文路径,因此 camel-servlet
端点使用相对路径来指定端点的 URL。客户端可以通过 servlet 发布地址( "http://localhost:8080/camel/services")+ RELATIVE_PATH ("/hello")
访问 camel-servlet
端点。
300.7.1. 使用 Spring 3.x 时的示例
请参阅 Servlet Tomcat 示例。