300.7. 샘플
참고
Camel 2.7 이후 Spring 웹 애플리케이션에서 더 쉽게 Servlet 을 사용할 수 있습니다. 자세 한 내용은 Servlet Tomcat 예제 를 참조하십시오.
이 샘플에서는 http://localhost:8080/camel/services/hello 에서 HTTP 서비스를 노출하는 경로를 정의합니다.
먼저 일반 웹 컨테이너 또는 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 전송을 게시된 서블릿과 바인딩하고 있으며 서블릿의 애플리케이션 컨텍스트 경로를 알 수 없으므로 camel-servlet 엔드포인트는 상대 경로를 사용하여 끝점 URL을 지정합니다. 클라이언트는 서블릿 게시 주소 ("http://localhost:8080/camel/services") + RELATIVE_PATH("/hello")를 통해 camel-servlet 엔드포인트에 액세스할 수 있습니다.
300.7.1. Spring 3.x를 사용할 때 샘플
Tomcat 예제 를 참조하십시오.