2017-07-03 3 views
0

Ich habe eine http eingehende Gateway und definiert einen Fehlerkanal zum Gateway.MessageTransformation Ausnahme bei der Fehlerbehandlung in Spring Integration

<int-http:inbound-gateway 
    request-channel="requestChannel" reply-channel="replyChannel" 
     supported-methods="POST" request-payload-type="com.test.RequestWsDTO" 
    path="/trips/modify" error-channel="errorChannel" > 
    <int-http:request-mapping consumes="application/json" produces="application/json" /> 
</int-http:inbound-gateway> 

Von dem Gateway, geht es zu einem Transformator, um die Nachricht an eine entsprechende Anforderung an Transformation für ws

<int:transformer id="segmentCancelTransformer" ref="segmentCancelTransformerBean" input-channel="segmentCancelChannel" 
      method="transform" output-channel="rcsChannel"/> 
    <beans:bean id="segmentCancelTransformerBean" class="com.test.SegmentCancelRequestTransformer" /> 

outboundgateway ich eine Laufzeitausnahme aus dem Transformator zu werfen.

Ich habe einen Service-Aktivator definiert die Ausnahme

<int:service-activator input-channel="errorChannel" ref="exceptionhandler" method="createErrorResponse"/> 
<beans:bean id="exceptionTransformer" class="com.test.ExceptionHandler" /> 

In der Exceptionklasse zu handhaben, ich bin Umgang mit der Ausnahme wie

public ErrorDTO createErrorResponse(ErrorMessage msg) { 
     System.out.println("Exception occured "+msg.getPayload()); 
     ErrorDTO dto=new ErrorDTO(); 
     ...................... 

msg.getPayload() zeigt die Ausnahme zu sein von "org.springframework.integration.transformer.MessageTransformationException"

Ausnahmemeldung Stacktrace:

Exception occured org.springframework.integration.transformer.MessageTransformationException: Failed to transform Message; nested exception is org.springframework.messaging.MessageHandlingException: nested exception 

Was mache ich hier falsch?

+0

Sie tun absolut richtig. Aber was ist die Frage? Vielleicht solltest du wirklich diese verschachtelte Ausnahme als Antwort betrachten? Bitte formuliere dein Problem um und erkläre, was du erreichen willst. –

+0

Wenn ich eine benutzerdefinierte Ausnahme auswerfe, erhalte ich immer MessageTransformationException, und die ausgelöste Ausnahme kommt im verschachtelten Ausnahmeteil. Ich denke nicht, dass das richtig ist. Ich sollte eine Ausnahme vom Typ MessageHandlingException bekommen. Ist es nicht? Nach meinem Verständnis wird die benutzerdefinierte Ausnahme nicht korrekt im Fehlerkanal umgewandelt, daher immer eine Ausnahme für die Umwandlung geben. Ich möchte wissen, ob ich etwas verpasst habe? –

Antwort

0

Das ist wirklich richtig und auch nützlich. Zuerst beschäftigen Sie sich mit Messaging, wobei die lose Kopplung das erste der Prinzipien zwischen Komponenten ist. Ein weiterer Vorteil ist die , die auf die Eigenschaft MessagingException gesetzt ist, die Sie verwenden können, um das Problem zu bestimmen.

Da der Fehler möglicherweise von einem anderen Thread stammt, ist es schwierig, anhand einer benutzerdefinierten Ausnahme festzustellen, was falsch ist. Wie auch immer, Sie können im Stack-Trace immer Ihre eigene Ursache finden.

+0

danke. Meine Sorge hier ist, warum es MessageTransformationException statt MessageHandlingException gibt. Ausnahme aufgetreten org.springframework.integration.transformer.MessageTransformationException: Fehler beim Umwandeln der Nachricht; verschachtelte Ausnahme ist org.springframework.messaging.MessageHandlingException: Ich weiß, beide sind vom Typ MessagingException, aber ich muss 3 Ebenen im Stack-Trace durchlaufen, um die tatsächliche Ausnahme zu finden geworfen. Unterscheidet sich MessageHandlingException auch nicht von MessageTransformationException? –

+0

Ja, ich verstehe deinen Standpunkt. Ich denke, der POJO-Methoden-Aufrufer weiß nichts über den Transformer-Kontext, also wirft er 'MessageHandlingException' so wie er ist. Der Transformator wiederum löst die Ausnahme gemäß seiner Logik aus. Sie könnten Recht haben und wir können es überdenken, MessageHandling nicht zu werfen, wenn die Zielausnahme Runtime ist. Bitte heben Sie eine JIRA und wir werden denken, was zu tun ist –

+0

Dank Artem, Erstellt ein Jira-Ticket. –

Verwandte Themen