ClassCastException when mapping primitive arrays due to attempts to cast to object arrays made by iBatis --------------------------------------------------------------------------------------------------------
Key: IBATIS-456 URL: https://issues.apache.org/jira/browse/IBATIS-456 Project: iBatis for Java Issue Type: Bug Components: SQL Maps Affects Versions: 2.3.0 Reporter: Jonathan Alvarsson Priority: Blocker When mapping an array of primitives (at least doubles) iBatis when injecting the array seems to try to cast it to an array of objects which results in something like this: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; --- The error occurred in mapping/MoleculeDescriptor.xml. --- The error occurred while applying a result map. --- Check the MoleculeDescriptor. --- Check the result mapping for the 'values' property. --- Cause: java.lang.ClassCastException: [D; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred in mapping/MoleculeDescriptor.xml. --- The error occurred while applying a result map. --- Check the MoleculeDescriptor. --- Check the result mapping for the 'values' property. --- Cause: java.lang.ClassCastException: [D Caused by: com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred in mapping/MoleculeDescriptor.xml. --- The error occurred while applying a result map. --- Check the MoleculeDescriptor. --- Check the result mapping for the 'values' property. --- Cause: java.lang.ClassCastException: [D at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:188) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:615) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589) at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118) [snipp....] Caused by: java.lang.ClassCastException: [D at com.ibatis.sqlmap.engine.mapping.result.loader.ResultLoader.listToArray(ResultLoader.java:85) at com.ibatis.sqlmap.engine.mapping.result.loader.ResultLoader.getResult(ResultLoader.java:75) at com.ibatis.sqlmap.engine.mapping.result.loader.ResultLoader.loadResult(ResultLoader.java:59) at com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getNestedSelectMappingValue(BasicResultMap.java:502) at com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getResults(BasicResultMap.java:340) at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:381) at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults(SqlExecutor.java:301) at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:190) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173) ... 46 more Following fix suggested by [EMAIL PROTECTED]: ResultLoader.java: private static Object listToArray(List list, Class type) { Object array = java.lang.reflect.Array.newInstance(type, list.size()); if (type.isPrimitive()) { Iterator iter = list.iterator(); int index = 0; while (iter.hasNext()) { Array.set(array, index++, iter.next()); } } else { array = list.toArray((Object[]) array); } return array; } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.