引起:java.lang.IllegalStateException:无法获取Writer,因为OutputStream已在使用中

时间:2018-05-10 09:31:48

标签: liferay-6 spring-portlet-mvc

尝试在liferay中下载文件时出现以下错误

05:03:35,867 ERROR [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'][PortletRequestDispatcherImpl:115] org.springframework.web.util.NestedServletException: View rendering failed; nested exception is java.lang.IllegalStateException: Cannot obtain Writer because OutputStream is already in use
org.springframework.web.util.NestedServletException: View rendering failed; nested exception is java.lang.IllegalStateException: Cannot obtain Writer because OutputStream is already in use
        at org.springframework.web.servlet.ViewRendererServlet.processRequest(ViewRendererServlet.java:96)
        at org.springframework.web.servlet.ViewRendererServlet.doGet(ViewRendererServlet.java:67)



Caused by: java.lang.IllegalStateException: Cannot obtain Writer because OutputStream is already in use
        at com.liferay.portlet.MimeResponseImpl.getWriter(MimeResponseImpl.java:90)
        at com.liferay.portlet.PortletServletResponse.getWriter(PortletServletResponse.java:207)
        at com.netcracker.portal.framework.spring.templates.view.SoyDataView.renderMergedOutputModel(SoyDataView.java:93)

以下是代码,我尝试在线搜索,但没有一个工作

 String defaultFileName = "hello.pdf";
            resourceResponse.setContentType("application/octet-stream");
            resourceResponse.addProperty(GenericServiceTransport.CONTENT_DISPOSITION, "attachment; filename= hello.pdf" );
            resourceResponse.flushBuffer();

            try {
                out = resourceResponse.getPortletOutputStream();
                out.write(backendFile.getContent());
                out.flush();
                out.close();
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
            return;

1 个答案:

答案 0 :(得分:0)

作为第一项,我尝试删除flushBuffer电话。你可能会在它后面的行中得到异常,并且肯定会刷新缓冲区将使用输出流。

如果这没有帮助,请添加静音代码,例如完整的方法,包括其签名