Skip to Content
0
Former Member
Jun 18, 2014 at 05:59 PM

null pointer exception in com.crystaldecisions.sdk.occa.report.application.ControllerBase.checkViewReportRight

248 Views

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>