diff --git a/src/main/java/org/apache/ibatis/binding/MapperMethod.java b/src/main/java/org/apache/ibatis/binding/MapperMethod.java index 6069c94c3c7..1dc76198598 100644 --- a/src/main/java/org/apache/ibatis/binding/MapperMethod.java +++ b/src/main/java/org/apache/ibatis/binding/MapperMethod.java @@ -167,10 +167,22 @@ private Object convertToDeclaredCollection(Configuration config, List lis } @SuppressWarnings("unchecked") - private E[] convertToArray(List list) { - E[] array = (E[]) Array.newInstance(method.getReturnType().getComponentType(), list.size()); - array = list.toArray(array); - return array; + private Object convertToArray(List list) { + + Class arrayComponentType = method.getReturnType().getComponentType(); + + Object array = Array.newInstance(arrayComponentType, list.size()); + Object value; + if (arrayComponentType.isPrimitive()) { + for (int i = 0; i < list.size(); i++) { + Array.set(array, i, list.get(i)); + } + value = array; + } else { + value = list.toArray((Object[])array); + } + + return value; } private Map executeForMap(SqlSession sqlSession, Object[] args) { diff --git a/src/test/java/org/apache/ibatis/submitted/array_result_type/ArrayResultTypeTest.java b/src/test/java/org/apache/ibatis/submitted/array_result_type/ArrayResultTypeTest.java index ad8d6e5fc95..3aaca21c6ce 100644 --- a/src/test/java/org/apache/ibatis/submitted/array_result_type/ArrayResultTypeTest.java +++ b/src/test/java/org/apache/ibatis/submitted/array_result_type/ArrayResultTypeTest.java @@ -88,12 +88,10 @@ public void shouldGetSimpleTypeArray() { } } - @Test(expected = ClassCastException.class) + @Test public void shouldGetPrimitiveArray() { SqlSession sqlSession = sqlSessionFactory.openSession(); try { - // Throwing an exception is the expected behavior - // until #555 is fixed Mapper mapper = sqlSession.getMapper(Mapper.class); int[] ids = mapper.getUserIdsPrimitive(); assertEquals(1, ids[0]);