2012-06-01 14 views
6

मेरे पास GetFile नामक एक क्रिया है जो सीधे पीडीएफ खोलने के लिए फ़ाइल डाउनलोड बॉक्स खोलती है।struts2 - java.lang.IllegalStateException intermittently होता है जबकि कार्रवाई कॉल परिणाम पीडीएफ फ़ाइल डाउनलोड करने के लिए परिणाम स्ट्रीम

नीचे struts.xml कॉन्फ़िगरेशन और उसके लिए एक्शन क्लास है। मैं इसे प्राप्त करने के लिए परिणाम के रूप में परिणाम प्रकार का उपयोग कर रहा हूँ। मैं देख सकता हूं कि पीडीएफ डाउनलोड बॉक्स हर बार खुलता है और मैं फ़ाइल डाउनलोड करने में भी सक्षम हूं।

लेकिन मुझे लगता है कि कल रात कुछ अनुरोध थे जिन्होंने कार्रवाई को निकाल दिया था और इससे नीचे की त्रुटि उत्पन्न हुई है।

org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been called for this response 
     at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:570) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:452) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
     at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593) 
     at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530) 
     at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:159) 
     at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) 
     at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:374) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278) 
     at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
     at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
     at deshaw.irweb.web.interceptor.AuthInterceptor.intercept(AuthInterceptor.java:60) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) 
     at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
     at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510) 
     at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) 
     at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:294) 
     at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:183) 
     at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:169) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
     at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.IllegalStateException: getOutputStream() has already been called for this response 
     at org.apache.catalina.connector.Response.getWriter(Response.java:636) 
     at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:205) 
     at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:105) 
     at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125) 
     at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118) 
     at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:182) 
     at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:123) 
     at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:80) 
     at org.apache.jsp.jsp.ServerError_jsp._jspService(ServerError_jsp.java:157) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) 
     ... 38 more  

क्या कोई मुझे बता सकता है कि समस्या का कारण क्या हो सकता है? मैं वर्तमान में समस्या को पुन: उत्पन्न करने में सक्षम नहीं हूं। मैंने कहीं पढ़ा है कि यह डाउनलोड संवाद बंद करने के कारण हो सकता है, लेकिन कई ब्राउज़रों से कोशिश करने के बाद भी यह मामला नहीं था। getOutputStream() has already been called for this response भी चेक किया, लेकिन सीधे मेरी समस्या से संबंधित नहीं हो सका क्योंकि jsp के लिए कोई पुनर्निर्देशन नहीं है क्योंकि struts2 एक्शन सीधे परिणाम स्ट्रीम की ओर जाता है।

struts.xml

<action name="GetFile" class="Class" method="DownloadFile"> 
      <result name="success" type="stream"> 
      <param name="contentType">contentType</param> 
      <param name="contentDisposition">fileName</param> 
      <param name="bufferSize">1024</param> 
      <param name="inputName">inputStream</param> 
      </result> 
</action> 

कार्रवाई कक्षा

public String DownloadFile() 
{ 
     // create the object variable pdfdoc which is a custom object. 
     // You can assume that the pdfdoc is properly constructed 
     // and getFileContent does what it is required to do, so 
     // that the final pdf is generated. 
     ... 
     ... 
     inputStream = new ByteArrayInputStream(pdfdoc.getFileContent()); 
     contentType = pdfdoc.getContentType(); 
     fileName = pdfdoc.getFileName(); 
     contentDisposition = doc.getContentDisposition(); 
     bufferSize = 1024; 
     return "success"; 

} 
+0

आप पूरा स्टैक ट्रेस और कम में पोस्ट करें सकते हैं कि इस व्यवहार उपयोगकर्ता व्यवहार का अनुमान लगाना कठिन इसकी प्रतिलिपि प्रस्तुत करने योग्य नहीं है। –

+0

जोड़ा गया पूर्ण स्टैक ट्रेस –

+0

क्या कार्रवाई कोई पैरामीटर लेती है? –

उत्तर

1

मैं जब इंटरनेट एक्सप्लोरर का उपयोग एक ऐसी ही समस्या थी और प्रतिक्रिया हेडर में इस जोड़कर तय:

response.setHeader("Expires","0"); 
response.setHeader("Pragma","cache"); 
response.setHeader("Cache-Control","private"); 

हो सकता है कि आप अपने लॉग में देखे गए अनुरोध जहां इंटरनेट एक्सप्लोरर द्वारा उत्पन्न किया गया हो।

here और here पर एक नज़र डालें!

अपडेट: आपके लॉग में ब्राउज़र संस्करण मुद्रित करने के लिए आप कुछ इस तरह कर सकते हैं:

System.out.println(request.getHeader("User-Agent")); 
+0

धन्यवाद। हालांकि यह आईई के साथ एक समस्या हो सकती है, क्या आप मुझे आईई में सटीक उपयोगकर्ता व्यवहार बता सकते हैं जो मुझे समस्या को पुन: उत्पन्न करने में मदद कर सकता है? –

+0

आईई के कई संस्करणों के साथ प्रयास करें और जब आप विश्वसनीय यूआरएल से अपने यूआरएल को हटाते हैं और यह देखने के लिए लॉग देखें कि क्या होता है जब आपको यह संदेश दिया जाता है कि आपका डाउनलोड अवरुद्ध है। – tibtof

+1

@TGV अगर मेरा उत्तर किसी भी मदद की नहीं है तो कृपया मुझे बताएं और मैं इसे हटा दूंगा। मैं अवांछित उपहार प्राप्त नहीं करना चाहता हूं। – tibtof

संबंधित मुद्दे