2016-07-05 109 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