2016-07-22 133 views
1

我最近從Spring Integration 4.1.3更新到4.2.6,並注意到我開始從http:inbound-gateway獲得500響應。 經調查,這是由於一個空的答覆,並在MessagingGatewaySupport彈簧集成http:入站通道適配器錯誤通道

if (reply == null && this.errorOnTimeout) { 

解釋這是一個超時網關這是有道理的,所以我改變了這一個http:inbound-channel-adapter,它解決了這個問題,但隨後的錯誤處理沒有按」噸行爲如預期。

我以前曾與

<int-http:inbound-gateway id="inboundGateway" request-channel="httpInChannel" reply-channel="httpResponseChannel" path="/**/status*" supported-methods="POST" error-channel="httpErrorChannel"/> 
<int:chain input-channel="httpInChannel" output-channel="serviceChannel"> 
... 
</int:chain> 
<int:chain input-channel="httpErrorChannel"> 
    <int:header-enricher> 
     <int:header name="http_statusCode" value="500" /> 
    </int:header-enricher> 
    <int:transformer expression="payload.localizedMessage" /> 
</int:chain> 
<int:service-activator input-channel="serviceChannel" ref="someController" method="someVoidMethod"/> 

網關上的錯誤通道我懷疑它可能無法正常工作,但是我修改這個稍微

<int-http:inbound-channel-adapter id="inboundAdapter" channel="httpInChannel" path="/**/status*" supported-methods="POST" error-channel="httpErrorChannel"/> 
<int:chain input-channel="httpInChannel" output-channel="serviceChannel"> 
    ... 
</int:chain> 
<int:chain input-channel="httpErrorChannel"> 
    <int:header-enricher> 
     <int:header name="http_statusCode" value="500" /> 
    </int:header-enricher> 
    <int:transformer expression="payload.localizedMessage" /> 
</int:chain> 
<int:service-activator input-channel="serviceChannel" ref="someController" method="someVoidMethod"/> 

現在,它工作正常正常有效POST請求,但是如果我發送了一個無效的消息,那個錯誤,我得到了一個500響應,並帶有完整的錯誤堆棧響應(試圖改變頭文件中的狀態碼)。該錯誤是

org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available 

這使得作爲error-channel不具有輸出(雖然它在docs任http://docs.spring.io/spring-integration/docs/4.3.0.RELEASE/reference/htmlsingle/#http-response-statuscode不一樣)感。 有沒有方法以類似於網關的方式更改入站適配器的錯誤響應?

回答

1

我認爲這是一個錯誤,請打開JIRA Issue

作爲變通,在主流,只是適配器後,增加一箇中等流動網關...

<int:service-activator ref="gw" input-channel="httpInChannel" > 

<int:gateway id="gw" error-channel="httpErrorChannel" 
    default-request-channel="nextChannelInMainFlow" default-reply-timeout="0" /> 

網關就像是周圍流動的try/catch塊。

回覆超時很重要,因爲您不期望回覆。

相關問題