diff --git a/src/main/java/net/ttddyy/dsproxy/proxy/StatementProxyLogic.java b/src/main/java/net/ttddyy/dsproxy/proxy/StatementProxyLogic.java index 881345e2..aa000994 100644 --- a/src/main/java/net/ttddyy/dsproxy/proxy/StatementProxyLogic.java +++ b/src/main/java/net/ttddyy/dsproxy/proxy/StatementProxyLogic.java @@ -293,7 +293,7 @@ protected Object performProxyLogic(Object proxy, Method method, Object[] args, M final boolean isResultSetReturningMethod = !isGetGeneratedKeysMethod && METHODS_TO_RETURN_RESULTSET.contains(methodName); final boolean isCreateGeneratedKeysProxy = isGetGeneratedKeysMethod && this.proxyConfig.isGeneratedKeysProxyEnabled(); - final boolean isCreateResultSetProxy = isResultSetReturningMethod && this.proxyConfig.isResultSetProxyEnabled(); + final boolean isCreateResultSetProxy = (retVal != null && isResultSetReturningMethod && this.proxyConfig.isResultSetProxyEnabled()); // create proxy for returned ResultSet if (isCreateGeneratedKeysProxy) { diff --git a/src/main/java/net/ttddyy/dsproxy/proxy/jdk/JdkJdbcProxyFactory.java b/src/main/java/net/ttddyy/dsproxy/proxy/jdk/JdkJdbcProxyFactory.java index 717b1dc0..e50cf541 100644 --- a/src/main/java/net/ttddyy/dsproxy/proxy/jdk/JdkJdbcProxyFactory.java +++ b/src/main/java/net/ttddyy/dsproxy/proxy/jdk/JdkJdbcProxyFactory.java @@ -8,7 +8,11 @@ import javax.sql.DataSource; import java.lang.reflect.Proxy; -import java.sql.*; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; /** * Dynamic Proxy Class(Jdk Proxy) based {@link net.ttddyy.dsproxy.proxy.JdbcProxyFactory} implementation. diff --git a/src/test/java/net/ttddyy/dsproxy/proxy/StatementProxyLogicMockTest.java b/src/test/java/net/ttddyy/dsproxy/proxy/StatementProxyLogicMockTest.java index 9ecf530f..1d54b68f 100644 --- a/src/test/java/net/ttddyy/dsproxy/proxy/StatementProxyLogicMockTest.java +++ b/src/test/java/net/ttddyy/dsproxy/proxy/StatementProxyLogicMockTest.java @@ -808,7 +808,6 @@ public void testEquals() throws Throwable { @Test public void proxyResultSet() throws Throwable { - final AtomicReference listenerReceivedResult = new AtomicReference(); QueryExecutionListener listener = new NoOpQueryExecutionListener() { @Override @@ -817,13 +816,11 @@ public void afterQuery(ExecutionInfo execInfo, List queryInfoList) { } }; - ResultSetMetaData metaData = mock(ResultSetMetaData.class); ResultSet resultSet = mock(ResultSet.class); when(resultSet.getMetaData()).thenReturn(metaData); - Statement stmt = mock(Statement.class); when(stmt.executeQuery(anyString())).thenReturn(resultSet); when(stmt.getGeneratedKeys()).thenReturn(resultSet); @@ -859,8 +856,18 @@ public void afterQuery(ExecutionInfo execInfo, List queryInfoList) { result = logic.invoke(null, getGeneratedKeysMethod, null); assertThat(result).isInstanceOf(ResultSet.class); assertFalse(Proxy.isProxyClass(result.getClass())); + } + @Test + public void resultSetIsNull() throws Throwable { + Statement stmt = mock(Statement.class); + when(stmt.getResultSet()).thenReturn(null); + Method getResultSetMethod = Statement.class.getMethod("getResultSet"); + StatementProxyLogic logic = getProxyLogic(stmt, null, null, true, false); + Object result = logic.invoke(null, getResultSetMethod, null); + + assertThat(result).isNull(); } @Test