[
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 [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.