java - 拦截传入消息并将其记录到端点

标签 java apache-camel cxf javabeans

我想在我的 bean 设置中记录传入的 SOAP,但我不知道如何拦截请求的正文。

我发现如果我将 ?dataFormat=MESSAGE 添加到我的 CxfEndpoint,它会显示 xml 输入,但会弄乱提供 addBookTransformer 的 dataFormat。

<from uri="cxf:bean:CxfEndpoint?dataFormat=MESSAGE" /> 

这是我的设置

<cxf:cxfEndpoint id="CxfEndpoint"
    address="/host/addBook"
    endpointName="a:addBookEndpoint"
    serviceName="a:addBookService"
    wsdlURL="wsdl/add-book.wsdl"
    serviceClass="com.library.AddBookEndpoint"
    xmlns:a="http://library.com"/>

<bean id="addBookTransformer" class="com.library.bookshelf.AddBookTransformer"/>

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route id="addBook" streamCache="true">
        <from uri="cxf:bean:CxfEndpoint" />
        <process ref="addBookTransformer" />
        <log message="${body}"/>
    </route>
</camelContext>

有没有办法拦截并记录传入的post请求数据?

最佳答案

你可以为此进行窃听

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route id="addBook" streamCache="true">
        <from uri="cxf:bean:CxfEndpoint" />
        <process ref="addBookTransformer" />
        <wireTap uri="direct:tap"/>
        <to uri="mock:result"/>
        <log message="${body}"/>
    </route>
</camelContext>

交换的副本将发送至 direct:tap,您可以根据需要进行读取和处理。

例如,我们可以像这样记录消息。您还可以添加另一个处理器。

<route id="wiretapped" streamCache="true">
     <from uri="direct:tap" />
     <log message="${body}"/>
</route>

这是documentation为此。

关于java - 拦截传入消息并将其记录到端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58709154/

相关文章:

java - 如何创建一个将打印方法引用作为参数的函数?

java - 有没有办法在 Camel 关闭时保留飞行中的消息,并在随后的启动时重新加载?

apache-camel - Apache产品与Redhat Fuse的开发差异有哪些?

java - 如何强制 CXF 序列化所有自动生成的客户端类?

java - 从引用本地主机的远程 WSDL 创建 CXF 客户端

java - CXF JAXRS - 如何将日期作为 QueryParam 传递

java - 在我的示例中,这个异步调用是如何工作的

java - 仅允许使用 java 扫描仪进行双输入

java - 找不到符号类 onClickListener

apache-camel - Camel -Hystrix-EIP : Is it possible to dynamically select onFallback or onFallbackViaNetwork based on content body in exchange?