Java RESTEasy异常映射程序引发的NPE

Java RESTEasy异常映射程序引发的NPE,java,jboss,resteasy,Java,Jboss,Resteasy,这就是我要做的,似乎我遗漏了关于RESTEasy文档的一些内容,所以提前感谢您的帮助 我的团队决定始终将200(ok)状态返回给我们的REST公开服务(仅JSON)。因此,要做到这一点,我们决定依赖RESTEasy框架提供的异常映射机制 这意味着,对于代码中给定的(业务或技术)问题,我们提出了特殊的RuntimeException,然后映射程序必须构建一个ErrorBean作为响应主体 下面是代码中最重要的部分 引发特殊异常的资源方法: @GET @Produces({ MediaTyp

这就是我要做的,似乎我遗漏了关于RESTEasy文档的一些内容,所以提前感谢您的帮助

我的团队决定始终将200(ok)状态返回给我们的REST公开服务(仅JSON)。因此,要做到这一点,我们决定依赖RESTEasy框架提供的异常映射机制

这意味着,对于代码中给定的(业务或技术)问题,我们提出了特殊的RuntimeException,然后映射程序必须构建一个ErrorBean作为响应主体

下面是代码中最重要的部分

引发特殊异常的资源方法:

    @GET
@Produces({ MediaType.APPLICATION_JSON })
@BadgerFish
@ApiOperation(value = "gets all documents of the current user", notes = "gets all documents of the current user", responseClass = "com.cdc.pcp.api.bean.DocumentVO", multiValueResponse=true)
public Response getAllDocuments() throws PCPResourceException {

    try {
        UserInformation userInformation = userService.getUserInformation(getUsername());
        List<ParapheurNodeInformation> nodesInformations = new ArrayList<ParapheurNodeInformation>();
        nodesInformations = taskService.getTasksReadyToSignOrValidate(userInformation);
        int i = 0/0;
        return Response.ok(BeanConverter.toDocumentVOList(nodesInformations)).build();
    } catch (Exception e) {
        LOG.error("Erreur lors de la récupération de la liste des documents pour l'utilisateur : " + getUsername() , e);

        throw new PCPResourceException(e.getMessage(), "Erreur lors de la récupération de la liste des documents pour l'utilisateur", ResourceErrorCode.INTERNAL_ERROR, e);         
    }
}

这不是一个答案,而是一个开始。当我看这一行时:
org.jboss.resteasy.core.SynchronousDispatcher.writeFailure(SynchronousDispatcher.java:460)
在这里:,我可以假设在该点上唯一可以为null的是:
ResteasyProviderFactory

我猜您缺少某些依赖项或未注册此提供程序工厂

ExceptionMapper的注册方式与MessageBodyReaders和MessageBodyWriter相同:通过扫描RESTEasy提供程序上下文参数(如果您在WAR文件中部署),或通过编程方式通过ResteasyProviderFactory类进行注册。 发件人:


我更改了映射程序代码,首先设置状态,然后将错误Bean放在响应的头中:

return Response.status(Status.OK).header(HEADER_RESPONSE_PARAPHEUR_ERROR, gson.toJson(errorBean)).build();

映射器已正确注册,在深入挖掘代码后,我发现一行试图在某些注释上循环,但注释列表为null,这是NPE的起源。我缺少的是哪些注释是必需的,以及为什么在循环之前没有if(annotation!=null)。这导致我假设这些注释是必需的,或者可能是一个bug。
org.jboss.resteasy.spi.UnhandledException: org.jboss.resteasy.spi.WriterException: java.lang.NullPointerException
org.jboss.resteasy.core.SynchronousDispatcher.writeFailure(SynchronousDispatcher.java:460)
org.jboss.resteasy.core.SynchronousDispatcher.executeExceptionMapper(SynchronousDispatcher.java:349)
org.jboss.resteasy.core.SynchronousDispatcher.unwrapException(SynchronousDispatcher.java:373)
org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:362)
org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:233)
org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:209)
org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:557)
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.cdc.pcp.api.util.ApiOriginFilter.doFilter(ApiOriginFilter.java:32)
return Response.status(Status.OK).header(HEADER_RESPONSE_PARAPHEUR_ERROR, gson.toJson(errorBean)).build();