2016-01-15 46 views
1

我正在使用spring集成(4.0.6)使用int-http:outbound-gateway和int-ws:outbound-gateway從其餘服務進行SOAP調用。有沒有辦法只在發生異常時才記錄SOAP請求消息。在http網關彈簧集成上記錄SOAP消息

<int:gateway id="myGateway" service-interface="myservice"> 
    <int:method name="getData" request-channel="reqChannel" reply-channel="repChannel"> 
</int-gateway> 

我的出站網關配置如下

<int-http:outbound-gateway id="og1" request-channel="reqChannel" url="xxx" http-method="POST" reply-channel="repChannel" reply-timeout="10000" message-converters="converter" request-factory="reqFactory"> 

<bean id="reqFactory" 
    class="org.springframework.http.client.SimpleClientHttpRequestFactory"> 
    <property name="cTimeout" value="20000"/> 
    <property name="rTimeout" value="20000"/> 
</bean> 
+0

請通過將其滾回早期不完整的版本來阻止排除帖子。如果您希望請求解除關聯,以便您的姓名不再與帖子相關聯,請使用頁面底部的「與我們聯繫」鏈接。 – josliber

+0

昨天我聯繫了兩次(與我們聯繫)刪除我的帖子及其修訂版。你能幫我刪除這篇文章的修改和帖子。謝謝。 –

+0

@HariBajavada這是週末。這些東西在週末需要更長的時間。 – ChrisF

回答

0

會更好分享一些配置,並在那裏你想獲得一個日誌/異常點。

兩者<int-http:outbound-gateway><int-ws:outbound-gateway><request-handler-advice-chain>能力,在那裏你可以使用ExpressionEvaluatingRequestHandlerAdvice,並請求發送ErrorMessage(有罪?)消息的任何診斷。

您應該將readTimeout配置在適當的ClientHttpRequestFactory(例如, HttpComponentsClientHttpRequestFactory#setReadTimeout(int timeout)

關於轉換器,並記錄他們的結果在錯誤的情況下心願......

如何實現ClientHttpRequestInterceptor與所需的邏輯:

try { 
    return execution.execute(request, body); 
catch (Exception e) { 
    this.errorChannel.send(...); 
} 

我prety確保byte[] body是您的SOAP請求。

請參閱ClientHttpRequestInterceptor JavaDocs以獲取更多信息。

ClientHttpRequestInterceptorRestTemplate的一部分,它可以注入到http:outbound-gateway

對於ws:outbound-gateway,您應該使用ClientInterceptorhandleFault實現並提取MessageContext.getRequest()爲您的目的。

+0

不,請對您的問題進行編輯*,並在那裏分享更多信息。或者試着弄清楚我的答案是否足夠適合你,我可以繼續爲其他人提供幫助。 –

+0

請將相同的問題移動到您的問題並正確格式化,以獲得更好的可讀性。 –

+0

在''級別上,您可以配置'receive-timeout'和'error-channel'。有關詳情,請參閱參考手冊:http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/messaging-endpoints-chapter.html#gateway –

1

好的,試試這個方法。 創建您自己的錯誤處理程序,它實現了彈簧錯誤處理程序接口。在您的上下文文件

<bean id="soapErrorHandlingSyncTaskExecutor" 
    class="org.springframework.integration.util.ErrorHandlingTaskExecutor"> 
     <constructor-arg> 
      <bean class="org.springframework.core.task.SyncTaskExecutor" /> 
     </constructor-arg> 
     <constructor-arg> 
      <bean class="ErrorHandle" 
p:errorSender-ref="errorSender"/> 
     </constructor-arg> 
    </bean> 
<bean id="errorSender" class="org.springframework.integration.core.MessagingTemplate" 
     p:defaultChannel-ref="errors" /> 

當過你的WS適配器拋出任何異常,然後org.springframework.integration.util.ErrorHandlingTaskExecutor現在它捕獲這個例外高達你,你如何處理你的錯誤處理程序除外。

在MessagingException的原因(如果是SoapFaultClientException)中找到SOAP faultcode和faultstring。

在這裏,我將錯誤消息發送到一個頻道供我監視。

希望這會有所幫助。