簡體   English   中英

包裝 @Endpoint 注釋的 Spring-WS 端點的調用

[英]Wrapping the invocation of an @Endpoint-annotated Spring-WS endpoint

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

我需要將請求和響應 XML 記錄到數據庫表中。 我希望能夠在收到請求 XML 時創建記錄,並在響應 XML(或故障)准備好時更新相同的記錄。 有沒有辦法用 Spring-WS 2 做到這一點?

我想在解組 XML 之前包裝端點的調用,這樣我可以保存請求 XML,調用端點,最后保存響應 XML。 在保存請求 XML 后,我將使用從數據庫返回的唯一 ID 來識別需要使用響應 XML 更新的記錄。

非常感謝所有幫助!

是的,您可以通過在 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

您可以使用Spring-WS EndpointInterceptors

實現一個攔截器。

您必須實現org.springframework.ws.server.EndpointInterceptor接口,其中提供了處理請求和響應事件的方法。

通過訪問 MessageContext object,您可以檢索請求和響應消息(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"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM