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
0
A
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;
}
}
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? –
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