Как установить ошибку 40X с помощью специального сообщения об исключении JAX-RS? - PullRequest
13 голосов
/ 03 ноября 2011

Я работаю над веб-сервисом на JAX-RS, который уже работает. Теперь я ищу способ перехватить некоторые исключения, чтобы отправить пользователю сообщение об ошибке 40X с пользовательским сообщением.

У меня есть веб-сервис и ExceptionMapper.

Это мой веб-сервис:

@Path( value = "/test/")
public interface ServiceTest {

    @Path(value = "{rrf}")
    @GET
    @Produces(MediaType.TEXT_XML)
    public ObjectDTO getDealer(@PathParam("rrf") String rrf){
        ObjectDTO objectDTO = new ObjectDTO();
        if( verifyRRFSintax(rrf) ) {
            //Get the objet, this part works fine
        } else {
            throw new IllegalArgumentException("Custom message");
        } 
        return dwsDTO;
    }

    private boolean verifyRRFSintax(String rrf) {
        return rrf.matches("[0-9]{8}");
    }
}

Это мой ExceptionMapper

@Provider
@Produces(MediaType.TEXT_XML)
public class IllegalArgumentExceptionMapper 
    implements ExceptionMapper<IllegalArgumentException> {

    @Override
    public Response toResponse(IllegalArgumentException e) {
        return Response.status(Response.Status.BAD_REQUEST).build();
    }
}

и вот как это регистрируется в файле application-context.xml

<bean id="serviceTest" class="ServiceTest"/>

<jaxrs:server id="Server" address="/ws">
    <jaxrs:serviceBeans>
        <ref bean="serviceTest"/>
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean id="rffErrorException" class="IllegalArgumentExceptionMapper"/>
    </jaxrs:providers>
</jaxrs:server>

Когда я отлаживаю, IllegalArgumentExceptionMapper ловит выдаваемое мной исключение, но я не вижу сообщения на желтой веб-странице, которая отображается в браузере. У меня всегда есть

Анализ XML: ошибка анализа / Ошибка синтаксического анализа XML: нет найден элемент (на английском)

Как мне сделать так, чтобы это пользовательское сообщение отображалось в браузере? Почему, даже если я изменю тип статуса ответа (NOT_FOUND, BAD_REQUEST, FORBIDDEN), эта желтая страница всегда одинакова?

PD: На консоли у меня есть сообщение "out.handlemessage", которое печатается, когда Mapper ловит исключение.

Спасибо.

1 Ответ

16 голосов
/ 17 ноября 2011
throw new WebApplicationException(Response.status(Status.NOT_FOUND)// Or another Status
                .entity("Error Message").build());
...