2017-06-09 7 views
-1
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()にnullポインタをスローします。 httpServletResponseはインスタンス変数です。私は応答がnullでないことを確認しました。この関数は、Apacheの非同期httpクライアントlibのCloseableHttpAsyncClient.execute.completed()内から呼び出されています。org.apache.catalina.connector.CoyoteWriter.flush()のこのNPEの原因は何ですか?

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 
+2

"このコードは、' out.flush() 'にヌルポインタを投げます。" =>まさか!まず 'out.print(response)'行にNPEを投げます。 – Seelenvirtuose

+1

Stacktraceはありますか?質問を編集して挿入してください。 –

+0

上記の行が成功した場合、 '.flush()'がNPEを投げることは不可能です。あなたのステップデバッガは、この事実だけでなく、NPEを実際に引き起こしているものも表示します。 –

答えて

0

これは、サーブレットコンテナは、サーブレットのライフサイクルの終わりにそれの世話をするとバッファが文句を言わないこの段階でのフラッシュの準備ができていることだろうと私はここで洗い流すべきではありませんが判明しました。この Nullpointer exception while flushing ServletOutputStreamとこの Should one call .close() on HttpServletResponse.getOutputStream()/.getWriter()?回答が助けになりました。

関連する問題