I am testing BOE 4.0 with a simple jsp based on the samples. The code is what I used to test BOE xi 3.1. But I ran into some report display inconsistencies with 3.1 so I am trying 4.0. The code below works in 3.1 But in 4.0, I get the report viewer screen coming up but get a null pointer exception coming to the screen.
2014-06-18 13:48:01
java.lang.NullPointerException
at com.crystaldecisions.sdk.occa.report.application.ControllerBase.checkViewReportRight(ControllerBase.java:114)
at com.crystaldecisions.sdk.occa.report.application.ReportSource.getPage(ReportSource.java:945)
at com.crystaldecisions.sdk.occa.report.application.AdvancedReportSource.getPage(AdvancedReportSource.java:343)
at com.businessobjects.report.web.event.PageListener.renderContentLocally(PageListener.java:394)
at com.businessobjects.report.web.event.PageListener.getPage(PageListener.java:181)
at com.businessobjects.report.web.event.PageListener.updatePage(PageListener.java:123)
at com.businessobjects.report.web.event.UpdatePageEvent.processListener(UpdatePageEvent.java:47)
at com.businessobjects.report.web.event.ViewerBroadcaster.broadcast(ViewerBroadcaster.java:109)
at com.businessobjects.report.web.event.EventQueue.processEvents(EventQueue.java:53)
at com.businessobjects.report.web.component.ViewerContainer.processEvents(ViewerContainer.java:1403)
at com.businessobjects.report.web.WorkflowController.doEventProcessing(WorkflowController.java:353)
at com.businessobjects.report.web.WorkflowController.doLifecycle(WorkflowController.java:255)
at com.businessobjects.report.web.WorkflowController.doAsyncLifecycle(WorkflowController.java:106)
at com.crystaldecisions.report.web.viewer.CrystalReportViewerUpdater._processHttpRequest(CrystalReportViewerUpdater.java:61)
at com.crystaldecisions.report.web.ServerControl.processHttpRequest(ServerControl.java:345)
at com.crystaldecisions.report.web.viewer.CrystalReportViewerServlet.doUpdate(CrystalReportViewerServlet.java:156)
at com.crystaldecisions.report.web.viewer.CrystalReportViewerServlet.doPost(CrystalReportViewerServlet.java:144)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
Here is the AlwaysRequiredSteps_UnmanagedRas.jsp
<%
String path = "rassdk://C:\\reports\\asn.rpt";
ReportAppSession ra = new ReportAppSession();
ra.createService("com.crystaldecisions.sdk.occa.report.application.ReportClientDocument");
ra.setReportAppServer("10.189.15.175:1566");
ra.initialize();
ReportClientDocument clientDoc = new ReportClientDocument();
clientDoc.setReportAppServer(ra.getReportAppServer());
clientDoc.open(path, OpenReportOptions._openAsReadOnly);
%>
Here is the OpenReport.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@
page import="com.crystaldecisions.sdk.occa.report.application.*,
com.crystaldecisions.sdk.occa.report.data.*,
com.crystaldecisions.sdk.occa.report.lib.*,
com.crystaldecisions.report.web.viewer.*,
com.crystaldecisions.sdk.occa.report.definition.*"
%>
<html>
<head>
<title>Preview Report</title>
</head>
<body>
<%@ include file="AlwaysRequiredSteps_UnmanagedRAS.jsp"%>
<%
Tables oTablesCollection = clientDoc.getDatabaseController().getDatabase().getTables();
for(int i = 0; i < oTablesCollection.size(); i++) {
// We'll get two copies of the original table, change one, and use set table.
ITable originalTable = oTablesCollection.getTable(i);
ITable changedTable = oTablesCollection.getTable(i);
IConnectionInfo newConnectionInfo = new ConnectionInfo();
PropertyBag attributes = new PropertyBag();
attributes.putBooleanValue(PropertyBagHelper.CONNINFO_SSO_ENABLED, false);
attributes.putStringValue(PropertyBagHelper.CONNINFO_CRQE_DATABASETYPE, "JDBC (JNDI)");
attributes.putStringValue(PropertyBagHelper.CONNINFO_DATABASE_DLL, "crdb_jdbc.dll");
attributes.putStringValue(PropertyBagHelper.CONNINFO_CRQE_DATABASENAME, "");
attributes.putBooleanValue(PropertyBagHelper.CONNINFO_CRQE_SQLDB, true);
PropertyBag logonProperties = new PropertyBag();
logonProperties.putStringValue("JDBC Connection String", "!oracle.jdbc.driver.OracleDriver!jdbc:oracle:thin:{userid}/{password}@10.189.12.248:1521:gbg");
logonProperties.putBooleanValue("Trusted_Connection", false);
logonProperties.putBooleanValue("Use JDBC", true);
logonProperties.putStringValue("Database Class Name", "oracle.jdbc.driver.OracleDriver");
logonProperties.putStringValue("Connection URL", "jdbc:oracle:thin:@10.189.12.248:1521:gbg");
logonProperties.putStringValue("Server", "10.189.12.248");
attributes.put(PropertyBagHelper.CONNINFO_CRQE_LOGONPROPERTIES, logonProperties);
attributes.putStringValue("QE_ServerDescription", "10.189.12.248");
newConnectionInfo.setKind(ConnectionInfoKind.CRQE);
newConnectionInfo.setUserName("dsdone");
newConnectionInfo.setPassword("dbuser");
newConnectionInfo.setAttributes(attributes);
changedTable.setQualifiedName("DSDONE" + "." + changedTable.getName());
changedTable.setConnectionInfo(newConnectionInfo);
// Commit the changes by calling the setTableLocation method from
// the Database controller with the new table
clientDoc.getDatabaseController().setTableLocation(originalTable, changedTable);
}
// Create a Viewer object
CrystalReportViewer viewer = new CrystalReportViewer();
// Set the name for the viewer
viewer.setName("Crystal_Report_Viewer");
// Set the report source for the viewer to the ReportClientDocument's report source
viewer.setReportSource(clientDoc.getReportSource());
// Process the http request to view the report
viewer.processHttpRequest(request, response, getServletConfig().getServletContext(), out);
// Dispose of the viewer object
viewer.dispose();
// Release the memory used by the report
clientDoc.close();
%>
</body>
</html>