当前位置: 首页 > 知识库问答 >
问题:

Camel pollEnrich和xml 'prettyPrint '

锺离珂
2023-03-14

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

现在,响应通常返回得很好(例如,在web浏览器中)。问题似乎是,它不只是在一行上,出于某种原因,Camel将每一行依次读入同一个缓冲区,从字符0开始……所以我们最终得到的是pollEnrich输出中的一行。也就是说,touri=“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”格式…有人知道怎么做吗?留档似乎表明此选项不存在——在这种情况下,我会认为这是一个bug…尽管我想有人可能会争辩说应该使用自定义聚合策略(我不同意那个人的观点,引用这个案例的简单性):)

更新#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 . groupedexchangeaggerationstrategy,但我猜Camel总是将EOL字符作为消息分隔符,这是有配置限制的。

更新#2 -附加信息:< br >收到的REST(GET)响应(用wget测试)有空行和空字段-但没有回车(^M).我已经尝试了http和http4组件——结果相同。有一个前导< code >

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

                <CODE>XYZ</CODE>

                <Locale>Western</Locale>
            ...  

(同样,其中空格缩进已使用tabs完成-并且空白行也有一些制表符)

共有1个答案

韦澄邈
2023-03-14

…所以“答案”是,这是日志组件的“显示流”逻辑的明显限制(或bug限制)。我在

仅供参考:这是camel paxlogging(2.12.0.redhat-610379)-不确定对应于camel的底层版本,因为我的maven repo中似乎没有jboss-parent-2.12.0 pom,这很奇怪,因为我有其他jboss父pom,红帽文档似乎没有涉及到版本组合。

仅供参考#2:在相关的说明中,当我使用GroupedExchangeAggregationStrategy时,它确实会产生一个列表

 类似资料:
  • 问题内容: 关于它们有很多传说。我想知道真相。以下两个示例之间有什么区别? 问题答案: 不确定从何处获得传说,但: 提交按钮 与: IE6将在标记之间提交此按钮的所有文本,其他浏览器将仅提交值。使用可使您在按钮的设计上享有更大的布局自由度。从各种意图和目的看,它乍一看似乎很棒,但是各种浏览器怪癖使它有时很难使用。 在您的示例中,IE6将发送到服务器,而其他大多数浏览器将不发送任何内容。要使其跨浏览

  • 什么区别以及如何正确重写代码?

  • 我试图理解为什么下面两个代码块会产生不同的结果。 代码块1按预期工作,并返回从数据库中查找的提供程序的数组。另一方面,代码块2返回函数数组。在理解promissione.all()和async/await时,我觉得缺少了一些简单的东西。 代码块的差异如下: > 块1:创建许诺函数数组,然后使用map运算符将其包装在异步函数中。 块2:许诺函数的数组被创建为异步函数。因此,不调用map运算符。 如果

  • 问题内容: 我才刚刚开始研究SQL。 我有一个SQL Server 2008r2数据库,它将返回两个字段DocDate和InvValue。我需要将InvValues汇总为今天的MTD和YTD,所以看起来像 我已经做了大量的Google搜寻,并且可以使用SUM&DATEPART进行一项或多项,但是我坚持尝试两者兼而有之。 有人可以给我一些伪代码,以帮助我进一步谷歌。 谢谢@戈登·利诺夫(Gordon

  • 这个示例代码来自一本Java书籍,从墙上的99瓶啤酒到没有啤酒打印出这首歌。问题是,当墙上是1瓶啤酒时,它仍然写着瓶子。我试图通过在末尾添加部分来解决这个问题。但是,它仍然显示1瓶啤酒在墙上,我瓶啤酒在墙上。 我不知道该改变什么来解决这个问题。是否创建另一个while部分? 如果你能给他们一个提示,这样我就可以自己解决它,那也很酷!因为我知道我的实际歌曲输出是在第一个if部分,但我不知道我应该在哪

  • 原文地址:https://cesiumjs.org/tutorials/cesium-and-webpack/ Cesium 和 Webpack Webpack是非常强大非常流行的JavaScript 模块打包工具。它可以让开发人员以一种简单直观的 require 方式去加载各种页面需要的文件,极大的方便了开源人员对代码和资源文件进行结构化设计。当编译的时候,它会跟踪代码依赖性,把所有的模型打包到

  • 问题内容: 我一直在学习redis和node.js。我有两个问题,找不到令人满意的答案。 我的第一个问题是关于在node.js中重用Redis客户端。我找到了这个问题和答案:如何在socket.io中重用Redis连接,但还不足以让我满意。 现在,如果我在连接事件中创建redis客户端,它将为每个连接生成。因此,如果我有2万个并发用户,那么将有2万个Redis客户端。 如果我将其放在连接事件之外,

  • 我需要控制日志框架的最大磁盘空间量。 例如,在log4j中,如果有如下所示的追加器,我可以很容易地估计需要多少磁盘空间: 对于maxFileSize和maxBackupIndex,我知道最多需要10x100KB。 我注意到DailyRollingFileAppender,但它不支持maxFileSize。 除了RollingFileAppender之外,是否还有其他fileappender可以实现