Java 为什么在ApacheCXF中ExceptionMapper之后拦截器会正常执行?

Java 为什么在ApacheCXF中ExceptionMapper之后拦截器会正常执行?,java,rest,cxf,jax-rs,interceptor,Java,Rest,Cxf,Jax Rs,Interceptor,我已经使用ApacheCXF2.7.5版实现了一些RESTful web服务,其中包含一些入站和出站拦截器。我还实现了一个ExceptionMapper来捕获访问不存在的资源的情况,并向用户返回自定义响应 例外情况 我注意到,当我访问一个不存在的资源时,会调用我的异常映射器,并生成一个自定义响应,这很好。我的问题是,在调用我的异常映射程序之后,我的拦截器正在被执行,这是我想要避免的 是否有任何方法可以在拦截器中标识调用了MyExceptionMapper并返回调用 谢谢在CXF使用后,它将通过正

我已经使用ApacheCXF2.7.5版实现了一些RESTful web服务,其中包含一些入站和出站拦截器。我还实现了一个ExceptionMapper来捕获访问不存在的资源的情况,并向用户返回自定义响应

例外情况

我注意到,当我访问一个不存在的资源时,会调用我的异常映射器,并生成一个自定义响应,这很好。我的问题是,在调用我的异常映射程序之后,我的拦截器正在被执行,这是我想要避免的

是否有任何方法可以在拦截器中标识调用了MyExceptionMapper并返回调用

谢谢

在CXF使用后,它将通过正常的传出侦听器链而不是故障侦听器链发送消息

一种解决方案可能是在ExceptionMapper中设置CXF消息的值,例如

PhaseInterceptorChain.getCurrentMessage()
.getExchange().put("com.test.skip", Boolean.TRUE);
然后可以在拦截器中检索并测试该值

Boolean skip = (Boolean) PhaseInterceptorChain.getCurrentMessage()
.getExchange().get("com.test.skip");
Boolean skip = (Boolean) PhaseInterceptorChain.getCurrentMessage()
.getExchange().get("com.test.skip");