【问题标题】:Apache Camel Route doesn't set bodyApache Camel Route 没有设置正文
【发布时间】:2019-12-12 21:04:29
【问题描述】:

我在 Docker 网络中有两个 Apache Camel 路由器。

它充当客户端,并通过路由将主体中的一些数据发送到外部。

我现在想从服务器路由器获取修改后的主体。

但显然身体修改从未应用。

(对于上下文,初始请求是一个发布请求,最终主体应该是响应)

这是我的“客户”路线的样子:

<camelContext xmlns="http://camel.apache.org/schema/blueprint">

<restConfiguration component="restlet" bindingMode="json" port="8989" enableCORS="true"/>

<rest path="/finData">
  <description>User rest service</description>
  <post>
    <to uri="direct:update"/>
  </post>
</rest>

<route id="sendFinData">
  <from uri="direct:update"/>
  <log message="Got some data:  ${body}"/>
  <to uri="aclient://otherClient:9191"/>
</route>

这是“服务器”的样子:

 <camelContext xmlns="http://camel.apache.org/schema/blueprint">


 <route id="receiveFinData">
  <from
    uri="aserver://0.0.0.0:9191"/>
  <log message="Received via data: ${body}"/>
  <setBody>
    <simple>{"result": true }</simple>
  </setBody>
</route>

更新:如果我向“客户端”添加第二条路由并调用此路由而不是“服务器”的外部并修改它正在工作的主体

【问题讨论】:

  • ... 代替 怎么样?
  • 为什么简单版不行?是否在{...} 前面假设$
  • 不幸的是,这不起作用。对于上下文:如果我在第一个“客户端”实例中添加一个路由并在那里修改它的主体

标签: rest apache-camel spring-camel


【解决方案1】:

由于cmets的更新:当setBody不是问题时,我不得不问代码中的流程。

  • 您是否正在调用/finData 从客户端向服务器发送请求?
  • 但是谁在收听aclient://otherClient:9191?这条路线不在你的问题之列。
  • aserver://0.0.0.0:9191 的来电者也不是你的问题。

你能发布整个流程吗?

原答案

我认为@tadayoshi-sato 已经评论了您问题的解决方案。

您使用Camel Simple language(一种表达式语言)在您的消息正文中设置一个常量字符串。

请改用Camel Constant language

<setBody>
    <constant>{"result": true }</constant>
</setBody>

【讨论】:

  • 这似乎没有帮助
  • 那我得问问代码中的流程了。您是否正在调用/finData 将请求从客户端发送到服务器?但是谁在收听aclient://otherClient:9191?这条路线不在你的问题之列。 aserver://0.0.0.0:9191 的来电者也不是你的问题。你能发布整个流程吗?
  • 你是对的。我的设置似乎是问题所在。我这样做的方式不应该与经典方法一起使用。我需要将数据发送到客户端,然后更新正文并将其发送到调用调用的应用程序。既然你的回答对我有帮助,我会接受它来结束这个问题
  • 好的,我已经更新了我的答案。当您的 setBody 有效时,答案会产生误导
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多