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

问题描述 投票:0回答:2

我想在我的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>

是否有方法来迭代并记录传入的发布请求数据?

java apache-camel cxf javabeans
2个回答
0
投票

您可以为此窃听

<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,您可以根据需要读取和处理。这是此的documentation


0
投票

您正在寻找的是一个众所周知的要求。提供解决方案的模式是Filter,并且在J2EE规范的早期版本中就作为一个概念存在。回到我们(恐龙)编写servlet的时代,您可以在servlet中添加一个过滤器,该过滤器既拦截,在到达servlet之前发出请求,又在servlet生成之后但在发送到客户端之前进行响应。 。在过滤器中,您可以记录信息,将其重定向到其他目标,拒绝它或执行您喜欢的任何事情。相同的概念保持不变。您需要为所有或某些端点定义一个过滤器,并在过滤器中进行日志记录。如果您使用Spring Boot,那么这里的文章描述了如何在Spring Boot中为端点添加过滤器:How to Define a Spring Boot Filter?

© www.soinside.com 2019 - 2024. All rights reserved.