struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Laurie Harper <lau...@holoweb.net>
Subject Re: ClassCast Exception for ExcelFile Upload
Date Sun, 29 Apr 2007 03:14:16 GMT
Oops, no, that wouldn't work in this case. Perhaps it would be better if 
we back up for a moment: why do you need a FileInputStream specifically?

Since FIS is a 'root level' IS implementation, i.e. designed to wrap a 
datasource (file) directly rather than than to augment an existing stram 
(like, for example, BufferedInputStream), there's no way to construct 
one except with an actual File object.

The FormFile API doesn't give you any way to obtain a FileInputStream, 
nor does it provide access to a File object. I think you'll have to use 
a different approach to achieve your objective.

L.

Kirthi wrote:
> sorry abt that
> 
> Its throwing exception at this line
> 
> FileInputStream fin = (FileInputStream) in;
> 
> I tried new FileInputStream(in) - But this is not a valid constructor - not
> defined in API
> 
> Is there anyother way in struts where u get FileInputStream directly from
> the ActionForm
> 
> -Thank you
> 
> 
> 
> 
> 
> Laurie Harper wrote:
>> You didn't specify which line in the code you posted is throwing the 
>> exception, but I would guess it's this:
>>
>>      InputStream in = (InputStream) formFile.getInputStream();
>>      FileInputStream fin = (FileInputStream) in;			
>>
>> It's never wise to down-cast a value from an interface type to a 
>> concrete type like this. The API contract is to return you an 
>> InputStream; it doesn't have to be any particular type of InputStream.
>>
>> To do this safely, use the following code instead:
>>
>>      InputStream in = (InputStream) formFile.getInputStream();
>>      FileInputStream fin = new (FileInputStream(in);			
>>
>> L.
>>
>> Kirthi wrote:
>>> I am having problems with the FileUpload in struts.
>>>
>>> I am uploading an Excel File through browser and sending to Struts Action
>>> Class, handling it with FormFile. I am casting this FormFile to
>>> FileInputStream which is working fine.
>>>
>>> But when I am deleting some of the rows in that excel file and uploading
>>> it
>>> again its giving me a ClassCastException when converting the Form File to
>>> FileInputStream.
>>>
>>> I have no idea y its happening like this. Can any one help me with this?
>>>
>>> Thanks
>>>
>>> Here is the error I am getting
>>>
>>> root cause 
>>>
>>> java.lang.ClassCastException
>>> 	at rcsa.struts.ExcelFileUpload.execute(ExcelFileUpload.java:48)
>>> 	at
>>> org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
>>> 	at
>>> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
>>> 	at
>>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
>>> 	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
>>> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:716)
>>> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
>>> 	at
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:198)
>>> 	at
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
>>> 	at
>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
>>> 	at
>>> org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:595)
>>> 	at
>>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:432)
>>>
>>> ******************************************************************************************
>>>
>>> Here is the code
>>>
>>> import java.io.*;
>>>
>>> import javax.servlet.ServletException;
>>> import javax.servlet.http.*;
>>>
>>> import org.apache.struts.upload.FormFile;
>>> import org.apache.struts.action.*;
>>>
>>> import rcsa.poi.RcsaPOIEventListner;
>>> import rcsa.exceptions.RcsaException;
>>> import rcsa.dao.OpRiskSSheet;
>>> import rcsa.misc.ErrorHandler;
>>>
>>> public class ExcelFileUpload extends Action {
>>> 	
>>> //	 --------------------------------------------------------- Instance
>>> Variables
>>> 	String target;
>>>
>>> 	// --------------------------------------------------------- Methods
>>>
>>> 	/** 
>>> 	 * Method execute
>>> 	 * @param mapping
>>> 	 * @param form
>>> 	 * @param request
>>> 	 * @param response
>>> 	 * @return ActionForward
>>> 	 */
>>> 	public ActionForward execute(
>>> 		ActionMapping mapping,
>>> 		ActionForm form,
>>> 		HttpServletRequest request,
>>> 		HttpServletResponse response) throws IOException, ServletException,
>>> RcsaException{
>>> 			
>>> 		ActionMessages errors = new ActionMessages();
>>> 		if(form != null){
>>> 			ExcelFileUploadForm excelForm = (ExcelFileUploadForm) form;
>>> 			FormFile formFile = excelForm.getExcelFile();
>>> 			InputStream in = (InputStream) formFile.getInputStream();
>>> 			FileInputStream fin = (FileInputStream) in;			errors.clear();
>>> 			RcsaPOIEventListner.readExcelStream(fin);
>>> 			//errors = new ErrorHandler(opSheet, errors).checkErrors();
>>> 			if(errors.isEmpty()){
>>> 				target = "success";
>>> 			}else{
>>> 				target = "failure";			
>>> 			}
>>> 		}else{
>>> 			errors.add(ActionMessages.GLOBAL_MESSAGE, 
>>> 					new ActionMessage("UNABLE TO LOCATE THE EXCEL FILE", false));
>>> 			target = "failure";
>>> 		}
>>> 		saveErrors(request, errors);
>>> 		return mapping.findForward(target);
>>>
>>> 	}
>>>
>>> }
>>>
>>>
>>> **********************************************************************
>>>
>>> import org.apache.struts.validator.ValidatorForm;
>>> import org.apache.struts.upload.FormFile;
>>> 	
>>> 	/**
>>> 	 *@author
>>> 	 *
>>> 	 */
>>>
>>> 	/**
>>> 	 *Form bean for File Upload.
>>> 	 *
>>> 	 */
>>> public class ExcelFileUploadForm extends ValidatorForm{
>>> 	
>>> 	private FormFile excelFile;
>>>
>>> 	/**
>>> 	 * @return Returns the theFile.
>>> 	 */	 
>>> 	 public FormFile getExcelFile() {
>>> 	    return excelFile;
>>> 	  }
>>> 	 
>>> 	 /**
>>> 	  * @param theFile The FormFile to set.
>>> 	  */
>>> 	  public void setExcelFile(FormFile excelFile) {
>>> 	    this.excelFile = excelFile;
>>> 	  }
>>> 	  
>>> }
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>>
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message