2016-08-26 2 views
1

나는 jetty (버전 : 9.3.11.v20160721)가있는 Spring의 DeferredResult를 사용하고이 오류가 발생합니다. 재설정 버퍼 부두 예외 받기

java.lang.IllegalStateException: cannot reset buffer on committed response 
     at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1245) 
     at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:371) 
     at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:266) 
     at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) 
     at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) 
     at java.lang.Thread.run(Unknown Source) 

나는 응답이 동일한 요청에 두 번 전송되는 것을 말하고있다 구글을했다,하지만 난 발생하지 않습니다 이러한 가능성을 가진, 따라서 어떤 응답을 설정하기 전에 점검을 다음과 같은 데.

private DeferredResult<Object> result = new DeferredResult<>(10000); 

    private void checkAndSend(Object res) { 
    if (result.isSetOrExpired()) { 
     log.warn("DeferredResult set/expired for res: {}", res); 
     return; 
    } 
    ... // respsond 
} 

누군가가 나를 도와주세요.

답변

0

오류가 발생했습니다. 이제 HttpServletResponse가 오류 상태가되었습니다.

Jetty 서블릿 엔진이 HTTP에 오류를보고하려고 시도했습니다. 첫 번째 작업은 버퍼를 재설정하므로 상태 및 메시지를 설정하여 오류 응답을 보낼 수 있습니다.

그러나 응답이 이미 커밋되었으므로 버퍼를 다시 설정할 수 없습니다. (다른 연결은 이미 해당 연결에 대한 응답을 보내기 시작했습니다.)

+0

필자의 코드에서 나는 어떤 응답도 쓰지 않을 것입니다. 이미 설정된 경우 코드가 반환됩니다. 그리고 스프링 프레임 워크에 몇 가지 문제가있을 수 있습니다 (jira에서 관련 문제가 발견되지 않음) –