Index: java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DataSourceReferenceTest.java
===================================================================
--- java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DataSourceReferenceTest.java	(revision 616780)
+++ java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DataSourceReferenceTest.java	(working copy)
@@ -189,11 +189,6 @@
         Object recreatedDS = 
             factory.getObjectInstance(dsAsReference, null, null, null);
         
-        // DERBY-2559 - with jdk16, this recreatedDS will be null.
-        // bailing out
-        if (JDBC.vmSupportsJDBC4())
-            return;
-        
         println(" empty DataSource recreated using Reference as " +
             recreatedDS.getClass().getName());
         // empty DataSource recreated using Reference should not be 
@@ -387,4 +382,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
Index: java/client/org/apache/derby/client/ClientDataSourceFactory.java
===================================================================
--- java/client/org/apache/derby/client/ClientDataSourceFactory.java	(revision 616780)
+++ java/client/org/apache/derby/client/ClientDataSourceFactory.java	(working copy)
@@ -26,12 +26,7 @@
 
 import javax.naming.RefAddr;
 import javax.naming.Reference;
-import org.apache.derby.jdbc.ClientBaseDataSource;
 
-import org.apache.derby.jdbc.ClientConnectionPoolDataSource;
-import org.apache.derby.jdbc.ClientDataSource;
-import org.apache.derby.jdbc.ClientXADataSource;
-
 /**
  * The data source factory currrently for ClientDataSource only. This factory will support XA and pooling-enabled data
  * sources in the future.
@@ -81,16 +76,7 @@
         javax.naming.Reference ref = (javax.naming.Reference) refObj;
 
         // Create the proper data source object shell.
-        ClientBaseDataSource ds = null;
-        if (ref.getClassName().equals(ClientDataSource.className__)) {
-            ds = new ClientDataSource();
-        } else if (ref.getClassName().equals(ClientXADataSource.className__)) {
-            ds = new ClientXADataSource();
-        } else if (ref.getClassName().equals(ClientConnectionPoolDataSource.className__)) {
-            ds = new ClientConnectionPoolDataSource();
-        } else {
-            return null;
-        }
+        Object ds = Class.forName(ref.getClassName()).newInstance();
 
         // Fill in the data source object shell with values from the jndi reference.
         ClientDataSourceFactory.setBeanProperties(ds, ref);
