You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Clinton Begin (JIRA)" <ib...@incubator.apache.org> on 2008/03/22 03:39:24 UTC
[jira] Closed: (IBATIS-456) ClassCastException when mapping
primitive arrays due to attempts to cast to object arrays made by iBatis
[ https://issues.apache.org/jira/browse/IBATIS-456?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Clinton Begin closed IBATIS-456.
--------------------------------
Resolution: Fixed
Fix Version/s: 2.3.1
> 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
> Fix For: 2.3.1
>
>
> 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 n.beekman@wis.nl:
> 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.