Bug 208927 AggregateTable.<init> using runtime 2.2.1 - jdk 1.4.2
Hi, I am trying to put together the BIRT Runtime Release Build 2.2.1 with Java 1.4.2 JDK/JRE. When using a dataset obtained from a stored procedure I'm receiving the following error: Nov 6, 2007 4:11:25 PM org.eclipse.birt.data.engine.impl.PreparedQuery PreparedQuery FINE: PreparedQuery starts up. Nov 6, 2007 4:11:25 PM org.eclipse.birt.report.engine.api.impl.RunAndRenderTask doRun SEVERE: An error happened while running the report. Cause: java.lang.NullPointerException at java.util.logging.Logger.entering(Logger.java:859) at org.eclipse.birt.data.engine.impl.aggregation.AggregateTable.<init>(AggregateTable.java:46) at org.eclipse.birt.data.engine.impl.aggregation.AggregateTable.<init>(AggregateTable.java:60) at org.eclipse.birt.data.engine.impl.PreparedQuery.<init>(PreparedQuery.java:115) at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.<init>(PreparedDataSourceQuery.java:75) at org.eclipse.birt.data.engine.impl.PreparedOdaDSQuery.<init>(PreparedOdaDSQuery.java:61) at org.eclipse.birt.data.engine.impl.PreparedQueryUtil.newInstance(PreparedQueryUtil.java:125) at org.eclipse.birt.data.engine.impl.DataEngineImpl.prepare(DataEngineImpl.java:396) at org.eclipse.birt.report.data.adapter.impl.DataRequestSessionImpl.prepare(DataRequestSessionImpl.java:305) at org.eclipse.birt.report.data.adapter.impl.DataRequestSessionImpl.prepare(DataRequestSessionImpl.java:464) at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doPrepareQuery(DteDataEngine.java:100) at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.prepare(AbstractDataEngine.java:138) at org.eclipse.birt.report.engine.executor.ReportExecutor.execute(ReportExecutor.java:94) at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportExecutor.execute(WrappedReportExecutor.java:59) at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplciateReportExecutor.execute(SuppressDuplciateReportExecutor.java:51) at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportExecutor.execute(WrappedReportExecutor.java:59) at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:138) at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:68) at reports.actions.DynamicReport.doGet(DynamicReport.java:175) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65) at oracle.security.jazn.oc4j.JAZNFilter.doFilter(Unknown Source) at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:649) at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:322) at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790) at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:270) at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:112) at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192) at java.lang.Thread.run(Thread.java:534) The error appears in package org.eclipse.birt.data.engine.impl.aggregation, class AggregateTable, default constructor, when trying to make an entry log, with a null third parameter. logger.entering( AggregateTable.class.getName( ), "AggregateTable", null ); The last param of the entering method (,, Object[] params) in jdk 1.4 is not tested for null values, and so gives the above mentioned result. In jdk 1.5 the problem doesn't appear since java.util.Logger.entering verifies the Object[] params for null values. Simply removing the last parameter solves the problem. Keep up the good work, Adrian Cioclei
data/org.eclipse.birt.data/src/org/eclipse/birt/data/engine/impl/aggregation/AggregateTable.java
* Returns an implementation of the AggregateRegistry interface used by
	 * ExpressionCompiler, to register aggregate expressions at the specified
	 * grouping level
	 * 
	 * @param groupLevel
	 * @param afterGroup
	 * @param cx
	 * @return
	 * @throws DataException 
	 */
	public AggregateRegistry getAggrRegistry( int groupLevel, int calculationLevel,
			boolean isDetailedRow, Context cx ) throws DataException
	{
		AggrRegistry aggrRegistry = new AggrRegistry( groupLevel,
				calculationLevel,
				isDetailedRow,
				cx );
		aggrRegistry.prepare( groupDefns, scope, baseQuery, aggrExprInfoList );
		return aggrRegistry;
	}
	
	
	private AggregateCalculator currentCalculator;
	/**
	 * @param odiResult
	 * @param scope
	 * @throws DataException
	 */
	public void calculate( IResultIterator odiResult, Scriptable scope )
			throws DataException