НОВЫЙ ОТВЕТ
Вы можете использовать исключение WebApplicationException, которое можно вызвать из метода writeTo в MessageBodyWriter .
public void writeTo(DataObject dataObject, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException {
try {
throw new JAXBException("error");
} catch(JAXBException e) {
Response response = Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity("HI")
.type("text/plain")
.build();
throw new WebApplicationException(response);
}
}
ОРИГИНАЛЬНЫЙ ОТВЕТ
По моему мнению, вам лучше выбросить JAXBException из MessageBodyWriter, а затем создать ExceptionMapper для регистрации проблемы:
@Provider
public class JAXBExceptionMapper implements ExceptionMapper<JAXBException> {
public Response toResponse(JAXBException e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(e.getMessage());
.type("text/plain").build();
}
}
Это позволит вам вернуть код ответа, который указывает на возникшую проблему.