使用CXF处理程序捕获堆栈跟踪

时间:2014-04-21 02:42:41

标签: java websphere cxf handler stack-trace

我无法让CXF 2.7.x' Handlers使用WebSphere v7(没有处理程序的Web服务可以相应地工作),但是,我想知道是否可以访问堆栈跟踪,如果由Web服务抛出,通过CXF的Handler(不是拦截器)?

即如果我实施SOAPHandler<SOAPMessageContext>,我是否可以通过public boolean handleFault(SOAPMessageContext ctx)来捕获ctx.getMessage().getSOAPBody().getFault()中的堆栈跟踪?

通常,当抛出异常时,我会在SOAP响应的详细信息中看到一个简短的描述,所以我不知道SoapFault对象是否会包含有关堆栈跟踪的信息!

我要问的原因是,在能够让CXF Handler使用WebSphere之前,我需要知道在handleFault()中寻找堆栈跟踪是否是一个可行的选择,或者我是否会错误兔子洞。

1 个答案:

答案 0 :(得分:1)

使用CXF JAX-WS服务在Handler中使用堆栈跟踪的一种方法是在配置文件中启用该选项,即 Spring

<cxf:bus>
  <cxf:features>
        <cxf:logging/>
      </cxf:features>

      <cxf:properties>
     <entry key="faultStackTraceEnabled" value="true" />            
  </cxf:properties>
</cxf:bus>

但是,如果您希望只能访问堆栈跟踪内容而不是将其发送回服务使用者,则必须手动/以编程方式获取<stacktrace>元素并将其内容设置为空,或者更好,删除元素本身。