java - 是什么导致了 org.apache.catalina.connector.CoyoteWriter.flush() 中的 NPE?

标签 java tomcat

 private void respond(String response) {

    httpServletResponse.setContentType("application/json");
    httpServletResponse.setCharacterEncoding("UTF-8");

    try {
        PrintWriter out = httpServletResponse.getWriter();

        out.print(response);
        out.flush();

    } catch (IOException ex) {
        log.error("Error while writing response",ex);
    }

}

此代码在 out.flush() 处抛出空指针。 httpServletResponse 是实例变量。我已验证响应不为空。此函数是从 Apache 的 aync http 客户端库的 CloseableHttpAsyncClient.execute.completed() 内部调用的。

LOG:

Caused by: java.lang.NullPointerException: null
    at org.apache.coyote.http11.InternalNioOutputBuffer.flushBuffer(InternalNioOutputBuffer.java:234) ~[tomcat-coyote.jar:8.0.14]
    at org.apache.coyote.http11.InternalNioOutputBuffer.addToBB(InternalNioOutputBuffer.java:189) ~[tomcat-coyote.jar:8.0.14]
    at org.apache.coyote.http11.InternalNioOutputBuffer.commit(InternalNioOutputBuffer.java:177) ~[tomcat-coyote.jar:8.0.14]
    at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:739) ~[tomcat-coyote.jar:8.0.14]
    at org.apache.coyote.Response.action(Response.java:179) ~[tomcat-coyote.jar:8.0.14]
    at org.apache.coyote.Response.sendHeaders(Response.java:341) ~[tomcat-coyote.jar:8.0.14]
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:331) ~[catalina.jar:8.0.14]
    at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:313) ~[catalina.jar:8.0.14]
    at org.apache.catalina.connector.CoyoteWriter.flush(CoyoteWriter.java:98) ~[catalina.jar:8.0.14]
    at com.thruport.aje.rotator.reward.async.RewardRequest.respond(RewardRequest.java:185) ~[output/:na]
    at com.thruport.aje.rotator.reward.async.RewardRequest.lambda$new$2(RewardRequest.java:131) ~[output/:na]
    at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:602) ~[na:1.8.0_121]
    ... 8 common frames omitted

最佳答案

事实证明,我不应该在此处刷新,因为 Servlet 容器将在 Servlet 生命周期结束时处理它,而 Buffer 在这个阶段不会准备好刷新。这 Nullpointer exception while flushing ServletOutputStream和这个 Should one call .close() on HttpServletResponse.getOutputStream()/.getWriter()?答案有帮助。

关于java - 是什么导致了 org.apache.catalina.connector.CoyoteWriter.flush() 中的 NPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44463365/

相关文章:

java - 有条件地链式完成

tomcat - 如何使用 IntelliJ 和 Tomcat 热部署 Vaadin

java - 在java中解析1GB xml数据的最佳解析器

java - 通过java执行SQL查询时出现错误 "java.sql.SQLException: Invalid column index"

java - Tomcat、mod_jk、Plesk 和 SSL 设置问题

spring - 在 Apache Tomcat webapp 中访问 Spring bean 的推荐方法?

java - Servlet PrintWriter 输出流真的需要关闭吗?

tomcat - macOS Sierra 上没有 catalina.out

Java Lambda 捕获还是重新执行?

java - 在 list 文件中声明的不同包中测试其他 Activity