Разница между WebApplicationException и WebServiceException в контексте Jax-RS (Джерси)

Я создаю веб-службу в Джерси, и я обнаружил, что использую оба указанных типа исключений. Конструктор WebServiceException позволяет передать String в качестве причины, в которой WebApplicationException разрешает передачу кода состояния HTTP. Включение различий конструктора в цель использования этих двух типов исключений?

Спасибо.

Ответ 1

A WebApplicationException - это способ, которым вы можете прекратить выполнение REST-ресурса и отправить некоторую значимую информацию вашему клиенту. Для того, что я делал, я подклассифицировал это исключение, так что у него есть реализация, которая создает JSON в качестве сообщений об ошибках клиенту. В случае возникновения ошибки, скажем, отсутствующий файл, я могу сделать что-то вроде этого:

}catch(FileNotFoundException ex){
    throw new MyException(ex.getMessage());

На клиенте это создаст что-то вроде:

{ errorCode: 56, errorMessage: 'could not find file "input.txt"' };

http://download.oracle.com/javaee/6/api/javax/ws/rs/WebApplicationException.html '

A WebServiceException - исключение корневого времени выполнения для Джерси, то есть его наиболее частое из-за сбоя ресурсов и приводит к HTTP 500.

http://download.oracle.com/javaee/5/api/javax/xml/ws/WebServiceException.html

Итак, короткий ответ - это первое исключение, которое вы можете бросить, а другое - то, которое вы надеетесь никогда не бросать.: P

Пример:

public class MyException extends WebApplicationException {

public MyException(JSONObject jsonObject) {
    super(Response.status(Response.Status.OK)
            .entity(jsonObject)
            .type(MediaType.APPLICATION_JSON)
            .build());
}

Затем из любого места вашего кода вы хотите остановить выполнение и отправить информацию об ошибке клиенту:

}catch(FileNotFoundException ex){
    throw new MyException(new JSONObject(){{ this.put("errorCode", 4); .... }});