Почему страницы ошибок игнорируются в веб-службе RESTEasy, работающей на Tomcat? - PullRequest
0 голосов
/ 04 марта 2010

Я занимаюсь разработкой веб-службы с поддержкой REST, используя RESTEasy, развернутую на Tomcat. Я настроил страницу с ошибкой, которая принимает сообщение об исключении и генерирует на его основе XML-код при возникновении любого исключения во время запроса.

Это прекрасно работает для любых сгенерированных приложением исключений. Однако, если клиент отправляет неверный XML, который не может быть правильно распакован, выдается javax.xml.bind.UnmarshalException, и вместо моего используется страница ошибки Tomcat по умолчанию.

Я настроил свою страницу ошибки для кода ошибки 500 в web.xml.

Является ли использование страниц с ошибками правильным способом обработки ошибок при использовании RESTEasy или есть альтернативный способ?

1 Ответ

1 голос
/ 01 апреля 2010

Лучший способ - использовать ExceptionMapper. Вы создаете класс UnmarshalExceptionMapper, который реализует ExceptionMapper. Вы аннотируете это с помощью «@Provider», а в конструкторе приложения выполняете «classes.add (UnmarshalExceptionMapper.class)» или «singletons.add (new UnmarshalExceptionMapper ())».

Ваш картограф исключений будет выглядеть примерно так:

 @provider
 public class UnmarshalExceptionMapper 
            implements ExceptionMapper<UnmarshalException> {
    public Response toResponse(UnmarshalException exception) {
        ResponseBuilder rb =
            Response.status(
                  Response.Status.BAD_REQUEST)  // Most appropriate HTTP status code
            .entity(your xml goes here)
            .type("application/xml");  
        return rb.build();
   }
 }

Обратите внимание, что вы должны установить тип "application / xml", потому что в настоящее время согласование содержимого НЕ выполняется для сопоставителей исключений. Чтобы провести собственное согласование содержимого, получите из запроса HttpHeaders, найдите заголовок «accept» и установите соответствующий тип.

...