Почему мой ExceptionMapper выбрасывается в Джерси / Гризли?

Сейчас я работаю над Grizzly 2.3.16 и Jersey 2.14. Я пытаюсь получить настраиваемое исключение, обработанное сервером и возвращенное клиенту. Вместо этого кажется, что я получаю общие ошибки Grizzly, хотя кажется, что вызывается правильный код.

Это метод фильтрации (часть класса, украшенная «@Provider»).

@Override
public void filter(ContainerRequestContext context) throws IOException 
{
    throw new MappableException(
        new CustomAuthenticationException(
            "Custom Error message"));
}

Вот полная реализация ExceptionMapper:

@Provider
public class CustomAuthenticationExceptionMapper
    implements ExceptionMapper<CustomAuthenticationException>
{
    public Response toResponse(CustomAuthenticationException e)
    {
        return Response.status(Status.UNAUTHORIZED.getStatusCode()).
                header("WWW-Authenticate", "Basic realm=\"Custom\"").
                type("text/plain").entity(e.getMessage()).build();
    }
}

Вот как я получаю ответ и читаю его:

response = invocationBuilder.method(requestMethod.toString(), Response.class);
System.out.println(response.readEntity(String.class));

Когда я получаю объект, это HTML от Grizzly, а не мое собственное сообщение, как и должно быть.

Вот трассировка стека непосредственно перед вызовом toResponse - я могу проверить, что код вызывается, но похоже, что каким-то образом Джерси или Гризли просто отбрасывают его и в конечном итоге заменяют сообщением гризли по умолчанию.

at org.glassfish.jersey.server.ServerRuntime$Responder.mapException(ServerRuntime.java:528)
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:409)
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:277)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:377)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)
    at org.glassfish.grizzly.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:147)
    at org.glassfish.grizzly.servlet.FilterChainImpl.invokeFilterChain(FilterChainImpl.java:106)
    at org.glassfish.grizzly.servlet.ServletHandler.doServletService(ServletHandler.java:221)
    at org.glassfish.grizzly.servlet.ServletHandler.service(ServletHandler.java:169)
    at org.glassfish.grizzly.http.server.HttpHandler$1.run(HttpHandler.java:219)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Unknown Source)

Я не уверен, какие еще части будут уместны, но они могут быть предоставлены по мере необходимости.


person stwmbm    schedule 20.01.2015    source источник
comment
вы можете, пожалуйста. создать тестовый пример (на github?), чтобы воспроизвести проблему?   -  person alexey    schedule 21.01.2015
comment
вы бросаете MappableException, пока ваш ExceptionMapper обрабатывает CustomAuthenticationException - вероятно, это причина (если CustomAuthenticationException не является подтипом MappableException)   -  person Lukasz Wiktor    schedule 21.01.2015


Ответы (1)


Мне нужно было добавить jersey-grizzly-connector.jar из maven.

person stwmbm    schedule 18.02.2015