Community
Participate
Working Groups
Build Identifier: M20110909-1335 I have a complex report with several JDBC datasets and one scripted dataset. When I try to open the preview in the Designer, it shows an error (in red) at the end of the (incomplete) output: The following items have errors: List LayoutbloeckeList: - There is an error in saving files of data set cache. org.eclipse.birt.report.engine.executor.ApplicationClassLoader (Element ID:970) data.engine.datasetcache.save.error ( 2 time(s) ) detail : org.eclipse.birt.report.engine.api.EngineException: There is an error in saving files of data set cache. org.eclipse.birt.report.engine.executor.ApplicationClassLoader (Element ID:970) at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1214) at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1193) at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:96) ... caused by: Caused by: java.io.NotSerializableException: org.eclipse.birt.report.engine.executor.ApplicationClassLoader ... The source for the scripted DS is: open: BerichtResultateHelper.blockInfoI = 0; fetch: if (BerichtResultateHelper.blockInfoI < BerichtResultateHelper.blockInfoL.length) { var block_key = BerichtResultateHelper.blockInfoL[BerichtResultateHelper.blockInfoI]; var info = BerichtResultateHelper.blockInfoM[block_key]; row["BLOCK_KEY"] = info.BLOCK_KEY; row["BLOCK_UEBERSCHRIFT_TEXT"] = info.BLOCK_UEBERSCHRIFT_TEXT; row["LAYOUT"] = info.LAYOUT; row["TEILPROBE"] = info.TEILPROBE; row["TEILPROBENBEZ1_TEXT"] = info.TEILPROBENBEZ1_TEXT; row["TEILPROBENBEZ2_TEXT"] = info.TEILPROBENBEZ2_TEXT; row["TEILPROBENBEZ3_TEXT"] = info.TEILPROBENBEZ3_TEXT; BerichtResultateHelper.blockInfoI++; return true; } return false; The other events are not used. The same report works fine with BIRT 2.6.2 ! Reproducible: Always
More Info: My observations were not quite correct. The scripted dataset contains a column "SpaltenInfo" of type "Java Object". In the onFetch event, there is a line: var info = ...; // info is assigned a Javascript object of the (user-defined) type Map, // which is just an ordinary object with a more useful toString method. row["SpaltenInfo"] = info; As a workaround, I replaced my Javascript Map object with an java.util.HashMap and changed the code in other places of the report where I access keys/values correspondingly; e.g. I replaced row["SpaltenInfo"]["someKey"] with row["SpaltenInfo"].get("someKey") After this change, the report worked. So the reason for the error seems to be that I used a JavaScript object for a column value.