Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457

    SRVE0199E: OutputStream already obtained - Java - Struts2

    Salve a tutti,
    sto cercando di capire perchè il server mi tira fuori la seguente eccezione: SRVE0199E: OutputStream already obtained
    In sostanza credo di averlo già capito, ma non so come raggirare l'ostacolo.

    Dalla JSP invoco un metodo della Action in cui riapro lo stream " outZip= new ZipOutputStream(httpResponse.getOutputStream());" quando il metodo termina ritorna sulla stessa pagina aggiornandola, pero' il server si accorge che nella action lo stream è stato già aperto per cui lancia l'eccezione in esame.
    Per ovviare a tale problema bisogna dichiarare il metodo nella action di tipo void, ma questo rappresenterebbe nel mio caso solo una soluzione non ottimale , perchè io vorrei che la pagina si aggiornasse.
    Qualcuno ha già risolto un problema simile?

    codice:
    10:18:23,656 ERROR ClosingUIBean:38 - Could not open template
    java.lang.IllegalStateException: SRVE0199E: OutputStream already obtained
    	at com.ibm.ws.webcontainer.srt.SRTServletResponse.getWriter(SRTServletResponse.java:531)
    	at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:187)
    	at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:175)
    	at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:343)
    	at java.io.PrintWriter.write(PrintWriter.java:375)
    	at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:176)
    	at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:359)
    	at org.apache.struts2.components.template.FreemarkerTemplateEngine$1.write(FreemarkerTemplateEngine.java:143)
    	at java.io.Writer.write(Writer.java:171)
    	at java.io.Writer.write(Writer.java:147)
    	at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
    	at freemarker.core.Environment.visit(Environment.java:210)
    	at freemarker.core.MixedContent.accept(MixedContent.java:92)
    	at freemarker.core.Environment.visit(Environment.java:210)
    	at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)
    	at freemarker.core.Environment.visit(Environment.java:210)
    	at freemarker.core.MixedContent.accept(MixedContent.java:92)
    	at freemarker.core.Environment.visit(Environment.java:210)
    	at freemarker.core.IfBlock.accept(IfBlock.java:82)
    	at freemarker.core.Environment.visit(Environment.java:210)
    	at freemarker.core.MixedContent.accept(MixedContent.java:92)
    	at freemarker.core.Environment.visit(Environment.java:210)
    	at freemarker.core.Environment.include(Environment.java:1483)
    	at freemarker.core.Include.accept(Include.java:169)
    	at freemarker.core.Environment.visit(Environment.java:210)
    	at freemarker.core.MixedContent.accept(MixedContent.java:92)
    	at freemarker.core.Environment.visit(Environment.java:210)
    	at freemarker.core.Environment.process(Environment.java:190)
    	at freemarker.template.Template.process(Template.java:237)
    	at org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:157)
    	at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:559)
    	at org.apache.struts2.components.ClosingUIBean.start(ClosingUIBean.java:59)
    	at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:53)
    	at com.ibm._jsp._pagamentoLottiPage._jspx_meth_s_submit_1(_pagamentoLottiPage.java:273)
    	at com.ibm._jsp._pagamentoLottiPage._jspx_meth_s_if_1(_pagamentoLottiPage.java:306)
    	at com.ibm._jsp._pagamentoLottiPage._jspx_meth_s_form_0(_pagamentoLottiPage.java:344)
    	at com.ibm._jsp._pagamentoLottiPage._jspService(_pagamentoLottiPage.java:90)
    	at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:85)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    	at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966)
    	at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:907)
    	at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:118)
    	at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
    	at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:701)
    	at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:646)
    	at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:475)
    Grazie 1000

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    bhè la ragione è abbastanza semplice: la pagina suppongo parta con un header (relativo alla creazione o output di un file zip o qualcosa di analogo) e poi dovrebbe cambiare in text/html per riproporre la pagina stessa, cosa ovviamente non ammissibile (partito un output quello è e quello resta). Non potresti indirizzare un output (lo ZipOutputStream) verso un iframe nascosto?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457
    nella pagina viene invocato un metodo della action che si occupa di creare un file zip,
    ecco il metodo:
    codice:
    ZipOutputStream outZip = null;
    		try{
    			
    			byte[] file;
    			HttpServletResponse httpResponse = ServletActionContext.getResponse();
    			httpResponse.setHeader("Content-Disposition", "attachment; filename="+"InPagamento.zip");
    			outZip= new ZipOutputStream(httpResponse.getOutputStream());
    			
    	
    			for (int i =0 ; i<this.dataSourceLotti.size(); i++) {
    				lotto = this.dataSourceLotti.get(i);
    			
    					file = this.stampaASS1AUT(IP6BIS);
    					outZip.putNextEntry(new ZipEntry(nomePDF + ".pdf"));
    					outZip.write(file);
    					outZip.closeEntry();
    				
    			}
    			//httpResponse.getOutputStream().flush();
    			outZip.close();	
    		}
    		catch(Exception ex){
    			this.gestioneEccezione(ex);
    			//return PAGAMENTO_TILES;
    		}
    Il file zip contenente i pdf viene creato, pero' nella console compare l'eccezione java.lang.IllegalStateException: SRVE0199E: OutputStream already obtained e quindi non posso eseguire il return PAGAMENTO_TILES;motivo per cui tale istruzione è commentata.

    La spiegazione che mi sono dato è che la jsp viene trasformata in una servlet che aprirà a prescindere da ciò un outputStream, quindi non si possono aprire 2 stream nella stessa pagina....ma come è possibile?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.