2012-08-22 44 views
0

我正在使用Apache骆驼路由从A到B的一些SOAP消息。如何正确记录骆驼中的消息/路由(流)?

我想为某些特定路由添加日志记录,但问题是邮件正文是一个流。

我的解决办法是到流转换为字符串,并随后将其发送到端点B.

这似乎很好地工作,但我不知道这种方法是干净的?

这是我的路线看起来像现在:

<route> 
    <from uri="cxf:bean:ServiceA?dataFormat=MESSAGE" /> 
    <convertBodyTo type="java.lang.String"/> 
    <to uri="log:my.company?level=WARN"/> 
    <to ref="ServiceB" /> 
</route> 

问题是,如果我应该使用窃听和数据流缓存复制的数据流,将其转换为字符串,其记录并发送其他不变流到ServiceB。 我无法找到正确执行此操作的方法。这是我的尝试:

<route streamCache="true"> 
    <from uri="cxf:bean:ServiceA?dataFormat=MESSAGE" /> 
    <wireTap uri="log:my.company?level=WARN" /> <!-- how to convert this stream to a string? --> 
    <to ref="ServiceB" /> 
</route> 

那么,你说什么? WireTap或上述解决方案?

回答

4

您可以在日志端点上启用showStreams = true选项。然后它也会记录流;你不需要在此之前转换身体。您仍然需要启用流缓存,以确保稍后在继续处理消息时可以重新读取流。

查看日志组件上的选项,从它的文档:http://camel.apache.org/log

+0

还有Apache的CXF有自己的一套记录拦截器,您可以配置登录皂含量。为了检查Apache CXF文档。 –

+0

非常感谢,这似乎是一个非常干净的解决方案。 (注意&): hennr

+0

请注意,骆驼cxf代理示例(http:// camel。 apache.org/cxf-proxy-example.html)不显示此选项,但示例输出显示记录的流! (我就是这样来的) –