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/presentation/LocalizedContentVisitor.java
info.setReportQueries( queries );
			info.setResolution( getChartResolution( ) );
			info.setExtendedItemContent( content );
			info.setSupportedImageFormats( getChartFormats( ) );
			info.setOutputFormat( getOutputFormat( ) );
			itemPresentation.init( info );
			Object rawValue = content.getRawValue( );
			if ( rawValue instanceof byte[] )
			{
				byte[] values = (byte[]) rawValue;
				itemPresentation
						.deserialize( new ByteArrayInputStream( values ) );
			}
			if ( queries == null )
			{
				DesignElementHandle elementHandle = design.getHandle( );
				if ( elementHandle instanceof ReportElementHandle )
				{
					queries = (IBaseQueryDefinition[]) context.getRunnable( )
							.getReportIR( ).getQueryByReportHandle(
									(ReportElementHandle) elementHandle );
				}
			}
			IBaseResultSet[] rsets = context.getResultSets();
			IBaseResultSet[] resultSets = null;
			if ( queries == null )
			{
				if ( rsets != null )
				{
					resultSets = new IBaseResultSet[1];