包装 @Endpoint 注解的 Spring-WS 端点的调用

发布于 2024-11-23 18:19:48 字数 299 浏览 2 评论 0原文

(Java 6、Spring 3、Spring-WS 2、JAXB2、Tomcat 6)

我需要将请求和响应 XML 记录到数据库表中。我希望能够在收到请求 XML 时创建一条记录,并在响应 XML(或故障)准备就绪时更新相同的记录。有没有办法用 Spring-WS 2 做到这一点?

我想在解组 XML 之前包装端点的调用,以便可以保存请求 XML、调用端点,最后保存响应 XML。保存请求 XML 后,我将使用从数据库返回的唯一 ID 来标识需要使用响应 XML 更新的记录。

非常感谢所有帮助!

(Java 6, Spring 3, Spring-WS 2, JAXB2, Tomcat 6)

I have a requirement to log the request and response XML to a database table. I would like to be able to create a record on receipt of the request XML and update the same record when the response XML (or fault) is ready. Is there a way to do this with Spring-WS 2?

I want to wrap the invocation of the endpoint prior to unmarshalling the XML so I can save request XML, invoke the endpoint, and finally save response XML. I would use the unique ID returned from the DB after saving the request XML to identify the record that needs to be updated with the response XML.

All help is much appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长不大的小祸害 2024-11-30 18:19:48

您可以使用 Spring-WS EndpointInterceptors。

实现拦截器。

您必须实现org.springframework.ws.server.EndpointInterceptor接口,其中提供了对请求和响应事件进行操作的方法。

通过访问 MessageContext 对象,您可以检索请求和响应消息(getRequest 和 getResponse 方法)。
您还可以使用 setProperty 方法在请求时刻存储可在响应中访问的信息以关联信息(例如,要在数据库中更新的记录的 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"/>

You can use Spring-WS EndpointInterceptors.

Implement an interceptor.

You have to implement the org.springframework.ws.server.EndpointInterceptor interface where methods to act on the request and response events are provided.

By accessing the MessageContext object, you can retrieve the request and response mesages (getRequest and getResponse methods).
You can also use the setProperty method to store information in the request moment that is accessible in the response to correlate information (e.g., the ID of the record to update in the DB for example).

Configure the interceptor.

The interceptor either can be configured for a specific request or globally for all the web services. I copy some configuration from the documentation:

<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"/>
你曾走过我的故事 2024-11-30 18:19:48

是的,您可以通过在 log4j.properties 文件中复制以下行来记录肥皂请求和响应。

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

Yes you can log the soap request and response by copying the following line in your log4j.properties file.

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

You can get more information from this link http://static.springsource.org/spring-ws/sites/2.0/reference/html/common.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文