Difference between WebApplicationException and WebServiceException in the context of Jax-RS (Jersey)

前端 未结 1 414
不知归路
不知归路 2021-02-05 15:20

I\'m creating a Jersey web service, and I\'ve found myself using both of the mentioned exception types. WebServiceException\'s constructor allows you to pass a String as the cau

1条回答
  •  北荒
    北荒 (楼主)
    2021-02-05 15:50

    A WebApplicationException is a way in which you may stop execution of a REST resource and send some meaningful information to your client. For the stuff I have been doing I subclassed this exception so that it has an implementation that produces JSON as error messages to the client. In the event of an error condition, let us say a missing file I might do something like this:

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

    On the client this then would produce something like:

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

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

    A WebServiceException is the root run time exception for Jersey, i.e. its what most commonly results from your resources crashing and results in a HTTP 500.

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

    So the short answer is the first exception is one you might throw and the other is one you hope is never thrown. :P

    An example:

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

    Then from anywhere in your code you want to halt execution and send the error information to the client do this:

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

    0 讨论(0)
提交回复
热议问题