2015-06-10 102 views
2

我正在使用Spring Integration 4.1.2。春季整合:SMTP服務器

在程序流程中,在流程結束時,我需要發送一封電子郵件。我正在使用以下:

<int:payload-type-router input-channel="response.in"> 
    <int:mapping type="java.lang.String" channel="response.out"/> 
    <int:mapping type="org.springframework.mail.SimpleMailMessage" channel="mail.out"/> 
</int:payload-type-router> 

<mail:outbound-channel-adapter channel="mail.out" mail-sender="mailSender"/> 

這工作正常。

我也想處理郵件服務器關閉的情況。

我試過以下解決方案,但它不起作用。

<int:chain input-channel="errorChannel" output-channel="emailErrorChannel">  
    <int:transformer ref="errorUnwrapper" /> 
</int:chain> 

而解包:

@MessageEndpoint 
public class ErrorUnwrapper { 

    @Transformer 
    public Message<?> transform(final ErrorMessage errorMessage) { 
     Message<?> failedMessage = ((MessagingException) errorMessage.getPayload()).getFailedMessage(); 
     return failedMessage; 
    } 
} 

但是,這是行不通的。我想捕捉異常並向用戶發送有意義的響應而不是堆棧跟蹤。我希望在Spring Integration中做到這一點。否則,我將不得不使用服務激活器而不是SI mail擴展來編寫Java郵件服務調用。

或者它是單向組件嗎?我剛剛發現這個blog的帖子也是這樣做的。我也讀過this,但沒有得到。

回答

1

您可能需要將errorChannel添加到您開始流動的任何東西;您需要向我們展示其餘的配置。

或者,您可以將ExpressionEvaluatingAdvice添加到郵件適配器;有關使用建議的示例,請參閱this sample

+0

非常感謝。你指出我的解決方案。我將errorChannel添加到http:入站網關,並解決了問題。 – adi