Я работаю над веб-сервисом на 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 ловит исключение.
Спасибо.