Camel pollEnrich 和 xml 'prettyPrint'

Camel pollEnrich and xml 'prettyPrint'

我正在尝试使用 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>

现在,响应通常会正常返回(例如,在网络浏览器中)。 问题似乎不​​只是在一行上,出于某种原因,骆驼读取每一行,顺序进入同一个缓冲区,从字符零开始......所以我们结束了up with 是 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' 格式...有人知道怎么做吗?文档似乎表明这个选项不存在——在这种情况下,我认为这是一个错误……尽管我想有人可能会争辩说应该使用自定义聚合策略(我不同意与那个人,引用这种情况的简单性):)

更新#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 测试)有空行和空字段——但没有回车符 returns (^M)。我已经尝试了 http 和 http4 组件——相同的结果。有前导 <?xml version="1.0" encoding="UTF-8"?>,但没有 namespace/style 信息。我还刚刚注意到 pretty-ish 缩进使用了制表符。总之,响应如下所示:

<?xml version="1.0" encoding="UTF-8"?><ElementStatus> 
                <Flag>false</Flag>

                <CODE>XYZ</CODE>

                <Locale>Western</Locale>
            ...  

(同样,空格缩进是用制表符完成的——空白行也有几个制表符)

...所以 "answer" 是日志组件的 "showStreams" 逻辑的明显限制(或内部错误)。我在 中实现了 Processor,将 Exchange 输出从我的 pollEnrich 路由到那个 ,并改为记录内容,这与 wget 的输出完全匹配。

仅供参考:这是 camel-paxlogging (2.12.0.redhat-610379) - 不确定 camel 对应的底层版本,因为我的 maven 中似乎没有 jboss-parent-2.12.0 pom repo——这很奇怪,因为我还有其他 jboss-parent poms——而且 red hat 文档似乎没有进入版本组合。

FYI#2:在相关说明中,当我使用 GroupedExchangeAggregationStrategy 时,它确实会产生 List<Exchange>,但它的行为实际上与 UseLatestAggregationStrategy 相同——即,'grouped' 生成一个只有 pollEnrich 结果的单项 List<Exchange>,其中 'latest' 生成一个只有 pollEnrich 结果的独立 Exchange 对象。似乎 GroupedExchangeAggregationStrategypollEnrich 中的错误...但这可能是我下一个 Stack-post.

的主题