我正在尝试使用Camel的pollEnrich功能,但它并不像我想要的那样 ...我不是说它已经坏了,但想知道是否有办法获得这种行为我渴望。也就是说,我有一个XML(蓝图)定义的路由,如下所示:
<route>
<from uri="direct:a" />
<pollEnrich uri="http:www.somewebsite.com?format=application/xml" />
<to uri="log:com.acme?level=WARN&showStreams=true" />
</route>
现在,响应通常很好(例如,在网络浏览器中)。 问题似乎不仅仅是在一行上,而且由于某种原因,Camel从字符零开始按顺序读入每一行,顺序进入同一个缓冲区......所以我们最终得到的是来自pollEnrich的输出中有一条凌乱的行。也就是说,to uri="log...
行打印如下消息:
2015-05-26 13:55:26,379 | WARN | a.distr.topic.B] | contentEnrich |
? ? | 142 - org.apache.camel.camel-core - 2.12.0.redhat-610379 |
Exchange[ExchangePattern: InOnly, BodyType:
org.apache.camel.converter.stream.InputStreamCache, Body:
<?xml versi</ElementStatus> ]pe></Status>nd>gin>ys for this element.</Reason>>ame>
(最后一行垂直偏移以强调)
我似乎无法找到一种方法告诉Camel结果将采用'prettPrint'格式......任何人都知道如何?文档似乎表明这个选项不存在 - 在这种情况下,我认为这是一个错误...虽然我想一个人可能会争辩应该使用自定义聚合策略(我不同意与那个人一起,引用这个案例的简单性):)
UPDATE#1:即使使用org.apache.camel.processor.aggregate.UseLatestAggregationStrategy也会产生相同的效果。 (即,用法如下)
<bean id="latestStrat"
class="org.apache.camel.processor.aggregate.UseLatestAggregationStrategy" />
<route>
<from uri="direct:a" />
<pollEnrich uri="http:www.somewebsite.com?format=application/xml" strategyRef="latestStrat" />
<to uri="log:com.acme?level=WARN&showStreams=true" />
</route>
...试图交叉并尝试org.apache.camel.processor.aggregate.GroupedExchangeAggregationStrategy,但我猜测Camel总是将EOL字符视为消息分隔符存在配置限制。
更新#2 - 附加信息:
收到的REST(GET)响应(使用wget测试)有空行和空字段 - 但没有回车符(^ M)。我已经尝试过http和http4组件 - 结果相同。有一个前导<?xml version="1.0" encoding="UTF-8"?>
,但没有命名空间/样式信息。我还注意到选项卡字符已用于 pretty-ish 缩进。总之,响应看起来像:
<?xml version="1.0" encoding="UTF-8"?><ElementStatus>
<Flag>false</Flag>
<CODE>XYZ</CODE>
<Locale>Western</Locale>
...
(再次,使用制表符进行空格缩进 - 并且空行也有几个制表符)
答案 0 :(得分:0)
...所以“答案”是这是日志组件的“showStreams”逻辑的明显限制(或内部错误)。我在&lt; bean&gt;中实现了Processor,将pollEnrich的Exchange输出路由到&lt; bean&gt;,然后记录了内容,并且与wget的输出完全匹配。
仅供参考:这是camel-paxlogging (2.12.0.redhat-610379)
- 不确定骆驼的基础版本对应的是什么,因为我的maven回购似乎没有jboss-parent-2.12.0 pom - 这很奇怪,因为我有其他jboss-parent poms - 并且red hat文档似乎没有进入版本组合。
仅供参考#2:在相关的说明中,当我使用GroupedExchangeAggregationStrategy
时,它会产生List<Exchange>
,但它的行为与UseLatestAggregationStrategy
有效 - 即“分组”生成仅具有pollEnrich结果的单项List<Exchange>
,其中'latest'生成仅具有pollEnrich结果的独立Exchange
对象。似乎GroupedExchangeAggregationStrategy
或pollEnrich
中的错误...但这可能是我下一个Stack-post的主题。