You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ni...@apache.org on 2007/05/20 17:49:33 UTC

svn commit: r539889 - in /jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils: DynaResultSetTestCase.java DynaRowSetTestCase.java TestResultSet.java TestResultSetMetaData.java

Author: niallp
Date: Sun May 20 08:49:32 2007
New Revision: 539889

URL: http://svn.apache.org/viewvc?view=rev&rev=539889
Log:
Fix for BEANUTILS-243 - BeanUtils fails to compile under 1.6 - thanks to Henri Yandell

Changes in the ResultSet and ResultSetMetaData for JDK 1.6 meant that BeanUtils tests no longer compiled. However implementing the methods would prevent it from compiling under earlier JDK versions. To resolve this the mock implementations have been converted to implement InvocationHandler (rather than ResultSet/ResultSetMetaData) and factory methods provided to create proxies. This tests now compile and run successfully (tests on JDK 1.3.1_18, JDK 1.5.0_07 and JDK 1.6.0

Modified:
    jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaResultSetTestCase.java
    jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaRowSetTestCase.java
    jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSet.java
    jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSetMetaData.java

Modified: jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaResultSetTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaResultSetTestCase.java?view=diff&rev=539889&r1=539888&r2=539889
==============================================================================
--- jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaResultSetTestCase.java (original)
+++ jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaResultSetTestCase.java Sun May 20 08:49:32 2007
@@ -83,7 +83,7 @@
      */
     public void setUp() throws Exception {
 
-        dynaClass = new ResultSetDynaClass(new TestResultSet());
+        dynaClass = new ResultSetDynaClass(TestResultSet.createProxy());
 
     }
 

Modified: jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaRowSetTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaRowSetTestCase.java?view=diff&rev=539889&r1=539888&r2=539889
==============================================================================
--- jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaRowSetTestCase.java (original)
+++ jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/DynaRowSetTestCase.java Sun May 20 08:49:32 2007
@@ -83,7 +83,7 @@
      */
     public void setUp() throws Exception {
 
-        dynaClass = new RowSetDynaClass(new TestResultSet());
+        dynaClass = new RowSetDynaClass(TestResultSet.createProxy());
 
     }
 
@@ -234,7 +234,7 @@
     public void testLimitedRows() throws Exception {
         
         // created one with low limit
-        RowSetDynaClass limitedDynaClass = new RowSetDynaClass(new TestResultSet(), 3);
+        RowSetDynaClass limitedDynaClass = new RowSetDynaClass(TestResultSet.createProxy(), 3);
         List rows = limitedDynaClass.getRows();
         assertNotNull("list exists", rows);
         assertEquals("limited row count", 3, rows.size());

Modified: jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSet.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSet.java?view=diff&rev=539889&r1=539888&r2=539889
==============================================================================
--- jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSet.java (original)
+++ jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSet.java Sun May 20 08:49:32 2007
@@ -21,6 +21,9 @@
 
 import java.io.InputStream;
 import java.io.Reader;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
 import java.math.BigDecimal;
 import java.net.URL;
 import java.sql.Array;
@@ -47,7 +50,7 @@
  * @version $Revision$ $Date$
  */
 
-public class TestResultSet implements ResultSet {
+public class TestResultSet implements InvocationHandler {
 
 
     // ----------------------------------------------------- Instance Variables
@@ -65,6 +68,46 @@
     protected long timestamp = System.currentTimeMillis();
 
 
+    /**
+     * Factory method for creating {@link ResultSet} proxies.
+     *
+     * @return A result set proxy
+     */
+    public static ResultSet createProxy() {
+        ClassLoader classLoader = ResultSet.class.getClassLoader();
+        Class[] interfaces = new Class[] { ResultSet.class };
+        InvocationHandler invocationHandler = new TestResultSet();
+        return (ResultSet)Proxy.newProxyInstance(classLoader, interfaces, invocationHandler);
+    }
+
+    /**
+     * Handles method invocation on the ResultSet proxy. 
+     *
+     * @param proxy The proxy ResultSet object
+     * @param method the method being invoked
+     * @param args The method arguments
+     * @return The result of invoking the method.
+     * @throws Throwable if an error occurs.
+     */
+    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+        String methodName = method.getName();
+        if ("close".equals(methodName)) {
+            return null;
+        } if ("getMetaData".equals(methodName)) {
+            return getMetaData();
+        } if ("getObject".equals(methodName)) {
+            return getObject((String)args[0]);
+        } if ("next".equals(methodName)) {
+            return (next() ? Boolean.TRUE : Boolean.FALSE);
+        } if ("updateObject".equals(methodName)) {
+            updateObject((String)args[0], args[1]);
+            return null;
+        }
+        
+        throw new UnsupportedOperationException(methodName + " not implemented");
+    }
+
+
     // ---------------------------------------------------- Implemented Methods
 
 
@@ -74,7 +117,7 @@
 
 
     public ResultSetMetaData getMetaData() throws SQLException {
-        return (new TestResultSetMetaData());
+        return TestResultSetMetaData.createProxy();
     }
 
 

Modified: jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSetMetaData.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSetMetaData.java?view=diff&rev=539889&r1=539888&r2=539889
==============================================================================
--- jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSetMetaData.java (original)
+++ jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/TestResultSetMetaData.java Sun May 20 08:49:32 2007
@@ -19,6 +19,9 @@
 package org.apache.commons.beanutils;
 
 
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 
@@ -32,7 +35,7 @@
  * @version $Revision$ $Date$
  */
 
-public class TestResultSetMetaData implements ResultSetMetaData {
+public class TestResultSetMetaData implements InvocationHandler {
 
 
     // ----------------------------------------------------- Instance Variables
@@ -57,6 +60,40 @@
         { "timestampProperty", "java.sql.Timestamp" },
     };
 
+
+    /**
+     * Factory method for creating {@link ResultSetMetaData} proxies.
+     *
+     * @return A result set meta data proxy
+     */
+    public static ResultSetMetaData createProxy() {
+        ClassLoader classLoader = ResultSetMetaData.class.getClassLoader();
+        Class[] interfaces = new Class[] { ResultSetMetaData.class };
+        InvocationHandler invocationHandler = new TestResultSetMetaData();
+        return (ResultSetMetaData)Proxy.newProxyInstance(classLoader, interfaces, invocationHandler);
+    }
+
+    /**
+     * Handles method invocation on the {@link ResultSetMetaData} proxy. 
+     *
+     * @param proxy The proxy ResultSet object
+     * @param method the method being invoked
+     * @param args The method arguments
+     * @return The result of invoking the method.
+     * @throws Throwable if an error occurs.
+     */
+    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+        String methodName = method.getName();
+        if ("getColumnClassName".equals(methodName)) {
+            return getColumnClassName(((Integer)args[0]).intValue());
+        } if ("getColumnCount".equals(methodName)) {
+            return new Integer(getColumnCount());
+        } if ("getColumnName".equals(methodName)) {
+            return getColumnName(((Integer)args[0]).intValue());
+        }
+        
+        throw new UnsupportedOperationException(methodName + " not implemented");
+    }
 
     // ---------------------------------------------------- Implemented Methods
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org