Skip to Content
0
Former Member
Apr 10, 2007 at 10:38 PM

null pointer exception on any report with parameters

133 Views

Hello! <br /><br />I&#39;m having some problems viewing reports that have parameters: the report viewer throws a null pointer exception, and since it&#39;s not my code that&#39;s doing it, I can&#39;t even view the stack trace. Everything was fine when I had the code to generate the viewer and the report source inside of a servlet, but when I moved it to a POJO, this thing started. I can view every report, regardless of whether or not it has data saved in it, except the ones that have parameter fields.<br /><br />Could anyone help me out w/ this and let me know what the problem is and what I can do to fix it? I don&#39;t understand why it would work when everything was done within a servelt and this happens as soon as I move it to a pojo.<br /><br />Thanks so much!<br /><br />Here&#39;s the code for the pojo:<br /><br />

<br />/*<br /> * ReportViewerFactory.java<br /> *<br /> * Created on March 30, 2007, 10:06 AM<br /> */<br /><br />package com.ruffalocody.reports;<br /><br />import com.crystaldecisions.sdk.occa.report.lib.ReportSDKExceptionBase;<br />// CR View:<br />import com.crystaldecisions.report.web.viewer.*;<br />import com.crystaldecisions.sdk.occa.report.reportsource.IReportSource;<br />// CR Export:<br />import com.crystaldecisions.report.web.viewer.ReportExportControl;<br />import com.crystaldecisions.sdk.occa.report.exportoptions.ExportOptions;<br />import com.crystaldecisions.sdk.occa.report.exportoptions.IPDFExportFormatOptions;<br />import com.crystaldecisions.sdk.occa.report.exportoptions.PDFExportFormatOptions;<br />import com.crystaldecisions.sdk.occa.report.exportoptions.ReportExportFormat;<br />import com.crystaldecisions.sdk.occa.report.exportoptions.RTFWordExportFormatOptions;<br /><br />import java.sql.*;<br /><br />/**<br /> * Creates a report viewer, weather for viewing or exporting purposes.<br /> *<br /> * @author aerohner<br /> */<br />public class ReportViewerFactory<br />{<br />    private ReportServerControl rptViewer;<br />        /** Creates a new instance of ReportViewerFactory */<br />    public ReportViewerFactory(ReportRequest rptReq)<br />	throws ReportSDKExceptionBase<br />    {<br />		IReportSource rptSrc = rptReq.getReportSource();<br /><br />		if (rptReq.getRequestedAction() == ReportRequest.VIEW)<br />			rptViewer = createViewer(rptReq);<br /><br />		else if(rptReq.getRequestedAction() == ReportRequest.EXPORT)<br />			rptViewer = createExporter(rptReq);<br /><br />    }// end constructor ReportViewerFactory()<br />        private ReportServerControl createViewer(ReportRequest rptReq) <br />	throws ReportSDKExceptionBase<br />    {<br />		ReportServerControl viewer = new CrystalReportViewer();<br /><br />		viewer.setOwnPage(true);<br />		viewer.setOwnForm(true);<br /><br />		viewer.setReportSource(rptReq.getReportSource());<br /><br />		return viewer;<br /><br />    }// end createViewer(.)<br />        private ReportServerControl createExporter(ReportRequest rptReq) <br />	throws ReportSDKExceptionBase<br />    {<br />		// getting values out of rptReq<br />		int exportFormatInt = rptReq.getExportFormat();<br />		int start = rptReq.getPageStart();<br />		int end = rptReq.getPageEnd();<br /><br />		ReportExportControl rptExportControl = new ReportExportControl();<br />		ExportOptions exportOptions = new ExportOptions();<br /><br />		ReportExportFormat expFormat = <br />			ReportExportFormat.from_int(rptReq.getExportFormat());<br /><br />		// if user requested to export a specified range of pages.<br />		if(!rptReq.getExportAllPages())<br />		{<br />			// TODO check if range is valid<br /><br />			if(exportFormatInt == ReportExportFormat._RTF ||<br />				exportFormatInt == ReportExportFormat._MSWord)<br />			{<br />			RTFWordExportFormatOptions rtfFormatOpts = <br />				new RTFWordExportFormatOptions();<br /><br />			rtfFormatOpts.setStartPageNumber(start);<br />			rtfFormatOpts.setEndPageNumber(end);<br /><br />			exportOptions.setFormatOptions(rtfFormatOpts);<br />			}// end if rtf<br />			else if (exportFormatInt == ReportExportFormat._PDF)<br />			{<br />			IPDFExportFormatOptions pdfFormatOpts = <br />				new PDFExportFormatOptions();<br />			pdfFormatOpts.setStartPageNumber(start);<br />			pdfFormatOpts.setEndPageNumber(end);<br /><br />			exportOptions.setFormatOptions(pdfFormatOpts);<br />			}// end else if pdf<br />		}// end if range of pages<br /><br />		rptExportControl.setReportSource(rptReq.getReportSource());<br /><br />		exportOptions.setExportFormatType(expFormat);<br /><br />		rptExportControl.setExportOptions(exportOptions);<br />		rptExportControl.setExportAsAttachment(true);	<br /><br />		return rptExportControl;<br /><br />    }// end createExporter(.)<br />        public ReportServerControl getReportViewer()<br />    {<br />		return rptViewer;<br />    }// end getReportViewer()<br /><br />    public void setReportViewer(ReportServerControl rptViewer)<br />    {<br />		this.rptViewer = rptViewer;<br />    }// end setReportViewer(.)<br />    }// end ReportViewerFactory<br />

<br /><br />Then the ReportServlet that initiates this class gets the viewer from this class and the report source, sets them as session attributes and does a request dispatcher forward to view jsp.<br /><br />view.jsp just does the following:<br /><br />

<br /><%<br />	ReportServerControl viewer = (ReportServerControl)<br />	    request.getSession(false).getAttribute("viewer");<br />	IReportSource rptSrc = (IReportSource)request.getSession(true).getAttribute("reportSource");<br />		if (viewer != null)<br />	{<br />	    viewer.processHttpRequest(request,response, <br />		getServletConfig().getServletContext(),null);<br />		    if(!(viewer instanceof CrystalReportViewer))<br />	    {<br />		// trying to avoid "report source expired"<br />		// error when viewing the next page of report<br />		viewer.dispose();<br />	    }<br />	}// end if viewer null<br />	else<br />	{<br />	    RequestDispatcher rd = request.getRequestDispatcher("errorPage");<br />	    request.setAttribute("errorMsg", "view.jsp: viewer is null");<br />	    rd.forward(request, response);<br />	}// end else viewer not null<br />    %><br />

<br /><br /><br />