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&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&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
对象。似乎 GroupedExchangeAggregationStrategy
或 pollEnrich
中的错误...但这可能是我下一个 Stack-post.
的主题
我正在尝试使用 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>
现在,响应通常会正常返回(例如,在网络浏览器中)。 问题似乎不只是在一行上,出于某种原因,骆驼读取每一行,顺序进入同一个缓冲区,从字符零开始......所以我们结束了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&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" 逻辑的明显限制(或内部错误)。我在
仅供参考:这是 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
对象。似乎 GroupedExchangeAggregationStrategy
或 pollEnrich
中的错误...但这可能是我下一个 Stack-post.