2016-07-22 10 views
1

Ich habe vor kurzem von Spring Integration 4.1.3 auf 4.2.6 aktualisiert und festgestellt, dass ich eine 500 Antwort von einem http:inbound-gateway bekommen habe. Nach Untersuchung war dies auf eine leere Antwort und das Gateway dies als ein Timeout in MessagingGatewaySupport InterpretationSpring Integration http: Inbound-Kanal-Adapter Fehler-Kanal

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

Dies macht Sinn, so änderte ich dies ein http:inbound-channel-adapter und es löst dieses Problem, aber dann doesn die Fehlerbehandlung‘ t verhalten sich wie erwartet.

ich vorher hatte und fehler Kanal auf dem Gateway mit

<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"/> 

Ich vermutete, dass es nicht funktionieren kann, aber ich leicht modifiziert, dies zu

<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"/> 

Jetzt ist es für einen normalen adaequat gültig POST-Anfrage, aber wenn ich eine ungültige Nachricht, dass Fehler senden, bekomme ich eine 500 Antwort mit voller Fehler-Stack als Antwort (habe versucht, den Status-Code in der Header-Enricher zu ändern). Der Fehler ist

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

was Sinn macht, da die error-channel keinen Ausgang hat (obwohl es nicht in der Dokumentation entweder http://docs.spring.io/spring-integration/docs/4.3.0.RELEASE/reference/htmlsingle/#http-response-statuscode). Gibt es eine Möglichkeit, die Fehlerreaktion für den eingehenden Adapter auf ähnliche Weise wie beim Gateway zu ändern?

Antwort

1

Ich denke, es ist ein Fehler, öffnen Sie bitte eine JIRA Issue.

Als Arbeit um, in der Hauptströmung, kurz nach dem Adapter, eine Mitte-Flow-Gateway hinzufügen ...

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

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

Das Gateway ist wie ein try/catch-Block um den Fluss.

Das Antwortzeitlimit ist wichtig, da Sie keine Antwort erwarten.