2016-05-13 13 views
0

Ich rufe zu einem WS mit cxf: cxfEndpoint und es funktioniert gut. Ich möchte alle Ausnahmen mit onException oder etwas ähnliches abfangen. Aus irgendeinem Grund funktioniert es nicht. Ich habe das dataformat auf PAYLOAD gesetzt, das handleFault-Attribut auf der Route und/oder den camel-Kontext auf true. Der Webdienst wird nicht ausgeführt, daher erwarte ich, dass die Ausnahme abgefangen wird, aber nicht funktioniert. Gleiches Problem mit dem Unmarshalling des XML.Camel ErrorHandler nicht aufrufen

Wenn ich eine Ausnahme mit der Verwendung wirft wird es gefangen gefangen mit java.lang.Exception und in meine Dummy-Ausnahmewarteschlange geschrieben ... aber wenn der Webservice ist oder ich einige ungültige XML übergeben und das Marshalling fehlschlägt dann eine Ausnahme wird geworfen, aber nicht gefangen.

Ist noch etwas zu beachten?

EDIT: Enthalten den Code für das Unmarshalling. Geschaltet mit Try/Catch und wenn ich in einem ungültigen XML passieren nicht die Ausnahme während der JUnit-Tests erwischt aber zur Laufzeit nicht

<route> 
     <from uri="jmsamq:In"/> 
     <doTry> 
      <unmarshal> 
       <jaxb contextPath="outbound.message"/> 
      </unmarshal> 
      <doCatch> 
       <exception>java.lang.Exception</exception> 
       <handled> 
        <constant>true</constant> 
       </handled> 
       <transform> 
        <simple>Mapping Failed</simple> 
       </transform> 
       <to uri="jmsamq:errorqueue1"/> 
      </doCatch> 
     </doTry> 
     <log message="${body}"/> 
     <multicast stopOnException="true"> 
      <to uri="direct:webservice"/> 
      <to uri="direct:myqueue"/> 
     </multicast> 
    </route> 
+0

Ich verwende doTry/doCatch (http://camel.apache.org/try-catch-finally.html) für Web-Services, eine Fehlermeldung erstellen und den Antwortcode festlegen. Wenn Sie ungültiges XML verwenden, wird die Analyse am CXF-Endpunkt fehlschlagen und die Route wird nicht einmal einbezogen. – gusto2

+0

Können Sie Ihren Code posten, damit wir sehen können, was Sie tun? –

+0

DoTry/doCatch hat für den Web Service gearbeitet - danke! Es hilft jedoch nicht beim Unmarshalling nach Jaxb .. sollte das auch in einen Trickblock gehüllt werden? Ich bin sicher, es wird funktionieren, aber ist das notwendig? Weißt du, warum die onException nicht mit Webdiensten funktioniert? Etwas mit der Tatsache zu tun, dass ein Fehler vielleicht eher als eine Ausnahme ausgelöst wird? – kinsey

Antwort

0

die falsche Kamel-Kontext XML-Datei verwendet wurde zur Laufzeit erwischt .. ignoriere die Frage!