282.6. Samples
282.6.1. 带有身份验证的 restlet 端点
以下路由启动一个 restlet
消费者端点,它侦听 http://localhost:8080 上的 POST
请求。处理器会创建一个响应,用于回显请求正文和 id
标头的值。
URI 查询中的 restletRealm
设置用于在 registry 中查找 Realm Map。如果指定了这个选项,则 restlet 使用者将使用信息来验证用户登录。只有 经过身份验证的用户 可以访问资源。在本例中,我们创建一个充当 registry 的 Spring 应用程序上下文。Realm Map 的 bean ID 应与 restletRealmRef 匹配。
以下示例启动一个 直接
端点,将请求发送到 http://localhost:8080 上的服务器(即我们的 restlet 消费者端点)。
那么,我们都需要.我们已准备好发送请求并尝试 restlet 组件:
示例客户端使用以下标头向 direct:start-auth
端点发送请求:
-
CamelRestletLogin
(由 Camel 内部使用) -
CamelRestletPassword
(由 Camel 内部使用) -
ID
(应用程序标头)
org.apache.camel.restlet.auth.login
和 org.apache.camel.restlet.auth.password
不会被传播为 Restlet 标头。
示例客户端获得类似如下的响应:
received [<order foo='1'/>] as an order id = 89531
282.6.2. 单 restlet 端点来服务多种方法和 URI 模板(已弃用)
这个功能 已弃用,因此不要使用!
可以使用 restletMethods
选项创建单一路由到多个 HTTP 方法。此片断还演示了如何从标头检索请求方法:
除了提供多种方法外,下一个代码片段还演示了如何创建支持使用 restletUriPatterns
选项的多个 URI 模板的端点。请求 URI 也可以在 IN 消息的标头中提供。如果在端点 URI 中定义了 URI 模式(本例中为本例中),则端点中定义的 URI 模式和 restletUriPatterns
选项都会被遵守。
restletUriPatterns=#uriTemplates
选项引用 Spring XML 配置中定义的 List<String
> bean。
<util:list id="uriTemplates"> <value>/users/{username}</value> <value>/atom/collection/{id}/component/{cid}</value> </util:list>
282.6.3. 使用 Restlet API 填充响应
从 Camel 2.8 开始提供
您可能希望使用 org.restlet.Response
API 来填充响应。这可让您完全访问 Restlet API,并对响应进行精细控制。请参阅以下从内联 Camel Processor 生成响应的路由片断:
使用 Restlet 响应 API 生成响应
282.6.4. 在组件上配置最大线程
要配置最大线程选项,您必须在组件中执行此操作,例如:
<bean id="restlet" class="org.apache.camel.component.restlet.RestletComponent"> <property name="maxThreads" value="100"/> </bean>
282.6.5. 在 web 应用程序中使用 Restlet servlet
从 Camel 2.8
开始,有三个可能的 方法在 servlet 容器中配置 Restlet 应用程序,并使用子类别的 SpringServerServlet 通过注入 Restlet 组件来启用 Camel 中的配置。
在 servlet 容器中使用 Restlet servlet 可让路由配置 URI 中的相对路径(删除硬编码绝对 URI 的限制),以及用于托管 servlet 容器来处理传入请求(而不是在新端口上生成单独的服务器进程)。
先决条件
您需要将对 Spring 扩展的依赖项添加到 Maven pom.xml 文件中的 restlet 中:
<dependency> <groupId>org.restlet.jee</groupId> <artifactId>org.restlet.ext.spring</artifactId> <version>${restlet-version}</version> </dependency>
流程
要配置 Restlet 应用程序,请将以下内容添加到 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>
将以下内容添加到 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
访问部署的路由,其中 localhost:8080
是 servlet 容器的服务器和端口,mywebapp
是部署的 webapp 的名称。
您的浏览器将显示以下内容:
"Request type : GET and ID : 1234"