We need to return custom error code and error message when exception occurs during REST invocation. We have created a exception mapper provider, it works well for the except
I raised a similar question on the cxf user group, see:
http://cxf.547215.n5.nabble.com/Handling-exceptions-in-a-JAX-RS-fault-interceptor-when-using-Local-Transport-td5733958.html
I ended up replacing my interceptors with ContainerRequestFilter and ContainerResponseFilter and then the Exception Mapper happily handled both application exceptions and exceptions thrown from the Filter.
Hope this helps.
I found a way to send a custom response from the interceptor but still can't figure out a way to call my CustomExceptionHandler from the interceptor
Code:
public void handleMessage(Message message) {
MetadataMap<String, String> metadataMap = (MetadataMap<String, String>) message.get("jaxrs.template.parameters");
if(null != metadataMap) {
List<String> list = metadataMap.get("phoneNumber");
if(null != list) {
String phoneNumber = list.get(0);
boolean result = validatePhoneNumber(phoneNumber);
if(!result){
// Create a response object and set it in the message.
// calling getExchange() will not call your service
Response response = Response
.status(Response.Status.BAD_REQUEST)
.entity(new ErrorDetail(Response.Status.BAD_REQUEST.getStatusCode(), Response.Status.BAD_REQUEST.toString()))
.build();
message.getExchange().put(Response.class, response);
// That's it
}
} else {
Response response = Response
.status(Response.Status.BAD_REQUEST)
.entity(new ErrorDetail(Response.Status.BAD_REQUEST.getStatusCode(), Response.Status.BAD_REQUEST.toString()))
.build();
message.getExchange().put(Response.class, response);
}
} else {
Response response = Response
.status(Response.Status.BAD_REQUEST)
.entity(new ErrorDetail(Response.Status.BAD_REQUEST.getStatusCode(), Response.Status.BAD_REQUEST.toString()))
.build();
message.getExchange().put(Response.class, response);
}
}