cbegin
Tue, 19 Jan 2010 19:33:50 -0800
Author: cbegin Date: Wed Jan 20 03:33:22 2010 New Revision: 901043 URL: http://svn.apache.org/viewvc?rev=901043&view=rev Log: fixed NPE on null primitives Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperProxy.java Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperProxy.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperProxy.java?rev=901043&r1=901042&r2=901043&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperProxy.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperProxy.java Wed Jan 20 03:33:22 2010 @@ -5,17 +5,42 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; +import java.sql.SQLException; +import java.util.HashSet; +import java.util.Set; public class MapperProxy implements InvocationHandler { + private static final Set<String> OBJECT_METHODS = new HashSet<String>() {{ + add("toString"); + add("getClass"); + add("hashCode"); + add("equals"); + add("wait"); + add("notify"); + add("notifyAll"); + }}; + private SqlSession sqlSession; private <T> MapperProxy(SqlSession sqlSession) { this.sqlSession = sqlSession; } - + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - return new MapperMethod(method, sqlSession).execute(args); + try { + if (!OBJECT_METHODS.contains(method.getName())) { + final MapperMethod mapperMethod = new MapperMethod(method, sqlSession); + final Object result = mapperMethod.execute(args); + if (result == null && method.getReturnType().isPrimitive()) { + throw new BindingException("Mapper method '"+ method.getName()+"' ("+method.getDeclaringClass()+") attempted to return null from a method with a primitive return type ("+method.getReturnType()+")."); + } + return result; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return null; } public static <T> T newMapperProxy(Class<T> mapperInterface, SqlSession sqlSession) {