1

WAS 7.0.0.13 update 1 サーバーで例外が発生します。spring 3 フレームワークを使用した REST Web サービスの開発に取り組んでいます。Spring フレームワークが http 応答本文を書き込むために出力ストリームを取得しようとしているときに、WAS が例外をスローしています。

Writer は既に取得されています (com.ibm.ws.webcontainer.srt.SRTServletResponse.getOutputStream(SRTServletResponse.java:699) で)

これがコールスタックです。お知らせ下さい。

[1/7/11 13:25:02:600 CST] 0000001a webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[terms]: java.lang.IllegalStateException: SRVE0209E: Writer already obtained
 at com.ibm.ws.webcontainer.srt.SRTServletResponse.getOutputStream(SRTServletResponse.java:699)
 at com.ibm.ws.cache.servlet.FragmentComposer.obtainOutputStream(FragmentComposer.java:689)
 at com.ibm.ws.cache.servlet.FragmentComposer.getOutputStream(FragmentComposer.java:753)
 at com.ibm.ws.cache.servlet.CacheProxyResponse.getOutputStream(CacheProxyResponse.java:215)
 at org.springframework.http.server.ServletServerHttpResponse.getBody(ServletServerHttpResponse.java:64)
 at org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter.writeInternal(AbstractXmlHttpMessageConverter.java:66)
 at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:181)
 at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.writeWithMessageConverters(AnnotationMethodHandlerAdapter.java:975)
 at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.handleResponseBody(AnnotationMethodHandlerAdapter.java:933)
 at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.getModelAndView(AnnotationMethodHandlerAdapter.java:882)
 at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:428)
 at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:718)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
 at com.ibm.ws.cache.servlet.ServletWrapper.serviceProxied(ServletWrapper.java:307)
 at com.ibm.ws.cache.servlet.CacheHook.handleFragment(CacheHook.java:574)
 at com.ibm.ws.cache.servlet.CacheHook.handleServlet(CacheHook.java:250)
 at com.ibm.ws.cache.servlet.ServletWrapper.service(ServletWrapper.java:259)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1663)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)
 at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179)
 at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3826)
 at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
 at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931)
 at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
 at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
 at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:445)
 at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:504)
 at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:301)
 at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:275)
 at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
 at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
 at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
 at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
 at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
 at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
 at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
 at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
 at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
 at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1563)

ありがとう、サティア。

4

2 に答える 2

2

IBM の developerWorks で同様のスレッドを開きましたが、応答がありませんでした。

しかし、私はこの問題に対する答えを見つけたと思います。例外が発生した正確な理由はわかりませんが、今のところ回避策を見つけました。応答オブジェクトのバッファをリセットすることで例外を回避できました。これが私のコントローラーのサンプルコードです(春3)。

@RequestMapping(value = "/codesystems", method = RequestMethod.GET)

public @ResponseBody
CodeSystemVersionDirectory getAllAvailableCodeSystems(HttpServletResponse response) throws Exception {

    response.resetBuffer();

    response.setHeader("Location", "/codeSystems");
    response.setContentType("application/xml");

    return codeSystemService_.getCodesystemVersionDirectory();
}
于 2011-01-10T16:54:18.773 に答える
2

あなたが続けるためにいくつかのことを見つけました:

これは、WebSphere のサーブレットでライター ストリームと出力ストリームを操作する際の同様のエラーです。少し違います。しかし、それはあなたに何かを与えるかもしれません。どちらの答えも良さそうでした。

これは、IBM の修正サイトでも見つけました。これは古いバージョンの WAS 用ですが、問題が発生したり、提示された回避策がトラブルシューティングに役立つ場合があります。

最後に、参考になれば、ここでエラー名を Google 検索してみます 。

しかし、最初にスタックオーバーフローからの最初のリンクを試してみると思います。それは最も有望に見えました。

于 2011-01-07T21:04:30.300 に答える