当前位置: 首页 > 知识库问答 >
问题:

有码头的骆驼上的RESTLET

刘瑞
2023-03-14

我知道有一些方法可以捆绑应用程序并将其部署在Tomcat或Jetty中。但是,如果我这样做了,最大的问题就变成了如何与Restlet集成。

我做了进一步的挖掘。我举了骆驼附带的一个tomcat例子。然后我试着让它具有RESTLET功能。差不多管用了。现在的问题是参数没有传递到路由。我希望当调用这个服务器:http://x.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>
<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>
 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);

共有1个答案

米浩穰
2023-03-14

查看org.apache.camel.component.restlet.DefaultRestletBinding类。默认情况下,只有当内容类型为“application/x-www-form-urlencoded”时,才会绑定表单数据。此外,只有URI模板值将绑定到标头。

要获取任意查询参数,可以执行以下操作:

Request request = exchange.getIn().getHeader(RestletConstants.RESTLET_REQUEST, Request.class);
String value = request.getResourceRef().getQueryAsForm().getFirstValue("foo");

此外,原始查询字符串将在CamelHttpQuery标头中可用。

    <bean id="myRestletBinding" class="com.example.MyRestletBinding"/>
 类似资料:
  • 我是第一次使用Camel。我的试验项目是编写一个应用程序,该应用程序接收HTTP GET请求(使用Jetty)并通过Thrift将请求传递到另一台服务器。然后将收到的答案传递回客户端。(即,如果您愿意,我正在编写超文本传输协议-get请求和Thrift支持的服务器之间的数据交换机或中间件应用程序。) 我有一个完美的非驼峰版本,现在我正在尝试将驼峰等效物组合在一起。目前,我只想将jetty请求写入一

  • 我想在Camel环境中使用Jetty组件。这是我的spring配置的摘录。xml: 下面是用于返回字符串的代码: 本地地址有效(http://127.0.0.1/enc)但是浏览器没有正确显示字符串(显示为“abcÃö¼ÃŸ”–äääääŒääää‰)。我假设问题是一些编码。如何设置像“utf-8”这样的编码? 我在这里找不到任何提示(http://camel.apache.org/jetty.

  • 我使用以下路线: endpoint: 如果文件大小超过2 MB,则会发生以下异常:(Camel-Jetty超文本传输协议代理大响应数据原因问题:超出缓冲容量) 问题: 有没有办法避免这种缓冲问题?(可能使用另一个组件代替jetty?) 由于码头endpoint中的主体没有改变,我想知道是否有可能将主体直接“绕过”到下一个endpoint。

  • 我正在用apache Camel构建一个spring boot应用程序。我想让camel中的DSL监听spring boot启动时的相同端口。 我尝试了这个链接,但如果不使用组件,就无法解析它。我不希望我的路由看起来像,而是希望直接使用jetty Build.Gradle

  • 我正在构建一个高负载http服务,该服务每秒将消耗数千条消息,并将其传递给activemq之类的消息传递系统。 我目前有一个rest服务(非驼峰,非jetty),它接受来自http客户端的帖子并返回一个简单成功的响应,我可以使用apache ab对此进行负载测试。 我们还将camel-jetty视为输入endpoint,因为它具有actiemq的集成组件,并在需要时成为esb的一部分。在我开始构建

  • 在Apache Camel中是否有可能注册一个处理程序来管理由于已达到延续超时而无法写入jettyendpointhttp响应的交换?