Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JasperReports и Struts, getOutputStream()has already been called 
:(
    Опции темы
brejnev
Дата 18.2.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 18.9.2005

Репутация: нет
Всего: нет



Хочу создать отчет( в pdf) с помощью JasperReports из web-приложения(struts). 

Делаю согласно книге "JasperReports for Java Developers"

Action-класс
Код

public class QuestionnaireReportAction extends BaseAction {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
  Collection<QuestionnairePerson> persons = personManager.listPersons();


        ServletOutputStream servletOutputStream = response.getOutputStream();
        InputStream reportStream = getServlet().getServletConfig().getServletContext().getResourceAsStream("report.jasper");
        response.setContentType("application/pdf");
 
      
        JRDataSource dataSource = new JRBeanCollectionDataSource(persons);

        JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), dataSource);

        servletOutputStream.flush();
        servletOutputStream.close();

        return mapping.getInputForward();
    }
}



struts-config.xml
Код

        <action input="/WEB-INF/pages/dm/task/ViewTask.jsp" 
                name="TaskActionForm" 
                scope="request"
                path="/dm/filled/callReport" 
                type="ru.izhnet.web.action.dm.filled.QuestionnaireReportAction"/>


код JSP, из которого вызываю action
Код

        <html:form action="/dm/filled/callReport?task_id=${task.key}" target="_new"  >
            <html:submit>
                <bean:message key="dm.questionnaire.results"/>
            </html:submit>
        </html:form>


Создается пустой pdf-файл и вываливается вот такая ошибка.
Код

ApplicationDispatcher[/Owl] PWC1231: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: PWC3991: getOutputStream() has already been called for this response
        at org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:700)
        at org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:210)
        at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:135)
        at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:135)
        at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:171)
        at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:164)
        at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:221)
        at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:157)
        at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:108)
        at org.apache.jsp.WEB_002dINF.pages.dm.task.ViewTask_jsp._jspService(ViewTask_jsp.java from :267)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:364)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
        at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
        at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:853)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:660)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:578)
        at org.apache.struts.action.RequestProcessor.doInclude(RequestProcessor.java:1116)
        at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:260)
        at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
        at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
        at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
        at ru.izhnet.web.filter.SelectLanguageFilter.doFilter(SelectLanguageFilter.java:30)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
        at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212)
        at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)


Искал в гугле. Как я понял, такая ошибка возникает если в выходной поток response.getOutputStream() пытаются одновременно писаться pdf-файл и JSP. Только что с этим делать, мне не понятно.
PM MAIL   Вверх
AleksandrIL
Дата 27.9.2011, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.8.2010

Репутация: нет
Всего: нет



Здравствуйте. Столкнулся с этой же ситуацией. Если нашли ответ, напишите - буду очень признателен.
PM MAIL   Вверх
Ares4322
Дата 28.9.2011, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 2
Всего: 3



А у Вас версия библиотек совпадает с версией из книги? Может причина того, что не работает пример, в этом?
Я в своем проекте на Struts2 использую JR. Но использую не через плагин, а через отдельный сервлет. Как вариант, можете попробовать сделать так же.
PM MAIL   Вверх
leniviy
Дата 1.10.2011, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: 1
Всего: 5



У объекта response есть 2 аутпута. Можно писать либо в первый, либо во второй, но не в оба сразу.
Проблема явно не в джаспере. Можно не вызывать runReportToPdfStream(), а просто вызвать:
response.getOutputStream().write(1);
будет та же самая ошибка.
PM MAIL   Вверх
5ad1sT
Дата 3.10.2011, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 10.2.2009

Репутация: нет
Всего: нет



Попробуйте return null; сделать.
Я использовал POI библиотеку и писал так же, как и вы в outputStream и все работало. Но был нюанс, вконце action обязательно retrun null;
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0975 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.