2016-07-05 12 views
0

Wir verwenden Kiefer: Client, um einen Web-Service zu konsumieren. Wir haben inFaultInterceptor, der Seifenfehler für die weitere Verarbeitung erfasst. Aber dieser inFaultInterceptor wird nicht für HTTP-Fehler wie 404 oder ConnectException aufgerufen. Wir haben die Interzeptoren zu den Klemmbacken konfiguriert: Client. Können wir einen Interceptor schreiben, der diese HTTP-Ausnahmen erfasst? Gibt es einen besseren Weg, sie zu erfassen? Alles, was wir wollen, ist, die Kontrolle zurückzunehmen, wenn solche Ausnahmen/Fehler auftreten. Hinweis: Wir können sie aufgrund einiger Einschränkungen nicht im Webdienstcode abfangen.Cxf Interzeptoren für http Ausnahmen

Antwort

0

Sie können einen FaultListener zu CXF Bus hinzugefügt verwenden. Der Listener erfasst die http-Ausnahmen, die es Ihnen ermöglichen, Ihren Code auszuführen, bevor sie für die Methode aufgerufen werden.

ClientProxy.getClient(jaxWSClientProxy).getBus().getProperties().put("org.apache.cxf.logging.FaultListener",new CxfFaultListenerImpl()); 

public class CxfFaultListenerImpl implements FaultListener{ 
    public boolean faultOccurred(final Exception exception,final String description,final Message message) { 

     //return false to avoid standard CXF logging of exception 
     return false; 
    } 
} 
+0

Ausgezeichnet. Für mich arbeiten. Noch eine Frage. Wir möchten zwischen unseren Listener-Interzeptoren und dem Web-Service-Code kommunizieren. Wir haben es mit dem Exchange-Exchange-Objekt versucht. Aber wir konnten die Daten von Listenern oder Interceptors im Web-Service-Code nicht abrufen. Irgendeine andere Möglichkeit, das zu tun? –

+0

Ich habe das Erstellen einer benutzerdefinierten Ausnahme in 'FaultListener' und das Ersetzen von ausgetauschten' Message'-Inhalten durch 'message.setContent (Exception.class, neue Exception (" custom error "));' Der Methodenaufruf erhält Ihre benutzerdefinierte Ausnahme und Sie kann es mit "try-catch" fangen. Aber ich habe es nicht geschafft, andere Informationen aufzunehmen. Mit einem JAX-RS-Client ist es möglich, das vollständige 'Response'-Objekt zu ersetzen, aber ich weiß nicht, wie ich es mit JAX-WS machen soll. Ich denke, es ist möglich – pedrofb