Camel pollEnrich和xml'beautifulPrint'

时间:2015-05-26 19:30:48

标签: apache-camel

我正在尝试使用Camel的pollEnrich功能,但它并不像我想要的那样 ...我不是说它已经坏了,但想知道是否有办法获得这种行为我渴望。也就是说,我有一个XML(蓝图)定义的路由,如下所示:

<route>
    <from uri="direct:a" />
    <pollEnrich uri="http:www.somewebsite.com?format=application/xml" />
    <to uri="log:com.acme?level=WARN&amp;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&amp;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>
            ...  

(再次,使用制表符进行空格缩进 - 并且空行也有几个制表符)

1 个答案:

答案 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对象。似乎GroupedExchangeAggregationStrategypollEnrich中的错误...但这可能是我下一个Stack-post的主题。