2016-07-05 106 views
0

我們使用jaws:客戶端來使用Web服務。我們有inFaultInterceptor捕獲肥皂故障進行進一步處理。但是這個inFaultInterceptor不會被調用,例如404或ConnectException的http錯誤。我們將攔截器配置爲jaws:客戶端。我們可以編寫任何攔截器來捕獲這些http異常嗎?有沒有更好的方法來捕捉它們?我們只需要在發生這種異常/錯誤時將控制權交回。 注意:由於某些限制,我們無法在Web服務代碼中捕獲它們。用於HTTP例外的Cxf攔截器

回答

0

您可以使用添加到CXF BusFaultListener。偵聽器將捕獲http異常,允許您在引發調用方法之前執行您的代碼。

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

優秀。爲我工作。還有一個問題。我們希望在監聽器攔截器和Web服務代碼之間進行通信。我們嘗試使用cxf Exchange對象。但是,我們無法通過Web Service代碼中的偵聽器或攔截器獲取數據集。任何其他方式來做到這一點? –

+0

我測試過在'FaultListener'中創建一個自定義的異常,並用'message.setContent(Exception.class,new Exception(「custom error」))替換交換的'Message'內容;'方法調用會收到你的自定義異常,可以用try-catch來抓住它。但我沒有設法包含其他信息。使用JAX-RS客戶端可以替換完整的Response對象,但我不知道如何使用JAX-WS來完成。我想這是可能的 – pedrofb