(Java 6,Spring 3,Spring-WS 2,JAXB2,Tomcat 6)
我需要将请求和响应XML记录到数据库表中。我希望能够在接收到请求XML时创建记录,并在响应XML(或错误)准备就绪时更新相同的记录。有没有办法用Spring-WS 2做到这一点?
我想在解组XML之前包装端点的调用,这样我就可以保存请求XML,调用端点,最后保存响应XML。保存请求XML后,我将使用从DB返回的唯一ID来识别需要使用响应XML更新的记录。
非常感谢所有帮助!
答案 0 :(得分:0)
是的,您可以通过复制log4j.properties文件中的以下行来记录soap请求和响应。
log4j.rootCategory=INFO, stdout
log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE
log4j.logger.org.springframework.ws.client.MessageTracing.received=DEBUG
log4j.logger.org.springframework.ws.server.MessageTracing=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p [%c{3}] %m%n
您可以从此链接http://static.springsource.org/spring-ws/sites/2.0/reference/html/common.html
获取更多信息答案 1 :(得分:0)
您可以使用Spring-WS EndpointInterceptors。
实施拦截器。
您必须实现org.springframework.ws.server.EndpointInterceptor
接口,其中提供了处理请求和响应事件的方法。
通过访问MessageContext对象,您可以检索请求和响应消息(getRequest和getResponse方法)。 您还可以使用setProperty方法将信息存储在响应中可访问的请求时刻,以便关联信息(例如,要在DB中更新的记录的ID)。
配置拦截器。
拦截器可以针对特定请求进行配置,也可以针对所有Web服务进行全局配置。我从文档中复制了一些配置:
<sws:interceptors>
<bean class="samples.MyGlobalInterceptor"/>
<sws:payloadRoot namespaceUri="http://www.example.com">
<bean class="samples.MyPayloadRootInterceptor"/>
</sws:payloadRoot>
<sws:soapAction value="http://www.example.com/SoapAction">
<bean class="samples.MySoapActionInterceptor1"/>
<ref bean="mySoapActionInterceptor2"/>
</sws:soapAction>
</sws:interceptors>
<bean id="mySoapActionInterceptor2" class="samples.MySoapActionInterceptor2"/>