2016-02-09 49 views
0

我是Spring SOAP請求的新手。我想查看包含SOAP頭和SOAP信封的SOAP請求的最終XML輸出。如何在Spring中查看SOAP請求的XML輸出?

調試時我最多時達到這段代碼

sendSourceAndReceiveToResult(partnerURI, source, 
    new WebServiceMessageCallback() { 

     public void doWithMessage(WebServiceMessage message) 
     throws IOException, TransformerException { 

      StringSource mefHeaderSource = new StringSource(
       header); 

      SoapHeader soapHeader = ((SoapMessage) message) 
       .getSoapHeader(); 

      Transformer transformer = TransformerFactory 
       .newInstance().newTransformer(); 

      transformer.transform(mefHeaderSource, 
       soapHeader.getResult()); 

     } 
    }, result); 

我懷疑在這裏我可以看到的地方通過把一些記錄器輸出XML SOAP請求,但我不知道我是正確的。我試圖尋找它,但在谷歌所有可用的帖子都沒有清楚。

我們正在調試的問題是客戶端無法在SOAP請求中看到SOAP頭。

回答

0
從彈簧文檔

爲登錄完整的請求和消息的SOAPMessage的 響應信封SoapEnvelopeLoggingInterceptor

特定SOAP-EndpointInterceptor。默認情況下,請求 響應和故障信息的記錄,但這種行爲是 使用logRequest,logResponse改變,logFault性能

您可以啓用這個攔截器加入

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:sws="http://www.springframework.org/schema/web-services" .../> 

     <sws:interceptors> 
     <bean class="org.springframework.ws.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor"/> 
     </sws:interceptors> 

     <sws:static-wsdl ..../> 

+0

感謝您的回覆。在哪裏添加這段代碼以及如何查看messgae。我們只是測試它的虛擬URL。 –

+0

這個bean應該爲ws端點所在的同一個容器定義。日誌消息將被記錄器跟蹤,所以只需添加此bean,在主日誌appenders中配置所需的屬性並跟蹤消息 – hahn

+0

完整的軟件包名稱應爲org.springframework.ws.soap.server.endpoint.interceptor –

2

請務必使用Commons Logging version 1.1或更高版本。

要登錄所有服務器端的郵件,只需將org.springframework.ws.server.MessageTracing記錄器級別DEBUGTRACE。 在調試級別上,僅記錄淨荷根元素;在TRACE級別,整個消息內容。如果您只想記錄發送的消息,請使用org.springframework.ws.server.MessageTracing.sent記錄器; 或org.springframework.ws.server.MessageTracing.received記錄收到的消息。

在客戶端,存在類似的記錄器:org.springframework.ws.client.MessageTracing.sent和org.springframework.ws.client.MessageTracing.received。

以下是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 
+0

感謝您的回答,但在這個日誌將被打印意味着什麼將是文件名... –

+0

你可以把它在這裏聊天在stackoverflow,所以我可以廣泛地向你解釋! –

+0

上面的日誌4j配置應寫入您的log4j.properties文件中。 Apache log4j提供了Appender對象,它主要負責將日誌消息打印到不同的目標,如控制檯,文件,套接字,NT事件日誌等。因此,在這裏ConsoleAppender將其輸出寫入System.err或System.out,而System.err是默認目標。 – user