You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Irfan (JIRA)" <ji...@apache.org> on 2016/05/11 11:54:13 UTC

[jira] [Comment Edited] (WW-4633) ClassCastException while generating report using Struts 2.3.28 and jasperreports 4.5.1

    [ https://issues.apache.org/jira/browse/WW-4633?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15280005#comment-15280005 ] 

Irfan edited comment on WW-4633 at 5/11/16 11:53 AM:
-----------------------------------------------------

This is my action class where iam fetching result.
@Controller("atk.himma.pulmonary.action.PulmonaryReportAction")
@Scope("atkAction")
public class PulmonaryReportAction extends BaseAction implements ParameterAware {
    
    private static final long serialVersionUID = 1L;

	protected Map<String, Object> parameters = new HashMap<String, Object>(0);
	
	private static final ILogger LOGGER = AppLogFactory.getLog(PulmonaryReportAction.class);

	@Resource
	@Qualifier("mbuSetupClientResource")
	private IMBUSetupResource mbuSetupResource;
    
    @Autowired
    private IPulmonaryService pulmonaryService;
        
    @Autowired
    private IPulmonaryEvaluationService evaluationService;
    
    @Autowired
    private INewAssessmentService newAssessmentService;
    
    @Autowired
    private ICardioPulmonaryService cardioPulmonaryService;
        
    private PulmonaryServiceInfo serviceInfo;
    
    private CardioPulmonary cardioPulmonary;
    
    private PulmonaryNewAssessment pulmonaryNewAssessment;
    
    private List<PulmonaryDiagnosisLog> diagnosisLog;
    
    private PulmonaryDiagnosisLog pulmonaryDiagnosisLog;
    
    private List<PulmonaryAllergyInfo> allergyInfo;
    
    private List<PulmonaryVitalInfo> vitalInfo;
    
    private List<PulmonaryEvaluationDetail> evaluationDetails;
    
    private JRBeanCollectionDataSource beanColDataSource ;
    
    private List<Map<String,?>> formsList;

    private SimpleDateFormat sdf = new SimpleDateFormat(UserContextUtil.getUserDateFormat() + " " + UserContextUtil.getUserTimeFormat());

	@AuthorizationNotRequired
	public String getPulmonaryReport() throws BaseException {
		String pulmonaryServiceIds = getRequestParameter("pulmonaryServiceIds");
		List<Long> pulServiceIds = new ArrayList<Long>(0);
		Map<String, Object> formsMap = new HashMap<String, Object>();
		formsList = new ArrayList<Map<String,?>>();
		if(StringUtils.isNotBlank(pulmonaryServiceIds)){
		    String[] serviceIds =  pulmonaryServiceIds.split(",");
		    for (String serviceId : serviceIds) {
		        pulServiceIds.add(Long.parseLong(serviceId));
            }
		}
		String reportsDirPath = ServletActionContext.getServletContext().getRealPath("/reports/jasper/");
        File reportsDir = new File(reportsDirPath);
        parameters.put(JRParameter.REPORT_FILE_RESOLVER, new SimpleFileResolver(reportsDir));
        Integer evaluationCount = null;
        Integer cardioCount = null;
        Integer assessmentCount = null;
        int totalPageCount = 0;
        if(getRequestParameterInt("evaluationCount") != null){
            evaluationCount = Integer.valueOf(getRequestParameterInt("evaluationCount"));
            totalPageCount = totalPageCount + evaluationCount;
        }
        if(getRequestParameterInt("cardioCount") != null){
            cardioCount = Integer.valueOf(getRequestParameter("cardioCount"));
            totalPageCount = totalPageCount + cardioCount;
        }
        if(getRequestParameterInt("assessmentCount") != null){
            assessmentCount = Integer.valueOf(getRequestParameterInt("assessmentCount"));
            totalPageCount = totalPageCount + assessmentCount;
        }
        List<PulmonaryEvalationReport> evalationReportList = new ArrayList<PulmonaryEvalationReport>();
        List<PulmonaryEvalationReport> assMentList = new ArrayList<PulmonaryEvalationReport>();
        List<PulmonaryEvalationReport> cardioList = new ArrayList<PulmonaryEvalationReport>();
        for (Long pulmonaryServiceId : CollectionUtil.emptyIfNull(pulServiceIds)) {
        	 PulmonaryEvalationReport evalationReport = new PulmonaryEvalationReport();
             PulmonaryEvalationReport assMentReport = new PulmonaryEvalationReport();
             PulmonaryEvalationReport cardioReport = new PulmonaryEvalationReport();
             PulmonaryEvaluation  evaluationDetail = evaluationService.getEvaluationByServiceId(pulmonaryServiceId);
            evalationReport = patientVitalDignAndAllergy(evalationReport, pulmonaryServiceId, evaluationDetail);
            if (evaluationCount != null) {
                evalationReport = getEvaluationReport(evalationReport, evaluationDetail);
                for (int i = 0; i < evaluationCount; i++) {
                    evalationReportList.add(evalationReport);
                }
                formsMap.put("evalDs", evalationReportList);
            }

            if (cardioCount != null) {
                evalationReport = getEvaluationReport(evalationReport, evaluationDetail);
                cardioReport = getCardioPulmonaryReport(evalationReport, pulmonaryServiceId);
                for (int i = 0; i < cardioCount; i++) {
                	cardioList.add(cardioReport);
                }
                formsMap.put("cardioDs", cardioList);
            }

            if (assessmentCount != null) {
                evalationReport = getEvaluationReport(evalationReport, evaluationDetail);
                assMentReport = getNewAssessmentReport(evalationReport, pulmonaryServiceId);
                for (int i = 0; i < assessmentCount; i++) {
                	assMentList.add(assMentReport);
                }
                formsMap.put("assmDS", assMentList);
            }
        }
    	try {
	        if(CollectionUtil.isNotNullEmpty(assMentList)){
	        	PulmonaryEvalationReport lastObj = assMentList.get(assMentList.size() - 1);
				PulmonaryEvalationReport lastObjClonelastObj = (PulmonaryEvalationReport) lastObj.clone();
				lastObjClonelastObj.setIsPageBreak(false);
				assMentList.set( assMentList.size() - 1, lastObjClonelastObj);
				 formsMap.put("assmDS", assMentList);
	        } else if(CollectionUtil.isNotNullEmpty(cardioList)){
	        	PulmonaryEvalationReport lastObj = cardioList.get(cardioList.size() - 1);
				PulmonaryEvalationReport lastObjClonelastObj = (PulmonaryEvalationReport) lastObj.clone();
				lastObjClonelastObj.setIsPageBreak(false);
				cardioList.set( cardioList.size() - 1, lastObjClonelastObj);
				 formsMap.put("cardioDs", cardioList);
	        } else if(CollectionUtil.isNotNullEmpty(evalationReportList)){
	        	PulmonaryEvalationReport lastObj = evalationReportList.get(evalationReportList.size() - 1);
				PulmonaryEvalationReport lastObjClonelastObj = (PulmonaryEvalationReport) lastObj.clone();
				lastObjClonelastObj.setIsPageBreak(false);
				evalationReportList.set( evalationReportList.size() - 1, lastObjClonelastObj);
				 formsMap.put("evalDs", evalationReportList);
	        }
		} catch (CloneNotSupportedException e) {
			LOGGER.error(e);
		}
        formsList.add(formsMap);
        parameters.put("totPage", totalPageCount);
        if(UserContextUtil.getUserMBUId()!=null){
        	Long mbuId = UserContextUtil.getUserMBUId();
        	Boolean isMBULogo = mbuSetupResource.isMBULogoConfiguredForReports(mbuId);
    		if(isMBULogo){
    			parameters.put("logoUrl", ReportUtil.getMBULogoURL(mbuId));
    		}else{
    			parameters.put("logoUrl", null);
    		}
        }
		parameters.put("fieldsDisplay", ReportAdressUtil.getMBUAdress(UserContextUtil.getUserMBUId()));
		parameters.put("printedBy", UserContextUtil.getLoggedInEmployeeName());
		parameters.put("printedDate", sdf.format(new Date()));
		parameters.put("slogan", "SERVING YOU BETTER");
        beanColDataSource = new JRBeanCollectionDataSource(formsList);
		return SUCCESS;
	}

    private PulmonaryEvalationReport  patientVitalDignAndAllergy(PulmonaryEvalationReport evalationReport,Long pulmonaryServiceId,PulmonaryEvaluation evaluationDetail) throws BaseException{
    	serviceInfo = pulmonaryService.getPulmonaryOrder(pulmonaryServiceId);
    	
    	if(CollectionUtil.isNotNullEmpty(evaluationDetail.getEvaluationDiagnosisLog())){
    		diagnosisLog = evaluationDetail.getEvaluationDiagnosisLog();
    	}
    	if(CollectionUtil.isNotNullEmpty(evaluationDetail.getEvaluationVitals())){
    		vitalInfo = evaluationDetail.getEvaluationVitals();
    	}
    	if(CollectionUtil.isNotNullEmpty(evaluationDetail.getEvaluationAllergyInfos())){
    		allergyInfo = evaluationDetail.getEvaluationAllergyInfos();
    	}
		for(PulmonaryAllergyInfo pAllergyInfo : CollectionUtil.emptyIfNull(allergyInfo)){
			pAllergyInfo.setSeverityName(baseLVService.getDisplayText("ALLERGY_SEVERITY", pAllergyInfo.getSeverityId()));
			pAllergyInfo.setCategoryName(baseLVService.getDisplayText("ALLERGY_CATEGORY", pAllergyInfo.getAllergyCategoryId()));
			pAllergyInfo.setAllergyType(baseLVService.getDisplayText("ALLERGY_TYPE", pAllergyInfo.getAllergyTypeId()));
		}
		
		for(PulmonaryDiagnosisLog pDiagnosisLog :CollectionUtil.emptyIfNull(diagnosisLog)){
			pDiagnosisLog.setDiagnosisType(baseLVService.getDisplayText("DR_DIAGNOSIS_TYPE", pDiagnosisLog.getType()));
		}
		
		for(PulmonaryVitalInfo pvVitalInfo : CollectionUtil.emptyIfNull(vitalInfo)){
			if(pvVitalInfo.getBpLow() != null && pvVitalInfo.getBpLow() != 0 && pvVitalInfo.getBpHigh() != null && pvVitalInfo.getBpHigh() != 0){
				pvVitalInfo.setBp(pvVitalInfo.getBpLow().toString() + " / "+ pvVitalInfo.getBpHigh().toString());
			}
		}
		evalationReport.setServiceInfo(serviceInfo);
		parameters.put("diagnosisDS", diagnosisLog);
	    parameters.put("vitalDS", vitalInfo);
	    parameters.put("allergyDS", allergyInfo);
	    return evalationReport;
    }
    
    private PulmonaryEvalationReport  getEvaluationReport(PulmonaryEvalationReport evalationReport, PulmonaryEvaluation evaluationDetail) throws BaseException{
    	PulmonaryEvaluationDetail pulmonaryEvaluationDetail = null;
		for (PulmonaryEvaluationDetail detail : CollectionUtil.emptyIfNull(evaluationDetail.getEvaluationDetails())) {
			if (detail.isActiveRecord()) {
				pulmonaryEvaluationDetail = detail;
				break;
			}
		}
		evaluationDetails = new ArrayList<PulmonaryEvaluationDetail>();
		evaluationDetail.setEvaluationDetails(evaluationDetails);
		evaluationDetail.getEvaluationDetails().add(pulmonaryEvaluationDetail);
		 parameters.put("evalParam",Boolean.TRUE );
		 return evalationReport;
		
    }
    
    private PulmonaryEvalationReport  getCardioPulmonaryReport(PulmonaryEvalationReport evalationReport,Long pulmonaryServiceId) throws BaseException{
    	cardioPulmonary = cardioPulmonaryService.getActiveCardioPulmonary(pulmonaryServiceId);
    	evalationReport.setCardioPulmonary(cardioPulmonary);
    	 parameters.put("cardioParam",Boolean.TRUE );
    	 return evalationReport;
    }
    
    private PulmonaryEvalationReport  getNewAssessmentReport(PulmonaryEvalationReport evalationReport,Long pulmonaryServiceId) throws BaseException{
    	pulmonaryNewAssessment= newAssessmentService.getActiveNewAssessment(pulmonaryServiceId);
    	evalationReport.setNewAssessment(pulmonaryNewAssessment);
    	 parameters.put("newAssessParam",Boolean.TRUE );
    	 return evalationReport;
    }

    @AuthorizationNotRequired
    public String getCardioReport(){
		return SUCCESS;
    	
    }
   
    @Override
    public void setParameters(Map<String, String[]> parameters) {
        //Dummy method
    }

    public PulmonaryServiceInfo getServiceInfo() {
        return serviceInfo;
    }
    public void setServiceInfo(PulmonaryServiceInfo serviceInfo) {
        this.serviceInfo = serviceInfo;
    }
  /*  public PulmonaryEvaluation getEvaluationDetail() {
        return evaluationDetail;
    }
    public void setEvaluationDetail(PulmonaryEvaluation evaluationDetail) {
        this.evaluationDetail = evaluationDetail;
    }*/
    

	public Map<String, Object> getParameters() {
		return parameters;
	}


	public CardioPulmonary getCardioPulmonary() {
		return cardioPulmonary;
	}

	public void setCardioPulmonary(CardioPulmonary cardioPulmonary) {
		this.cardioPulmonary = cardioPulmonary;
	}

	public JRBeanCollectionDataSource getBeanColDataSource() {
		return beanColDataSource;
	}

	public void setBeanColDataSource(JRBeanCollectionDataSource beanColDataSource) {
		this.beanColDataSource = beanColDataSource;
	}

	public PulmonaryDiagnosisLog getPulmonaryDiagnosisLog() {
		return pulmonaryDiagnosisLog;
	}

	public void setPulmonaryDiagnosisLog(PulmonaryDiagnosisLog pulmonaryDiagnosisLog) {
		this.pulmonaryDiagnosisLog = pulmonaryDiagnosisLog;
	}

	public List<PulmonaryDiagnosisLog> getDiagnosisLog() {
		return diagnosisLog;
	}

	public void setDiagnosisLog(List<PulmonaryDiagnosisLog> diagnosisLog) {
		this.diagnosisLog = diagnosisLog;
	}

	public PulmonaryNewAssessment getPulmonaryNewAssessment() {
		return pulmonaryNewAssessment;
	}

    public void setPulmonaryNewAssessment(PulmonaryNewAssessment pulmonaryNewAssessment) {
		this.pulmonaryNewAssessment = pulmonaryNewAssessment;
	}

	public List<PulmonaryEvaluationDetail> getEvaluationDetails() {
		return evaluationDetails;
	}

	public void setEvaluationDetails(List<PulmonaryEvaluationDetail> evaluationDetails) {
		this.evaluationDetails = evaluationDetails;
	}


	public List<Map<String,?>> getFormsList() {
		return formsList;
	}


	public void setFormsList(List<Map<String,?>> formsList) {
		this.formsList = formsList;
	}
	
	 
}

This is my print jasper report result class.


 */
public class JasperReportResult extends JasperReportsResult {

	/**
	 * Serial Version UID
	 */
	private static final long serialVersionUID = 1L;
	
	private static final ILogger LOG = AppLogFactory.getLog(JasperReportResult.class);
	
	@Autowired
	private IATKPrintService printService;
	
	private String documentShortName;
	
	public String getDocumentShortName() {
		return documentShortName;
	}

	public void setDocumentShortName(String documentShortName) {
		this.documentShortName = documentShortName;
	}

	protected String preview;

	private void initializeProperties(ActionInvocation invocation) throws Exception {
		if (dataSource == null && connection == null) {
			String message = "No dataSource specified...";
			LOG.info(message);
			throw new RuntimeException(message);
		}
		if (dataSource != null) {
			dataSource = conditionalParse(dataSource, invocation);
		}
		
		format = conditionalParse(format, invocation);
		if (StringUtils.isEmpty(format)) {
			format = FORMAT_PDF;
		}

		if (contentDisposition != null) {
			contentDisposition = conditionalParse(contentDisposition, invocation);
		}

		if (documentName != null) {
			documentName = conditionalParse(documentName, invocation);
		}

		reportParameters = conditionalParse(reportParameters, invocation);
		exportParameters = conditionalParse(exportParameters, invocation);
	}

	@SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
	protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
		initializeProperties(invocation);

		if (LOG.isDebugEnabled()) {
			LOG.debug("Creating JasperReport for dataSource = " + dataSource + ", format = " + format);
		}

		HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(
				StrutsStatics.HTTP_REQUEST);
		HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(
				StrutsStatics.HTTP_RESPONSE);

		// Handle IE special case: it sends a "contype" request first.
		if ("contype".equals(request.getHeader("User-Agent"))) {
			try {
				response.setContentType("application/pdf");
				response.setContentLength(0);

				ServletOutputStream outputStream = response.getOutputStream();
				outputStream.close();
			} catch (IOException e) {
				LOG.error("Error writing report output", e);
				throw new ServletException(e);
			}
			return;
		}

		// Construct the data source for the report.
		ValueStack stack = invocation.getStack();
		ValueStackDataSource stackDataSource = null;

		Connection conn = (Connection) stack.findValue(connection);
		if (conn == null)
			stackDataSource = new ValueStackDataSource(stack, dataSource, true);

		// Determine the directory that the report file is in and set the
		// reportDirectory parameter
		// For WW 2.1.7:
		// ServletContext servletContext = ((ServletConfig)
		// invocation.getInvocationContext().get(ServletActionContext.SERVLET_CONFIG)).getServletContext();
		ServletContext servletContext = (ServletContext) invocation.getInvocationContext().get(
				StrutsStatics.SERVLET_CONTEXT);
		String systemId = servletContext.getRealPath(finalLocation);
		Map<String, Object> parameters = new ValueStackShadowMap(stack);
		File directory = new File(systemId.substring(0, systemId.lastIndexOf(File.separator)));
		parameters.put("reportDirectory", directory);
		parameters.put(JRParameter.REPORT_LOCALE, invocation.getInvocationContext().getLocale());

		// put timezone in jasper report parameter
		if (timeZone != null) {
			timeZone = conditionalParse(timeZone, invocation);
			final TimeZone tz = TimeZone.getTimeZone(timeZone);
			if (tz != null) {
				// put the report time zone
				parameters.put(JRParameter.REPORT_TIME_ZONE, tz);
			}
		}

		// Add any report parameters from action to param map.
		Map reportParams = (Map) stack.findValue(reportParameters);
		if (reportParams != null) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("Found report parameters; adding to parameters...");
			}
			parameters.putAll(reportParams);
		}

		byte[] output;
		JasperPrint jasperPrint;

		// Fill the report and produce a print object
		try {
			JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(systemId);
			if (conn == null) {
				jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, stackDataSource);
			} else {
				jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
			}
			removeBlankPage(jasperPrint.getPages());
		} catch (JRException e) {
			LOG.error("Error building report for uri " + systemId, e);
			throw new ServletException(e);
		}

		// Export the print object to the desired output format
		try {
			if (contentDisposition != null || documentName != null) {
				final StringBuilder tmp = new StringBuilder(128);
				tmp.append((contentDisposition == null) ? "inline" : contentDisposition);

				if (documentName != null) {
					tmp.append("; filename=");
					tmp.append(documentName);
					tmp.append(".");
					tmp.append(format.toLowerCase());
				}

				response.setHeader("Content-disposition", tmp.toString());
			}

			JRExporter exporter;

			if (format.equals(FORMAT_PDF)) {
				response.setContentType("application/pdf");
				exporter = new JRPdfExporter();			
				boolean encryptionReq = Boolean.valueOf(preview);
				if (encryptionReq) {
					exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE);
					exporter.setParameter(JRPdfExporterParameter.IS_128_BIT_KEY, Boolean.TRUE);
				}
			} else if (format.equals(FORMAT_CSV)) {
				response.setContentType("text/csv");
				exporter = new JRCsvExporter();
			} else if (format.equals(FORMAT_HTML)) {
				response.setContentType("text/html");

				// IMAGES_MAPS seems to be only supported as
				// "backward compatible" from JasperReports 1.1.0

				Map imagesMap = new HashMap();
				request.getSession(true).setAttribute("IMAGES_MAP", imagesMap);

				exporter = new JRHtmlExporter();
				exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
				exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + imageServletUrl);

				// Needed to support chart images:
				exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
				request.getSession().setAttribute("net.sf.jasperreports.j2ee.jasper_print", jasperPrint);
			} else if (format.equals(FORMAT_XLS)) {
				response.setContentType("application/vnd.ms-excel");
				exporter = new JRXlsExporter();
			} else if (format.equals(FORMAT_XML)) {
				response.setContentType("text/xml");
				exporter = new JRXmlExporter();
			} else if (format.equals(FORMAT_RTF)) {
				response.setContentType("application/rtf");
				exporter = new JRRtfExporter();
			} else if ("img".equals(format)) {
				/**
				 * Added By ATK - To support image export 
				 */
				int pageIndex = 0;
				BufferedImage pageImage = new BufferedImage(jasperPrint.getPageWidth() + 1,
						jasperPrint.getPageHeight() + 1, BufferedImage.TYPE_INT_RGB);
				exporter = new JRGraphics2DExporter();
				exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
				exporter.setParameter(JRGraphics2DExporterParameter.GRAPHICS_2D, pageImage.getGraphics());
				exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex));

				ServletOutputStream out = response.getOutputStream();
				exporter.exportReport();
				ImageIO.write(pageImage, "jpeg", out);
				out.close();
			} else {
				throw new ServletException("Unknown report format: " + format);
			}

			Map exportParams = (Map) stack.findValue(exportParameters);
			if (exportParams != null) {
				if (LOG.isDebugEnabled()) {
					LOG.debug("Found export parameters; adding to exporter parameters...");
				}
				exporter.getParameters().putAll(exportParams);
			}

			output = exportReportToBytes(jasperPrint, exporter);
		} catch (JRException e) {
			String message = "Error producing " + format + " report for uri " + systemId;
			LOG.error(message, e);
			throw new ServletException(e);
		}
		if (!"img".equals(format)) {
			response.setContentLength(output.length);
			DocumentPrinter documentPrinter = printService.getDocumentPrinter(documentShortName);
			if(documentPrinter!=null){
				documentPrinter.setDocName(documentShortName);
				if(documentPrinter.getPrintOption().equals(DocumentPrinter.CLIENT_OPTION)){
					addFileDownloadCookie(response);
					writeReport(response, output);
				}else if(documentPrinter.getPrintOption().equals(DocumentPrinter.BOTH_OPTION)){
					printService.print(output, documentPrinter);
					addFilePrintedCookie(response);
					addFileDownloadCookie(response);
					writeReport(response, output);
				}else{
					printService.print(output, documentPrinter);
					response.setHeader("Content-disposition", "");		
					response.setContentType("text/html");										
					addFilePrintedCookie(response);
					writeReport(response, new String("").getBytes());
				}	
			}else{
				addFileDownloadCookie(response);
				writeReport(response, output);				
			}
			
		}
	}
	
	private void removeBlankPage(List<JRPrintPage> pages) {
	      for (Iterator<JRPrintPage> i=pages.iterator(); i.hasNext();) {
	          JRPrintPage page = i.next();
	          if (CollectionUtil.isNullOrEmpty(page.getElements())) {
	              i.remove();
	          }
	      }
	  }
	
	private void addFileDownloadCookie(HttpServletResponse response){		
		Cookie fileDownload = new Cookie("fileDownload", "true");
		fileDownload.setPath("/");
		fileDownload.setMaxAge(2*60*60);
		response.addCookie(fileDownload);		
	}
	
	private void addFilePrintedCookie(HttpServletResponse response){		
		Cookie filePrinted = new Cookie("filePrinted", "true");
		filePrinted.setPath("/");
		filePrinted.setMaxAge(2*60*60);
		response.addCookie(filePrinted);		
	}

	/**
	 * Writes report bytes to response output stream.
	 * 
	 * @param response
	 *            Current response.
	 * @param output
	 *            Report bytes to write.
	 * @throws ServletException
	 *             on stream IOException.
	 */
	private void writeReport(HttpServletResponse response, byte[] output) throws ServletException {
		ServletOutputStream outputStream = null;
		try {
			outputStream = response.getOutputStream();
			outputStream.write(output);
			outputStream.flush();
		} catch (IOException e) {
			LOG.error("Error writing report output", e);
			throw new ServletException(e);
		} finally {
			try {
				if (outputStream != null) {
					outputStream.close();
				}
			} catch (IOException e) {
				LOG.error("Error closing report output stream", e);
				throw new ServletException(e);
			}
		}
	}

	private byte[] exportReportToBytes(JasperPrint jasperPrint, JRExporter exporter) throws JRException {
		byte[] output;
		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
		exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
		if (delimiter != null) {
			exporter.setParameter(JRCsvExporterParameter.FIELD_DELIMITER, delimiter);
		}

		exporter.exportReport();

		output = baos.toByteArray();

		return output;
	}

	public String getPreview() {
		return preview;
	}

	public void setPreview(String preview) {
		this.preview = preview;
	}
}



my struts2 file.

<package name="jasper" namespace="/reports" extends="atk-default">
		<default-class-ref class="atk.himma.pulmonary.action.PulmonaryReportAction" />
	 <action name="getPulmonaryReport" method="getPulmonaryReport">
			<interceptor-ref name="himmaLazyStack">
					<param name="atkParams.removeEmptyParams">false</param>
			</interceptor-ref>
			 <result type="jasper">
				<param name="location">/reports/jasper/pulmonaryMainReport.jasper</param>
				<param name="contentDisposition">attachment;fileName="pulmonaryReport.pdf"</param>
				<param name="dataSource">evalationReportList</param>
				<!-- <param name="dataSource">jrDataSource</param>
				<param name="dataSource">mainFormsList</param> -->
				<param name="dataSource">beanColDataSource</param>
				<param name="dataSource">formsList</param>
			  	<param name="format">PDF</param>
				<param name="reportParameters">parameters</param>
			</result> 
		</action> 


was (Author: irfank):
This is my action class where iam fetching result.
@Controller("atk.himma.pulmonary.action.PulmonaryReportAction")
@Scope("atkAction")
public class PulmonaryReportAction extends BaseAction implements ParameterAware {
    
    private static final long serialVersionUID = 1L;

	protected Map<String, Object> parameters = new HashMap<String, Object>(0);
	
	private static final ILogger LOGGER = AppLogFactory.getLog(PulmonaryReportAction.class);

	@Resource
	@Qualifier("mbuSetupClientResource")
	private IMBUSetupResource mbuSetupResource;
    
    @Autowired
    private IPulmonaryService pulmonaryService;
        
    @Autowired
    private IPulmonaryEvaluationService evaluationService;
    
    @Autowired
    private INewAssessmentService newAssessmentService;
    
    @Autowired
    private ICardioPulmonaryService cardioPulmonaryService;
        
    private PulmonaryServiceInfo serviceInfo;
    
    private CardioPulmonary cardioPulmonary;
    
    private PulmonaryNewAssessment pulmonaryNewAssessment;
    
    private List<PulmonaryDiagnosisLog> diagnosisLog;
    
    private PulmonaryDiagnosisLog pulmonaryDiagnosisLog;
    
    private List<PulmonaryAllergyInfo> allergyInfo;
    
    private List<PulmonaryVitalInfo> vitalInfo;
    
    private List<PulmonaryEvaluationDetail> evaluationDetails;
    
    private JRBeanCollectionDataSource beanColDataSource ;
    
    private List<Map<String,?>> formsList;

    private SimpleDateFormat sdf = new SimpleDateFormat(UserContextUtil.getUserDateFormat() + " " + UserContextUtil.getUserTimeFormat());

	@AuthorizationNotRequired
	public String getPulmonaryReport() throws BaseException {
		String pulmonaryServiceIds = getRequestParameter("pulmonaryServiceIds");
		List<Long> pulServiceIds = new ArrayList<Long>(0);
		Map<String, Object> formsMap = new HashMap<String, Object>();
		formsList = new ArrayList<Map<String,?>>();
		if(StringUtils.isNotBlank(pulmonaryServiceIds)){
		    String[] serviceIds =  pulmonaryServiceIds.split(",");
		    for (String serviceId : serviceIds) {
		        pulServiceIds.add(Long.parseLong(serviceId));
            }
		}
		String reportsDirPath = ServletActionContext.getServletContext().getRealPath("/reports/jasper/");
        File reportsDir = new File(reportsDirPath);
        parameters.put(JRParameter.REPORT_FILE_RESOLVER, new SimpleFileResolver(reportsDir));
        Integer evaluationCount = null;
        Integer cardioCount = null;
        Integer assessmentCount = null;
        int totalPageCount = 0;
        if(getRequestParameterInt("evaluationCount") != null){
            evaluationCount = Integer.valueOf(getRequestParameterInt("evaluationCount"));
            totalPageCount = totalPageCount + evaluationCount;
        }
        if(getRequestParameterInt("cardioCount") != null){
            cardioCount = Integer.valueOf(getRequestParameter("cardioCount"));
            totalPageCount = totalPageCount + cardioCount;
        }
        if(getRequestParameterInt("assessmentCount") != null){
            assessmentCount = Integer.valueOf(getRequestParameterInt("assessmentCount"));
            totalPageCount = totalPageCount + assessmentCount;
        }
        List<PulmonaryEvalationReport> evalationReportList = new ArrayList<PulmonaryEvalationReport>();
        List<PulmonaryEvalationReport> assMentList = new ArrayList<PulmonaryEvalationReport>();
        List<PulmonaryEvalationReport> cardioList = new ArrayList<PulmonaryEvalationReport>();
        for (Long pulmonaryServiceId : CollectionUtil.emptyIfNull(pulServiceIds)) {
        	 PulmonaryEvalationReport evalationReport = new PulmonaryEvalationReport();
             PulmonaryEvalationReport assMentReport = new PulmonaryEvalationReport();
             PulmonaryEvalationReport cardioReport = new PulmonaryEvalationReport();
             PulmonaryEvaluation  evaluationDetail = evaluationService.getEvaluationByServiceId(pulmonaryServiceId);
            evalationReport = patientVitalDignAndAllergy(evalationReport, pulmonaryServiceId, evaluationDetail);
            if (evaluationCount != null) {
                evalationReport = getEvaluationReport(evalationReport, evaluationDetail);
                for (int i = 0; i < evaluationCount; i++) {
                    evalationReportList.add(evalationReport);
                }
                formsMap.put("evalDs", evalationReportList);
            }

            if (cardioCount != null) {
                evalationReport = getEvaluationReport(evalationReport, evaluationDetail);
                cardioReport = getCardioPulmonaryReport(evalationReport, pulmonaryServiceId);
                for (int i = 0; i < cardioCount; i++) {
                	cardioList.add(cardioReport);
                }
                formsMap.put("cardioDs", cardioList);
            }

            if (assessmentCount != null) {
                evalationReport = getEvaluationReport(evalationReport, evaluationDetail);
                assMentReport = getNewAssessmentReport(evalationReport, pulmonaryServiceId);
                for (int i = 0; i < assessmentCount; i++) {
                	assMentList.add(assMentReport);
                }
                formsMap.put("assmDS", assMentList);
            }
        }
    	try {
	        if(CollectionUtil.isNotNullEmpty(assMentList)){
	        	PulmonaryEvalationReport lastObj = assMentList.get(assMentList.size() - 1);
				PulmonaryEvalationReport lastObjClonelastObj = (PulmonaryEvalationReport) lastObj.clone();
				lastObjClonelastObj.setIsPageBreak(false);
				assMentList.set( assMentList.size() - 1, lastObjClonelastObj);
				 formsMap.put("assmDS", assMentList);
	        } else if(CollectionUtil.isNotNullEmpty(cardioList)){
	        	PulmonaryEvalationReport lastObj = cardioList.get(cardioList.size() - 1);
				PulmonaryEvalationReport lastObjClonelastObj = (PulmonaryEvalationReport) lastObj.clone();
				lastObjClonelastObj.setIsPageBreak(false);
				cardioList.set( cardioList.size() - 1, lastObjClonelastObj);
				 formsMap.put("cardioDs", cardioList);
	        } else if(CollectionUtil.isNotNullEmpty(evalationReportList)){
	        	PulmonaryEvalationReport lastObj = evalationReportList.get(evalationReportList.size() - 1);
				PulmonaryEvalationReport lastObjClonelastObj = (PulmonaryEvalationReport) lastObj.clone();
				lastObjClonelastObj.setIsPageBreak(false);
				evalationReportList.set( evalationReportList.size() - 1, lastObjClonelastObj);
				 formsMap.put("evalDs", evalationReportList);
	        }
		} catch (CloneNotSupportedException e) {
			LOGGER.error(e);
		}
        formsList.add(formsMap);
        parameters.put("totPage", totalPageCount);
        if(UserContextUtil.getUserMBUId()!=null){
        	Long mbuId = UserContextUtil.getUserMBUId();
        	Boolean isMBULogo = mbuSetupResource.isMBULogoConfiguredForReports(mbuId);
    		if(isMBULogo){
    			parameters.put("logoUrl", ReportUtil.getMBULogoURL(mbuId));
    		}else{
    			parameters.put("logoUrl", null);
    		}
        }
		parameters.put("fieldsDisplay", ReportAdressUtil.getMBUAdress(UserContextUtil.getUserMBUId()));
		parameters.put("printedBy", UserContextUtil.getLoggedInEmployeeName());
		parameters.put("printedDate", sdf.format(new Date()));
		parameters.put("slogan", "SERVING YOU BETTER");
        beanColDataSource = new JRBeanCollectionDataSource(formsList);
		return SUCCESS;
	}

    private PulmonaryEvalationReport  patientVitalDignAndAllergy(PulmonaryEvalationReport evalationReport,Long pulmonaryServiceId,PulmonaryEvaluation evaluationDetail) throws BaseException{
    	serviceInfo = pulmonaryService.getPulmonaryOrder(pulmonaryServiceId);
    	
    	if(CollectionUtil.isNotNullEmpty(evaluationDetail.getEvaluationDiagnosisLog())){
    		diagnosisLog = evaluationDetail.getEvaluationDiagnosisLog();
    	}
    	if(CollectionUtil.isNotNullEmpty(evaluationDetail.getEvaluationVitals())){
    		vitalInfo = evaluationDetail.getEvaluationVitals();
    	}
    	if(CollectionUtil.isNotNullEmpty(evaluationDetail.getEvaluationAllergyInfos())){
    		allergyInfo = evaluationDetail.getEvaluationAllergyInfos();
    	}
		for(PulmonaryAllergyInfo pAllergyInfo : CollectionUtil.emptyIfNull(allergyInfo)){
			pAllergyInfo.setSeverityName(baseLVService.getDisplayText("ALLERGY_SEVERITY", pAllergyInfo.getSeverityId()));
			pAllergyInfo.setCategoryName(baseLVService.getDisplayText("ALLERGY_CATEGORY", pAllergyInfo.getAllergyCategoryId()));
			pAllergyInfo.setAllergyType(baseLVService.getDisplayText("ALLERGY_TYPE", pAllergyInfo.getAllergyTypeId()));
		}
		
		for(PulmonaryDiagnosisLog pDiagnosisLog :CollectionUtil.emptyIfNull(diagnosisLog)){
			pDiagnosisLog.setDiagnosisType(baseLVService.getDisplayText("DR_DIAGNOSIS_TYPE", pDiagnosisLog.getType()));
		}
		
		for(PulmonaryVitalInfo pvVitalInfo : CollectionUtil.emptyIfNull(vitalInfo)){
			if(pvVitalInfo.getBpLow() != null && pvVitalInfo.getBpLow() != 0 && pvVitalInfo.getBpHigh() != null && pvVitalInfo.getBpHigh() != 0){
				pvVitalInfo.setBp(pvVitalInfo.getBpLow().toString() + " / "+ pvVitalInfo.getBpHigh().toString());
			}
		}
		evalationReport.setServiceInfo(serviceInfo);
		parameters.put("diagnosisDS", diagnosisLog);
	    parameters.put("vitalDS", vitalInfo);
	    parameters.put("allergyDS", allergyInfo);
	    return evalationReport;
    }
    
    private PulmonaryEvalationReport  getEvaluationReport(PulmonaryEvalationReport evalationReport, PulmonaryEvaluation evaluationDetail) throws BaseException{
    	PulmonaryEvaluationDetail pulmonaryEvaluationDetail = null;
		for (PulmonaryEvaluationDetail detail : CollectionUtil.emptyIfNull(evaluationDetail.getEvaluationDetails())) {
			if (detail.isActiveRecord()) {
				pulmonaryEvaluationDetail = detail;
				break;
			}
		}
		evaluationDetails = new ArrayList<PulmonaryEvaluationDetail>();
		evaluationDetail.setEvaluationDetails(evaluationDetails);
		evaluationDetail.getEvaluationDetails().add(pulmonaryEvaluationDetail);
		 parameters.put("evalParam",Boolean.TRUE );
		 return evalationReport;
		
    }
    
    private PulmonaryEvalationReport  getCardioPulmonaryReport(PulmonaryEvalationReport evalationReport,Long pulmonaryServiceId) throws BaseException{
    	cardioPulmonary = cardioPulmonaryService.getActiveCardioPulmonary(pulmonaryServiceId);
    	evalationReport.setCardioPulmonary(cardioPulmonary);
    	 parameters.put("cardioParam",Boolean.TRUE );
    	 return evalationReport;
    }
    
    private PulmonaryEvalationReport  getNewAssessmentReport(PulmonaryEvalationReport evalationReport,Long pulmonaryServiceId) throws BaseException{
    	pulmonaryNewAssessment= newAssessmentService.getActiveNewAssessment(pulmonaryServiceId);
    	evalationReport.setNewAssessment(pulmonaryNewAssessment);
    	 parameters.put("newAssessParam",Boolean.TRUE );
    	 return evalationReport;
    }

    @AuthorizationNotRequired
    public String getCardioReport(){
		return SUCCESS;
    	
    }
   
    @Override
    public void setParameters(Map<String, String[]> parameters) {
        //Dummy method
    }

    public PulmonaryServiceInfo getServiceInfo() {
        return serviceInfo;
    }
    public void setServiceInfo(PulmonaryServiceInfo serviceInfo) {
        this.serviceInfo = serviceInfo;
    }
  /*  public PulmonaryEvaluation getEvaluationDetail() {
        return evaluationDetail;
    }
    public void setEvaluationDetail(PulmonaryEvaluation evaluationDetail) {
        this.evaluationDetail = evaluationDetail;
    }*/
    

	public Map<String, Object> getParameters() {
		return parameters;
	}


	public CardioPulmonary getCardioPulmonary() {
		return cardioPulmonary;
	}

	public void setCardioPulmonary(CardioPulmonary cardioPulmonary) {
		this.cardioPulmonary = cardioPulmonary;
	}

	public JRBeanCollectionDataSource getBeanColDataSource() {
		return beanColDataSource;
	}

	public void setBeanColDataSource(JRBeanCollectionDataSource beanColDataSource) {
		this.beanColDataSource = beanColDataSource;
	}

	public PulmonaryDiagnosisLog getPulmonaryDiagnosisLog() {
		return pulmonaryDiagnosisLog;
	}

	public void setPulmonaryDiagnosisLog(PulmonaryDiagnosisLog pulmonaryDiagnosisLog) {
		this.pulmonaryDiagnosisLog = pulmonaryDiagnosisLog;
	}

	public List<PulmonaryDiagnosisLog> getDiagnosisLog() {
		return diagnosisLog;
	}

	public void setDiagnosisLog(List<PulmonaryDiagnosisLog> diagnosisLog) {
		this.diagnosisLog = diagnosisLog;
	}

	public PulmonaryNewAssessment getPulmonaryNewAssessment() {
		return pulmonaryNewAssessment;
	}

    public void setPulmonaryNewAssessment(PulmonaryNewAssessment pulmonaryNewAssessment) {
		this.pulmonaryNewAssessment = pulmonaryNewAssessment;
	}

	public List<PulmonaryEvaluationDetail> getEvaluationDetails() {
		return evaluationDetails;
	}

	public void setEvaluationDetails(List<PulmonaryEvaluationDetail> evaluationDetails) {
		this.evaluationDetails = evaluationDetails;
	}


	public List<Map<String,?>> getFormsList() {
		return formsList;
	}


	public void setFormsList(List<Map<String,?>> formsList) {
		this.formsList = formsList;
	}
	
	 
}

This is my print jasper report result class.


 */
public class JasperReportResult extends JasperReportsResult {

	/**
	 * Serial Version UID
	 */
	private static final long serialVersionUID = 1L;
	
	private static final ILogger LOG = AppLogFactory.getLog(JasperReportResult.class);
	
	@Autowired
	private IATKPrintService printService;
	
	private String documentShortName;
	
	public String getDocumentShortName() {
		return documentShortName;
	}

	public void setDocumentShortName(String documentShortName) {
		this.documentShortName = documentShortName;
	}

	protected String preview;

	private void initializeProperties(ActionInvocation invocation) throws Exception {
		if (dataSource == null && connection == null) {
			String message = "No dataSource specified...";
			LOG.info(message);
			throw new RuntimeException(message);
		}
		if (dataSource != null) {
			dataSource = conditionalParse(dataSource, invocation);
		}
		
		format = conditionalParse(format, invocation);
		if (StringUtils.isEmpty(format)) {
			format = FORMAT_PDF;
		}

		if (contentDisposition != null) {
			contentDisposition = conditionalParse(contentDisposition, invocation);
		}

		if (documentName != null) {
			documentName = conditionalParse(documentName, invocation);
		}

		reportParameters = conditionalParse(reportParameters, invocation);
		exportParameters = conditionalParse(exportParameters, invocation);
	}

	@SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
	protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
		initializeProperties(invocation);

		if (LOG.isDebugEnabled()) {
			LOG.debug("Creating JasperReport for dataSource = " + dataSource + ", format = " + format);
		}

		HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(
				StrutsStatics.HTTP_REQUEST);
		HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(
				StrutsStatics.HTTP_RESPONSE);

		// Handle IE special case: it sends a "contype" request first.
		if ("contype".equals(request.getHeader("User-Agent"))) {
			try {
				response.setContentType("application/pdf");
				response.setContentLength(0);

				ServletOutputStream outputStream = response.getOutputStream();
				outputStream.close();
			} catch (IOException e) {
				LOG.error("Error writing report output", e);
				throw new ServletException(e);
			}
			return;
		}

		// Construct the data source for the report.
		ValueStack stack = invocation.getStack();
		ValueStackDataSource stackDataSource = null;

		Connection conn = (Connection) stack.findValue(connection);
		if (conn == null)
			stackDataSource = new ValueStackDataSource(stack, dataSource, true);

		// Determine the directory that the report file is in and set the
		// reportDirectory parameter
		// For WW 2.1.7:
		// ServletContext servletContext = ((ServletConfig)
		// invocation.getInvocationContext().get(ServletActionContext.SERVLET_CONFIG)).getServletContext();
		ServletContext servletContext = (ServletContext) invocation.getInvocationContext().get(
				StrutsStatics.SERVLET_CONTEXT);
		String systemId = servletContext.getRealPath(finalLocation);
		Map<String, Object> parameters = new ValueStackShadowMap(stack);
		File directory = new File(systemId.substring(0, systemId.lastIndexOf(File.separator)));
		parameters.put("reportDirectory", directory);
		parameters.put(JRParameter.REPORT_LOCALE, invocation.getInvocationContext().getLocale());

		// put timezone in jasper report parameter
		if (timeZone != null) {
			timeZone = conditionalParse(timeZone, invocation);
			final TimeZone tz = TimeZone.getTimeZone(timeZone);
			if (tz != null) {
				// put the report time zone
				parameters.put(JRParameter.REPORT_TIME_ZONE, tz);
			}
		}

		// Add any report parameters from action to param map.
		Map reportParams = (Map) stack.findValue(reportParameters);
		if (reportParams != null) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("Found report parameters; adding to parameters...");
			}
			parameters.putAll(reportParams);
		}

		byte[] output;
		JasperPrint jasperPrint;

		// Fill the report and produce a print object
		try {
			JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(systemId);
			if (conn == null) {
				jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, stackDataSource);
			} else {
				jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
			}
			removeBlankPage(jasperPrint.getPages());
		} catch (JRException e) {
			LOG.error("Error building report for uri " + systemId, e);
			throw new ServletException(e);
		}

		// Export the print object to the desired output format
		try {
			if (contentDisposition != null || documentName != null) {
				final StringBuilder tmp = new StringBuilder(128);
				tmp.append((contentDisposition == null) ? "inline" : contentDisposition);

				if (documentName != null) {
					tmp.append("; filename=");
					tmp.append(documentName);
					tmp.append(".");
					tmp.append(format.toLowerCase());
				}

				response.setHeader("Content-disposition", tmp.toString());
			}

			JRExporter exporter;

			if (format.equals(FORMAT_PDF)) {
				response.setContentType("application/pdf");
				exporter = new JRPdfExporter();			
				boolean encryptionReq = Boolean.valueOf(preview);
				if (encryptionReq) {
					exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE);
					exporter.setParameter(JRPdfExporterParameter.IS_128_BIT_KEY, Boolean.TRUE);
				}
			} else if (format.equals(FORMAT_CSV)) {
				response.setContentType("text/csv");
				exporter = new JRCsvExporter();
			} else if (format.equals(FORMAT_HTML)) {
				response.setContentType("text/html");

				// IMAGES_MAPS seems to be only supported as
				// "backward compatible" from JasperReports 1.1.0

				Map imagesMap = new HashMap();
				request.getSession(true).setAttribute("IMAGES_MAP", imagesMap);

				exporter = new JRHtmlExporter();
				exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
				exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + imageServletUrl);

				// Needed to support chart images:
				exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
				request.getSession().setAttribute("net.sf.jasperreports.j2ee.jasper_print", jasperPrint);
			} else if (format.equals(FORMAT_XLS)) {
				response.setContentType("application/vnd.ms-excel");
				exporter = new JRXlsExporter();
			} else if (format.equals(FORMAT_XML)) {
				response.setContentType("text/xml");
				exporter = new JRXmlExporter();
			} else if (format.equals(FORMAT_RTF)) {
				response.setContentType("application/rtf");
				exporter = new JRRtfExporter();
			} else if ("img".equals(format)) {
				/**
				 * Added By ATK - To support image export 
				 */
				int pageIndex = 0;
				BufferedImage pageImage = new BufferedImage(jasperPrint.getPageWidth() + 1,
						jasperPrint.getPageHeight() + 1, BufferedImage.TYPE_INT_RGB);
				exporter = new JRGraphics2DExporter();
				exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
				exporter.setParameter(JRGraphics2DExporterParameter.GRAPHICS_2D, pageImage.getGraphics());
				exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex));

				ServletOutputStream out = response.getOutputStream();
				exporter.exportReport();
				ImageIO.write(pageImage, "jpeg", out);
				out.close();
			} else {
				throw new ServletException("Unknown report format: " + format);
			}

			Map exportParams = (Map) stack.findValue(exportParameters);
			if (exportParams != null) {
				if (LOG.isDebugEnabled()) {
					LOG.debug("Found export parameters; adding to exporter parameters...");
				}
				exporter.getParameters().putAll(exportParams);
			}

			output = exportReportToBytes(jasperPrint, exporter);
		} catch (JRException e) {
			String message = "Error producing " + format + " report for uri " + systemId;
			LOG.error(message, e);
			throw new ServletException(e);
		}
		if (!"img".equals(format)) {
			response.setContentLength(output.length);
			DocumentPrinter documentPrinter = printService.getDocumentPrinter(documentShortName);
			if(documentPrinter!=null){
				documentPrinter.setDocName(documentShortName);
				if(documentPrinter.getPrintOption().equals(DocumentPrinter.CLIENT_OPTION)){
					addFileDownloadCookie(response);
					writeReport(response, output);
				}else if(documentPrinter.getPrintOption().equals(DocumentPrinter.BOTH_OPTION)){
					printService.print(output, documentPrinter);
					addFilePrintedCookie(response);
					addFileDownloadCookie(response);
					writeReport(response, output);
				}else{
					printService.print(output, documentPrinter);
					response.setHeader("Content-disposition", "");		
					response.setContentType("text/html");										
					addFilePrintedCookie(response);
					writeReport(response, new String("").getBytes());
				}	
			}else{
				addFileDownloadCookie(response);
				writeReport(response, output);				
			}
			
		}
	}
	
	private void removeBlankPage(List<JRPrintPage> pages) {
	      for (Iterator<JRPrintPage> i=pages.iterator(); i.hasNext();) {
	          JRPrintPage page = i.next();
	          if (CollectionUtil.isNullOrEmpty(page.getElements())) {
	              i.remove();
	          }
	      }
	  }
	
	private void addFileDownloadCookie(HttpServletResponse response){		
		Cookie fileDownload = new Cookie("fileDownload", "true");
		fileDownload.setPath("/");
		fileDownload.setMaxAge(2*60*60);
		response.addCookie(fileDownload);		
	}
	
	private void addFilePrintedCookie(HttpServletResponse response){		
		Cookie filePrinted = new Cookie("filePrinted", "true");
		filePrinted.setPath("/");
		filePrinted.setMaxAge(2*60*60);
		response.addCookie(filePrinted);		
	}

	/**
	 * Writes report bytes to response output stream.
	 * 
	 * @param response
	 *            Current response.
	 * @param output
	 *            Report bytes to write.
	 * @throws ServletException
	 *             on stream IOException.
	 */
	private void writeReport(HttpServletResponse response, byte[] output) throws ServletException {
		ServletOutputStream outputStream = null;
		try {
			outputStream = response.getOutputStream();
			outputStream.write(output);
			outputStream.flush();
		} catch (IOException e) {
			LOG.error("Error writing report output", e);
			throw new ServletException(e);
		} finally {
			try {
				if (outputStream != null) {
					outputStream.close();
				}
			} catch (IOException e) {
				LOG.error("Error closing report output stream", e);
				throw new ServletException(e);
			}
		}
	}

	private byte[] exportReportToBytes(JasperPrint jasperPrint, JRExporter exporter) throws JRException {
		byte[] output;
		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
		exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
		if (delimiter != null) {
			exporter.setParameter(JRCsvExporterParameter.FIELD_DELIMITER, delimiter);
		}

		exporter.exportReport();

		output = baos.toByteArray();

		return output;
	}

	public String getPreview() {
		return preview;
	}

	public void setPreview(String preview) {
		this.preview = preview;
	}
}



> ClassCastException while generating report using Struts 2.3.28 and jasperreports 4.5.1
> --------------------------------------------------------------------------------------
>
>                 Key: WW-4633
>                 URL: https://issues.apache.org/jira/browse/WW-4633
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Other
>    Affects Versions: 2.3.28
>            Reporter: Irfan
>
> Im getting Exception while generating report im using Struts 2.3.28 and jasperreports 4.5.1,
> 12:42:32,430 ERROR [com.atk.common.struts2.result.JasperReportResult] (http--0.0.0.0-8080-4) Error building report for uri D:\jboss-as-7.1.1.Final-MIG\standalone\tmp\vfs\temp9bbbed31d5b5c7fe\himma-pulmonary.war-d20a7b05840d8b89\reports\jasper\pulmonaryMainReport.jasper: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
>     Source text : $F{evalDs} != null
>     at net.sf.jasperreports.engine.fill.JREvaluator.evaluateEstimated(JREvaluator.java:267) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRCalculator.evaluateEstimated(JRCalculator.java:582) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:553) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRFillDataset.evaluateExpression(JRFillDataset.java:1387) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRBaseFiller.evaluateExpression(JRBaseFiller.java:1654) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRFillBand.evaluatePrintWhenExpression(JRFillBand.java:306) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:721) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:265) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:836) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:765) [jasperreports-4.5.1.jar:4.5.1]
>     at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84) [jasperreports-4.5.1.jar:4.5.1]
>     at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_80]
> Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to net.sf.jasperreports.engine.JRDataSource
>     at pulmonaryMainReport_subreport1_1462949725806_561776.evaluateEstimated(pulmonaryMainReport_subreport1_1462949725806_561776:530)    at net.sf.jasperreports.engine.fill.JREvaluator.evaluateEstimated(JREvaluator.java:254) [jasperreports-4.5.1.jar:4.5.1]



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)