package net.ttddyy.dsproxy.proxy.jdk; import net.ttddyy.dsproxy.proxy.ProxyJdbcObject; import net.ttddyy.dsproxy.proxy.ResultSetProxyLogic; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.*; import static java.lang.String.format; import static java.util.Arrays.stream; /** * Proxy InvocationHandler for {@link java.sql.ResultSet}. * * @author Liam Williams * @since 1.4 */ public class ResultSetInvocationHandler implements InvocationHandler { private final ResultSetProxyLogic delegate; public ResultSetInvocationHandler(ResultSetProxyLogic delegate) { this.delegate = delegate; } public static ResultSet proxy(ResultSet target) throws SQLException { ResultSetInvocationHandler resultSetProxy = new ResultSetInvocationHandler(ResultSetProxyLogic.resultSetProxyLogic(target)); return (ResultSet) Proxy.newProxyInstance(ProxyJdbcObject.class.getClassLoader(), new Class<?>[]{ProxyJdbcObject.class, ResultSet.class}, resultSetProxy); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return delegate.invoke(method, args); } }