拦截传入消息并将其记录到端点
Intercept and log incoming message to endpoint
我想在我的 beans 设置中记录传入的 SOAP,但我不知道如何拦截请求的主体。
我发现如果我将 ?dataFormat=MESSAGE 添加到我的 CxfEndpoint 它会显示 xml 输入但会弄乱提供 的数据格式addBookTransformer.
<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。
您正在寻找的是一个众所周知的要求。提供解决方案的模式是过滤器,它作为一个概念存在于 J2EE 规范的早期版本中。回到我们(恐龙)编写 servlet 的时代,您可以向您的 servlet 添加一个过滤器,它拦截两者,在它到达您的 servlet 之前请求和在您的 servlet 生成之后但在它发送到客户端之前的响应.在您的过滤器中,您可以记录信息、将其重定向到不同的目的地、拒绝它或做任何您喜欢的事情。相同的概念保持不变。您需要为所有或部分端点定义一个过滤器,并在您的过滤器中进行日志记录。如果您使用 Spring 引导,这里的文章描述了如何在 Spring 引导中为端点添加过滤器:How to Define a Spring Boot Filter?
我想在我的 beans 设置中记录传入的 SOAP,但我不知道如何拦截请求的主体。
我发现如果我将 ?dataFormat=MESSAGE 添加到我的 CxfEndpoint 它会显示 xml 输入但会弄乱提供 的数据格式addBookTransformer.
<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。
您正在寻找的是一个众所周知的要求。提供解决方案的模式是过滤器,它作为一个概念存在于 J2EE 规范的早期版本中。回到我们(恐龙)编写 servlet 的时代,您可以向您的 servlet 添加一个过滤器,它拦截两者,在它到达您的 servlet 之前请求和在您的 servlet 生成之后但在它发送到客户端之前的响应.在您的过滤器中,您可以记录信息、将其重定向到不同的目的地、拒绝它或做任何您喜欢的事情。相同的概念保持不变。您需要为所有或部分端点定义一个过滤器,并在您的过滤器中进行日志记录。如果您使用 Spring 引导,这里的文章描述了如何在 Spring 引导中为端点添加过滤器:How to Define a Spring Boot Filter?