Exchange.getIn().getBody() returns 第二次调用时骆驼中的空字符串
Exchange.getIn().getBody() returns empty string in camel on second call
我有 2 个相同的电话:
String msg1 = exchange.getIn().getBody(String.class);
String msg2 = exchange.getIn().getBody(String.class);
在 msg1 中我得到了正确的期望值,但是 msg2 是一个空字符串。我没有设置 Out 消息,因此交换 In 消息应该仍然完好无损。请解释为什么会这样。
骆驼路线:
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route id="route1">
<from uri="timer://myTimer?period=2000" />
<setBody>
<simple>Hello World ${header.firedTime}</simple>
</setBody>
<process ref="messageProcessor" />
<to uri="http://localhost:8090"/>
</route>
<route id="route2">
<from uri="jetty://http://localhost:8090" />
<process ref="messageProcessor" />
</route>
</camelContext>
处理器只包含上面的 2 个语句。
route1 中的处理是正确的,但在 route2 中我得到了描述的行为:第一次调用 - 有效字符串,第二次调用 - 空字符串。所以我觉得可能跟HttpMessage转换有关系。
来自http://camel.apache.org/jetty.html
Jetty is stream based, which means the input it receives is submitted
to Camel as a stream. That means you will only be able to read the
content of the stream once.
只需将输入转换为字符串,然后再使用它两次或更多次
<route id="route2">
<from uri="jetty://http://localhost:8090" />
<convertBodyTo type="String" />
<process ref="messageProcessor" />
</route>
我有 2 个相同的电话:
String msg1 = exchange.getIn().getBody(String.class);
String msg2 = exchange.getIn().getBody(String.class);
在 msg1 中我得到了正确的期望值,但是 msg2 是一个空字符串。我没有设置 Out 消息,因此交换 In 消息应该仍然完好无损。请解释为什么会这样。
骆驼路线:
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route id="route1">
<from uri="timer://myTimer?period=2000" />
<setBody>
<simple>Hello World ${header.firedTime}</simple>
</setBody>
<process ref="messageProcessor" />
<to uri="http://localhost:8090"/>
</route>
<route id="route2">
<from uri="jetty://http://localhost:8090" />
<process ref="messageProcessor" />
</route>
</camelContext>
处理器只包含上面的 2 个语句。 route1 中的处理是正确的,但在 route2 中我得到了描述的行为:第一次调用 - 有效字符串,第二次调用 - 空字符串。所以我觉得可能跟HttpMessage转换有关系。
来自http://camel.apache.org/jetty.html
Jetty is stream based, which means the input it receives is submitted to Camel as a stream. That means you will only be able to read the content of the stream once.
只需将输入转换为字符串,然后再使用它两次或更多次
<route id="route2">
<from uri="jetty://http://localhost:8090" />
<convertBodyTo type="String" />
<process ref="messageProcessor" />
</route>