在Eclipse控制台中显示Grizzly异常

时间:2014-10-24 10:43:28

标签: java eclipse rest jersey grizzly

使用jersey-container-grizzly2-http Maven依赖版本2.13启动Eclipse的简单REST接口时,我在浏览器中触发错误后不会显示任何异常。其他日志输出在控制台中显示得很好,但异常只是被吞下。

我创建了一个既未实例化也未调用的异常处理程序:

package mypackage.rest;
@Provider
class ExceptionHandler implements ExceptionMapper<Throwable>
{
    @Override public Response toResponse(Throwable t)
    {
        System.out.println("toResponse called");
        t.printStackTrace();
        return Response.status(Status.BAD_REQUEST).entity(t.getMessage()).build();
    }
}

Grizzly Server构造:

package mypackage.rest;
public class GrizzlyHttpUtil
{
    public static final URI     baseURI = UriBuilder.fromUri("http://localhost/").port(10010).build();

    public static HttpServer startThisServer()
    {
        ResourceConfig resCon = new ResourceConfig().packages("mypackage.rest");
        return server = GrizzlyHttpServerFactory.createHttpServer(baseURI, resCon);
    }
}

REST API类

package mypackage.rest;
@Path("")
public class Rest
{
  @GET @Path("datasets") @Produces(MediaType.TEXT_HTML)
  public static String datasets()
  {
    throw new RuntimeException();
  }
}

更新 我让它与resCon.register(ExceptionHandler.class);一起工作。为什么这有必要?为什么ResourceConfig()。packages(...)不能单独处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

我只需要解决同样的问题。这是我的初始化代码,它说服Grizzly HTTP服务器显示错误:http://source.apidesign.org/hg/bck2brwsr/rev/18ae4fbcfb87

Logger l = Logger.getLogger("org.glassfish.grizzly.http.server.HttpHandler");
l.setLevel(Level.FINE);
l.setUseParentHandlers(false);
ConsoleHandler ch = new ConsoleHandler();
ch.setLevel(Level.ALL);
l.addHandler(ch);

我正在使用Grizzly 2.3.3