2011-01-07 3 views
1

Я получаю исключение на сервере WAS 7.0.0.13 update 1. Я работаю над развитием веб-сервисов REST с использованием платформы весной 3. Когда основа весна пытается получить выходной поток для записи тела ответа HTTP, WAS бросает исключение,WAS 7: Writer уже получил исключение

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) 

Thanks, Satya.

ответ

2

Найдено несколько вещей для вас пойти на:

Here аналогичная ошибка работы с писателем и выходных потоков в сервлет на WebSphere. Немного отличается. Но это может дать вам кое-что. Оба ответа выглядели хорошо.

Я также нашел this на сайте исправления IBM. Это для более старой версии WAS, но иногда ситуация ломается, или представленная работа по-прежнему помогает в устранении неполадок.

И наконец, если это полезно, у меня есть поиск в Google по имени ошибки here .

Но я думаю, что сначала попробую первую ссылку из стека по потоку. Это выглядело наиболее перспективным.

+0

Благодарим за отзыв. Поскольку вся работа написания ответа была сделана весенним каркасом, в моей руке едва ли есть что-то, что можно было бы прокрутить код. Кроме того, я хотел бы обновить это, я попробовал тот же код на сервере tomcat, и он работает отлично. Поэтому ваше второе предложение выглядит наиболее вероятной причиной. – user567426

+0

Вы открыли PMR с IBM? Вы нашли аналогичный APAR для WAS 7? Просто любопытно. –

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(); 
}