struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Gainty <mgai...@hotmail.com>
Subject RE: Stream Result Returns Empty File
Date Thu, 14 Nov 2013 15:28:08 GMT
Congrats on the good news Z

Martin  
______________________________________________ 


  


> Date: Thu, 14 Nov 2013 11:14:20 +1100
> Subject: Re: Stream Result Returns Empty File
> From: zoran@sparecreative.com
> To: user@struts.apache.org
> 
> Found the issue.
> 
> I hadn’t set the contentLength parameter.
> 
> In the latest update to 2.3.15 if the contentLength isn’t set it generates
> a zero length stream.
> 
> Once I set contentLength to tempFile.length() it all worked again.
> 
> Z.
> 
> 
> 
> On 13/11/2013 3:34 pm, "Zoran Avtarovski" <zoran@sparecreative.com> wrote:
> 
> >I¹m seeing a really strange issue in one of our struts apps with a stream
> >result where the downloaded file is empty (zero bytes).
> >
> >I can¹t see where it is going wrong. I dynamically generate a zip file in
> >tomcat¹s temp folder and then use a Buffered input reader to pass off to
> >the
> >struts stream.
> >
> >I can the the zip file in the tomcat temp folder and it contains the data
> >it¹s supposed to. The issue is getting from the file to the input stream.
> >I¹ve included by struts configuration, the relevant part of my action and
> >the a detailed log.
> >
> >I¹d appreciate any help.
> >
> >Z.
> >
> >
> >My struts config :
> > <action name="exportData" class="clientAction"
> >method="exportData">
> > <result name="success" type="stream">
> > <param name="allowCaching">false</param>
> > <param name="contentType">${documentContentType}</param>
> > <param
> >name="contentDisposition">${documentFileName}</param>
> > <param
> >name="contentLength">${documentContentLength}</param>
> > <param name="bufferSize">1024</param>
> > </result>
> > </action>
> >
> >In my action class :
> >
> > String filePrefix = System.getProperty("java.io.tmpdir") +
> >³/temporaryData.zip" ;
> > LOGGER.debug("Read the generated file : "+ zipName);
> > File tempFile = new File(zipName);
> > if(tempFile.exists()){
> > LOGGER.debug("The file exists : "+ zipName);
> > }
> > if(tempFile.canRead()){
> > LOGGER.debug("The file can be read : "+ zipName);
> > }
> > if(tempFile.isFile()){
> > LOGGER.debug("The file is a file : "+ zipName);
> > }
> > if(tempFile.isHidden()){
> > LOGGER.debug("The file is hidden : "+ zipName);
> > }
> > LOGGER.debug("The file size is : "+ tempFile.length());
> >
> > inputStream = new BufferedInputStream(new
> >FileInputStream(tempFile));
> > documentFileName = "attachment; filename=NfcData.zip";
> > documentContentType = "application/zip";
> >
> >
> >My log files looks like this:
> >
> >DEBUG [http-bio-8084-exec-24] - Zip file name :
> >/Users/zoran/Library/Application
> >Support/NetBeans/7.4/apache-tomcat-7.0.41.0_base/temp/temporaryData.zip
> >DEBUG [http-bio-8084-exec-24] - Read the generated file :
> >/Users/zoran/Library/Application
> >Support/NetBeans/7.4/apache-tomcat-7.0.41.0_base/temp/temporaryData.zip
> >DEBUG [http-bio-8084-exec-24] - The file exists :
> >/Users/zoran/Library/Application
> >Support/NetBeans/7.4/apache-tomcat-7.0.41.0_base/temp/temporaryData.zip
> >DEBUG [http-bio-8084-exec-24] - The file can be read :
> >/Users/zoran/Library/Application
> >Support/NetBeans/7.4/apache-tomcat-7.0.41.0_base/temp/temporaryData.zip
> >DEBUG [http-bio-8084-exec-24] - The file is a file :
> >/Users/zoran/Library/Application
> >Support/NetBeans/7.4/apache-tomcat-7.0.41.0_base/temp/temporaryData.zip
> >DEBUG [http-bio-8084-exec-24] - The file size is : 1441
> >DEBUG [http-bio-8084-exec-24] - Document File name : attachment;
> >filename=NfcData.zip
> > Document Content Type : application/zip
> >DEBUG [http-bio-8084-exec-24] - Returning cached instance of singleton
> >bean
> >'org.springframework.transaction.config.internalTransactionAdvisor'
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >org.apache.struts2.dispatcher.StreamResult] and property [allowCaching]
> >DEBUG [http-bio-8084-exec-24] - Converter is null for property
> >[allowCaching]. Mapping size [0]:
> >DEBUG [http-bio-8084-exec-24] - field-level type converter for property
> >[allowCaching] = none found
> >DEBUG [http-bio-8084-exec-24] - global-level type converter for property
> >[allowCaching] = 
> >com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@5b6e6482
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >org.apache.struts2.dispatcher.StreamResult] and property [bufferSize]
> >DEBUG [http-bio-8084-exec-24] - field-level type converter for property
> >[bufferSize] = none found
> >DEBUG [http-bio-8084-exec-24] - global-level type converter for property
> >[bufferSize] = 
> >com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@5b6e6482
> >DEBUG [http-bio-8084-exec-24] - Creating converter of type
> >[com.opensymphony.xwork2.conversion.impl.NumberConverter]
> >DEBUG [http-bio-8084-exec-24] - Entering nullPropertyValue
> >[target=[com.sparecreative.sms.gateway.action.ClientAction@988c0a6,
> >com.opensymphony.xwork2.DefaultTextProvider@907a831],
> >property=contentDisposition]
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >com.opensymphony.xwork2.util.CompoundRoot] and property [(null)]
> >DEBUG [http-bio-8084-exec-24] - field-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - global-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - falling back to default type converter
> >[com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@5b6e6482]
> >DEBUG [http-bio-8084-exec-24] - Entering nullPropertyValue
> >[target=[com.sparecreative.sms.gateway.action.ClientAction@988c0a6,
> >com.opensymphony.xwork2.DefaultTextProvider@907a831],
> >property=contentType]
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >com.opensymphony.xwork2.util.CompoundRoot] and property [(null)]
> >DEBUG [http-bio-8084-exec-24] - field-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - global-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - falling back to default type converter
> >[com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@5b6e6482]
> >DEBUG [http-bio-8084-exec-24] - Entering nullPropertyValue
> >[target=[com.sparecreative.sms.gateway.action.ClientAction@988c0a6,
> >com.opensymphony.xwork2.DefaultTextProvider@907a831], property=inputName]
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >com.opensymphony.xwork2.util.CompoundRoot] and property [(null)]
> >DEBUG [http-bio-8084-exec-24] - field-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - global-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - falling back to default type converter
> >[com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@5b6e6482]
> >DEBUG [http-bio-8084-exec-24] - Entering nullPropertyValue
> >[target=[com.sparecreative.sms.gateway.action.ClientAction@988c0a6,
> >com.opensymphony.xwork2.DefaultTextProvider@907a831],
> >property=contentLength]
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >com.opensymphony.xwork2.util.CompoundRoot] and property [(null)]
> >DEBUG [http-bio-8084-exec-24] - field-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - global-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - falling back to default type converter
> >[com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@5b6e6482]
> >DEBUG [http-bio-8084-exec-24] - Entering nullPropertyValue
> >[target=[com.sparecreative.sms.gateway.action.ClientAction@988c0a6,
> >com.opensymphony.xwork2.DefaultTextProvider@907a831], property=bufferSize]
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >com.opensymphony.xwork2.util.CompoundRoot] and property [(null)]
> >DEBUG [http-bio-8084-exec-24] - field-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - global-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - falling back to default type converter
> >[com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@5b6e6482]
> >DEBUG [http-bio-8084-exec-24] - Entering nullPropertyValue
> >[target=[com.sparecreative.sms.gateway.action.ClientAction@988c0a6,
> >com.opensymphony.xwork2.DefaultTextProvider@907a831],
> >property=contentCharSet]
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >com.opensymphony.xwork2.util.CompoundRoot] and property [(null)]
> >DEBUG [http-bio-8084-exec-24] - field-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - global-level type converter for property
> >[null] = none found
> >DEBUG [http-bio-8084-exec-24] - falling back to default type converter
> >[com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@5b6e6482]
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >com.sparecreative.sms.gateway.action.ClientAction] and property
> >[documentContentLength]
> >DEBUG [http-bio-8084-exec-24] - Converter is null for property
> >[documentContentLength]. Mapping size [0]:
> >DEBUG [http-bio-8084-exec-24] - field-level type converter for property
> >[documentContentLength] = none found
> >DEBUG [http-bio-8084-exec-24] - Retrieving convert for class [class
> >com.sparecreative.sms.gateway.action.ClientAction] and property
> >[documentContentLength.documentContentLength]
> >DEBUG [http-bio-8084-exec-24] - global-level type converter for property
> >[documentContentLength] = none found
> >DEBUG [http-bio-8084-exec-24] - falling back to default type converter
> >[com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@5b6e6482]
> >DEBUG [http-bio-8084-exec-24] - Creating converter of type
> >[com.opensymphony.xwork2.conversion.impl.StringConverter]
> >DEBUG [http-bio-8084-exec-24] - Streaming result [inputStream]
> >type=[${documentContentType}] length=[${documentContentLength}]
> >content-disposition=[${documentFileName}] charset=[null]
> >DEBUG [http-bio-8084-exec-24] - Streaming to output buffer +++ START +++
> >DEBUG [http-bio-8084-exec-24] - Streaming to output buffer +++ END +++
> >DEBUG [http-bio-8084-exec-24] - after Locale=en_AU
> >DEBUG [http-bio-8084-exec-24] - intercept }
> >
> >
> >
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
 		 	   		  
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message