2016-04-06 4 views
0

Ich habe eine Camel-Anwendung, die einen RESTFul-Dienst aufruft.So kommunizieren Sie Ausnahmen zwischen Routen in Camel

ich eine RESTful und eine SOAP-Schnittstelle für meine Kunden

aussetzen Sowohl die RESTful und die SOAP-Routen eine gemeinsame Route Aufruf am Ende, die tatsächlich den Anruf an den RESTful Service macht.

Also, es ist wenig wie

<camel:route> 
    <camel:from uri="RESTFUL_INTERFACE" /> 
    <camel:to uri="direct:CALLEXTERNAL_REST_SERVICE" /> 
    <camel:to uri="ADAPT_RESPONSE" /> 
</camel:route> 

<camel:route> 
    <camel:from uri="SOAP_INTERFACE" /> 
    <camel:to uri="direct:CALLEXTERNAL_REST_SERVICE" /> 
    <camel:to uri="ADAPT_RESPONSE" /> 
</camel:route> 

<camel:route> 
    <camel:from uri="direct:CALLEXTERNAL_REST_SERVICE" /> 
    <camel:to uri="EXTERNAL_RESTFUL_SERVICE" /> 
</camel:route> 

Wenn mein Aufruf an EXTERNAL_REST_SERVICE fehlschlägt (Verbindung zum Beispiel verweigert), dann brauche ich verschiedene Aktionen in meinem REST und SOAP-Routen zu nehmen. Soweit ich das beurteilen kann, gilt onException nur für die Route, in der es angegeben ist.

Wie kommuniziere ich den Fehler in direct:CALLEXTERNAL_REST_SERVICE zurück zu den "äußeren" Routen?

Antwort

1

Sie können eine onException für Ihren Kamelkontext haben (dies wird auf alle Routen in diesem Kontext angewendet). Von dort ist onException einfach nur eine andere Route. Sie können beispielsweise eine CBR erstellen und angeben, was als nächstes zu tun ist, je nachdem, wo die Ausnahme aufgetreten ist.

+0

Ich bin ziemlich neu in Camel - Was ist ein CBR? – DaveH

+0

Inhalt basierte Router: http://camel.apache.org/content-based-router.html –

+0

Ok - danke - aber woher sollte diese Route wissen, was es Herkunft war? Wie würde es wissen, dass es, wenn es auf eine REST-Anforderung antwortet, einen HTTP 500-Code mit JSON zurückgeben sollte, während wenn es von einer SOAP-Anfrage stammte, es HTTP 200 mit einer SOAP FAULT-Nachricht zurückgeben sollte? – DaveH

Verwandte Themen