我有一個流在CXF客戶端我有攔截器,提供程序和異常映射器的jaxrs。在我的情況下,我通過攔截器捕獲客戶的不良響應,然後我想中止cxf總線鏈並拋出一個錯誤。不幸的是我無法做到這一點,因爲在每一種情況下,攔截器拋出的異常都只被記錄下來,但主錯誤(錯誤的json格式)傳播到異常映射器。我想避免Exception mapper,但我不知道如何。我使用Web客戶端來實現這樣的攔截器:從CXF攔截器傳播異常到異常映射器
@Component
public class MyInterceptor extends AbstractPhaseInterceptor<Message> {
public MyInterceptor() {
super(POST_STREAM);
}
@Override
public void handleMessage(Message message) throws Fault {
if (message != null) {
//message.getExchange().setOneWay(true);
//message.getExchange().put(Exception.class, new MyException());
//message.getInterceptorChain().abort();
//message.setContent(Exception.class, new MyException());
//Endpoint ep = message.getExchange().get(Endpoint.class);
//message.getInterceptorChain().abort();
//if (ep.getInFaultObserver() != null) {
// ep.getInFaultObserver().onMessage(message);
//}
//throw new WebApplicationException(new MyException());
//message.setContent(Response.class, response);
throw new Fault(new MyException());
}
}
我讀,我應該實現由攔截器拋出不會傳播到異常映射JAXRS過濾器導致異常。感謝WebClient實現,是否有任何方法可以在java中實現?
S client = create(url, clazz, list(jsonProvider(), providers));
WebClient.getConfig(client).getInInterceptors().add(new MyInterceptor());
我也試過在攔截器上使用不同的階段,但它也沒有工作。