cancel
Showing results for 
Search instead for 
Did you mean: 

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

Former Member
0 Kudos
296

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>

Accepted Solutions (1)

Accepted Solutions (1)

Former Member

Refer to SAP Note: 1722473 - Viewer throws Null Pointer Exception in BI 4.0

Former Member
0 Kudos

Thanks.  That solved the problem.

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi Jason,

Call any one of the methods

viewer.dispose(); or clientDoc.close();

Do not use both in BI 4.x version.

Test the same and let me know if it works.

Thanks,

Prithvi