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?