Bug 211175 ClassCastException thrown when implementing IReportItemQuery
When implementing IReportItemQuery's method, public IDataQueryDefinition[] createReportQueries(IDataQueryDefinition parent) throws BirtException, even if the impl method returns IDataQueryDefinition[], ClassCastException will be thrown during preview, the error log is as follows: java.lang.ClassCastException: [Lorg.eclipse.birt.data.engine.api.IDataQueryDefinition; at org.eclipse.birt.report.engine.executor.ExtendedGenerateExecutor.generateContent(ExtendedGenerateExecutor.java:91) at org.eclipse.birt.report.engine.executor.ExtendedGenerateExecutor.execute(ExtendedGenerateExecutor.java:72) at org.eclipse.birt.report.engine.executor.ExtendedItemExecutor.execute(ExtendedItemExecutor.java:60) at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:42) If the method returns IBaseQueryDefinition[], it's ok. Look at the engine code, there's something wrong of class casting when generating content.
engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/executor/ExtendedGenerateExecutor.java
IDataEngine dataEngine = context.getDataEngine( );
		boolean useCache = extItem.useCachedResult( );
		IDataQueryDefinition[] queries = extItem.getQueries( );
		if ( queries != null )
		{
			IBaseResultSet parent = getParentResultSet( );
			rsets = new IBaseResultSet[queries.length];
			for ( int i = 0; i < rsets.length; i++ )
			{
				rsets[i] = dataEngine.execute( parent, queries[i], useCache );
			}
			context.setResultSets( rsets );
		}
	}
	protected void closeQueries( )
	{
		if ( rsets != null )
		{
			for ( int i = 0; i < rsets.length; i++ )
			{
				if ( rsets[i] != null )
				{
					rsets[i].close( );
				}
			}
		}
		rsets = null;
	}
}