From 2a179e0ae23973f68c7df788bb97d247ca889e42 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Fri, 25 Jul 2025 15:30:12 +0200 Subject: [PATCH] JCR-5154 Remove deprecated Class.newInstance() --- .../org/apache/jackrabbit/core/SearchManager.java | 2 +- .../jackrabbit/core/config/SimpleBeanFactory.java | 6 ++++-- .../jackrabbit/core/query/lucene/SearchIndex.java | 12 ++++++------ .../security/principal/ProviderRegistryImpl.java | 13 ++++--------- .../lucene/directory/DirectoryManagerTest.java | 8 ++++---- .../jackrabbit/core/util/db/ConnectionFactory.java | 10 ++++------ .../jackrabbit/client/RepositoryFactoryImpl.java | 2 +- .../remoting/davex/ProtectedRemoveManager.java | 9 +++------ .../jackrabbit/webdav/simple/ResourceConfig.java | 2 +- .../jackrabbit/test/api/RepositoryFactoryTest.java | 2 +- .../jcr2spi/Jcr2spiRepositoryFactory.java | 4 ++-- .../apache/jackrabbit/jcr2spi/RepositoryImpl.java | 2 +- .../authorization/AccessControlProviderStub.java | 2 +- .../apache/jackrabbit/vfs/ext/ds/VFSDataStore.java | 2 +- .../apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java | 2 +- .../webdav/version/report/ReportType.java | 8 +++----- 16 files changed, 38 insertions(+), 48 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java index 05cd8fc4099..f98a9e2092c 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java @@ -431,7 +431,7 @@ public NodeState next() { protected AbstractQueryImpl createQueryInstance() throws RepositoryException { try { String queryImplClassName = handler.getQueryClass(); - Object obj = Class.forName(queryImplClassName).newInstance(); + Object obj = Class.forName(queryImplClassName).getDeclaredConstructor().newInstance(); if (obj instanceof AbstractQueryImpl) { return (AbstractQueryImpl) obj; } else { diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SimpleBeanFactory.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SimpleBeanFactory.java index d81230003f1..56dd2daa1bc 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SimpleBeanFactory.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SimpleBeanFactory.java @@ -17,6 +17,8 @@ package org.apache.jackrabbit.core.config; +import java.lang.reflect.InvocationTargetException; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,12 +41,12 @@ public Object newInstance(Class klass, BeanConfig config) throws Configuratio } // Instantiate the object using the default constructor - return objectClass.newInstance(); + return objectClass.getDeclaredConstructor().newInstance(); } catch (ClassNotFoundException e) { throw new ConfigurationException( "Configured bean implementation class " + cname + " was not found.", e); - } catch (InstantiationException e) { + } catch (InstantiationException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException e) { throw new ConfigurationException( "Configured bean implementation class " + cname + " can not be instantiated.", e); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java index 8e4db22cc2e..0f79761fafa 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java @@ -933,7 +933,7 @@ public ExcerptProvider createExcerptProvider(Query query) throws IOException { ExcerptProvider ep; try { - ep = (ExcerptProvider) excerptProviderClass.newInstance(); + ep = (ExcerptProvider) excerptProviderClass.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw Util.createIOException(e); } @@ -1307,7 +1307,7 @@ protected SynonymProvider createSynonymProvider() { SynonymProvider sp = null; if (synonymProviderClass != null) { try { - sp = (SynonymProvider) synonymProviderClass.newInstance(); + sp = (SynonymProvider) synonymProviderClass.getDeclaredConstructor().newInstance(); sp.initialize(createSynonymProviderConfigResource()); } catch (Exception e) { log.warn("Exception initializing synonym provider: " @@ -1331,7 +1331,7 @@ protected DirectoryManager createDirectoryManager() throw new IOException(directoryManagerClass + " is not a DirectoryManager implementation"); } - DirectoryManager df = (DirectoryManager) clazz.newInstance(); + DirectoryManager df = (DirectoryManager) clazz.getDeclaredConstructor().newInstance(); df.init(this); return df; } catch (IOException e) { @@ -1356,7 +1356,7 @@ protected RedoLogFactory createRedoLogFactory() throws IOException { throw new IOException(redoLogFactoryClass + " is not a RedoLogFactory implementation"); } - return (RedoLogFactory) clazz.newInstance(); + return (RedoLogFactory) clazz.getDeclaredConstructor().newInstance(); } catch (Exception e) { IOException ex = new IOException(); ex.initCause(e); @@ -1420,7 +1420,7 @@ protected SpellChecker createSpellChecker() { SpellChecker spCheck = null; if (spellCheckerClass != null) { try { - spCheck = (SpellChecker) spellCheckerClass.newInstance(); + spCheck = (SpellChecker) spellCheckerClass.getDeclaredConstructor().newInstance(); spCheck.init(this); } catch (Exception e) { log.warn("Exception initializing spell checker: " @@ -2422,7 +2422,7 @@ public String getSynonymProviderConfigPath() { public void setSimilarityClass(String className) { try { Class similarityClass = Class.forName(className); - similarity = (Similarity) similarityClass.newInstance(); + similarity = (Similarity) similarityClass.getDeclaredConstructor().newInstance(); } catch (Exception e) { log.warn("Invalid Similarity class: " + className, e); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/ProviderRegistryImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/ProviderRegistryImpl.java index 6a233db45f1..674a5e8c034 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/ProviderRegistryImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/ProviderRegistryImpl.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.core.security.principal; +import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; @@ -128,17 +129,11 @@ private PrincipalProvider createProvider(Properties config) } try { - Class pc = Class.forName(className, true, BeanConfig.getDefaultClassLoader()); - PrincipalProvider pp = (PrincipalProvider) pc.newInstance(); + Class pc = Class.forName(className, true, BeanConfig.getDefaultClassLoader()); + PrincipalProvider pp = (PrincipalProvider) pc.getDeclaredConstructor().newInstance(); pp.init(config); return pp; - } catch (ClassNotFoundException e) { - throw new RepositoryException("Unable to create new principal provider.", e); - } catch (IllegalAccessException e) { - throw new RepositoryException("Unable to create new principal provider.", e); - } catch (InstantiationException e) { - throw new RepositoryException("Unable to create new principal provider.", e); - } catch (ClassCastException e) { + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { throw new RepositoryException("Unable to create new principal provider.", e); } } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/directory/DirectoryManagerTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/directory/DirectoryManagerTest.java index 5651aaef3a9..1b80f02c2ba 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/directory/DirectoryManagerTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/directory/DirectoryManagerTest.java @@ -32,7 +32,7 @@ */ public class DirectoryManagerTest extends TestCase { - private static final Collection IMPLEMENTATIONS = Arrays.asList( + private static final Collection> IMPLEMENTATIONS = Arrays.asList( new Class[]{FSDirectoryManager.class, RAMDirectoryManager.class}); private static final SearchIndex INDEX = new SearchIndex(); @@ -91,9 +91,9 @@ public void call(DirectoryManager directoryManager) throws Exception { } private void execute(Callable callable) throws Exception { - for (Iterator it = IMPLEMENTATIONS.iterator(); it.hasNext(); ) { - Class clazz = (Class) it.next(); - DirectoryManager dirMgr = (DirectoryManager) clazz.newInstance(); + for (Iterator> it = IMPLEMENTATIONS.iterator(); it.hasNext(); ) { + Class clazz = it.next(); + DirectoryManager dirMgr = (DirectoryManager) clazz.getDeclaredConstructor().newInstance(); dirMgr.init(INDEX); try { callable.call(dirMgr); diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java index b5241e897c4..65f63eb5694 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.core.util.db; +import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import java.sql.Driver; import java.sql.SQLException; @@ -286,7 +287,7 @@ private DataSource getJndiDataSource( Class contextClass, String name) throws RepositoryException { try { - Object object = contextClass.newInstance().lookup(name); + Object object = contextClass.getDeclaredConstructor().newInstance().lookup(name); if (object instanceof DataSource) { return (DataSource) object; } else { @@ -294,10 +295,7 @@ private DataSource getJndiDataSource( "Object " + object + " with JNDI name " + name + " is not a JDBC DataSource"); } - } catch (InstantiationException e) { - throw new RepositoryException( - "Invalid JNDI context: " + contextClass.getName(), e); - } catch (IllegalAccessException e) { + } catch (InstantiationException|IllegalAccessException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException e) { throw new RepositoryException( "Invalid JNDI context: " + contextClass.getName(), e); } catch (NamingException e) { @@ -328,7 +326,7 @@ private BasicDataSource getDriverDataSource( // The JDBC specification recommends the Class.forName // method without the .newInstance() method call, // but it is required after a Derby 'shutdown' - instance = (Driver) driverClass.newInstance(); + instance = (Driver) driverClass.getDeclaredConstructor().newInstance(); } catch (Throwable e) { // Ignore exceptions as there's no requirement for // a JDBC driver class to have a public default constructor diff --git a/jackrabbit-jcr-client/src/main/java/org/apache/jackrabbit/client/RepositoryFactoryImpl.java b/jackrabbit-jcr-client/src/main/java/org/apache/jackrabbit/client/RepositoryFactoryImpl.java index a8923f4adb4..924689a0795 100644 --- a/jackrabbit-jcr-client/src/main/java/org/apache/jackrabbit/client/RepositoryFactoryImpl.java +++ b/jackrabbit-jcr-client/src/main/java/org/apache/jackrabbit/client/RepositoryFactoryImpl.java @@ -65,7 +65,7 @@ public Repository getRepository(@SuppressWarnings("rawtypes") Map parameters) th Class repositoryFactoryClass = Class.forName(repositoryFactoryName, true, Thread.currentThread().getContextClassLoader()); - repositoryFactory = repositoryFactoryClass.newInstance(); + repositoryFactory = repositoryFactoryClass.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw new RepositoryException(e); diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/ProtectedRemoveManager.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/ProtectedRemoveManager.java index f6e3f785a54..3e85135c688 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/ProtectedRemoveManager.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/ProtectedRemoveManager.java @@ -21,6 +21,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; @@ -91,14 +92,10 @@ ProtectedItemRemoveHandler createHandler(String className) { if (!className.isEmpty()) { Class irHandlerClass = Class.forName(className); if (ProtectedItemRemoveHandler.class.isAssignableFrom(irHandlerClass)) { - irHandler = (ProtectedItemRemoveHandler) irHandlerClass.newInstance(); + irHandler = (ProtectedItemRemoveHandler) irHandlerClass.getDeclaredConstructor().newInstance(); } } - } catch (ClassNotFoundException e) { - log.error(e.getMessage(), e); - } catch (InstantiationException e) { - log.error(e.getMessage(), e); - } catch (IllegalAccessException e) { + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { log.error(e.getMessage(), e); } return irHandler; diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java index 1292b129ce3..defe7a522bb 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java @@ -351,7 +351,7 @@ private static Object buildClassFromConfig(Element parent) { String className = DomUtil.getAttribute(classElem, "name", null); if (className != null) { Class c = Class.forName(className); - instance = c.newInstance(); + instance = c.getDeclaredConstructor().newInstance(); } else { log.error("Invalid configuration: missing 'class' element"); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java index 2f39caedca2..16a7c1f55ba 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java @@ -47,7 +47,7 @@ protected RepositoryFactory getRepositoryFactory() fail("Property '" + RepositoryStub.REPOSITORY_FACTORY + "' is not defined."); } else { try { - return (RepositoryFactory) Class.forName(className).newInstance(); + return (RepositoryFactory) Class.forName(className).getDeclaredConstructor().newInstance(); } catch (Exception e) { fail(e.toString()); } diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java index b4e00ee3894..7200b74fc4e 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java @@ -191,7 +191,7 @@ private static RepositoryServiceFactory getServiceFactory(Map parameters) serviceFactoryClass = Class.forName(serviceFactoryName); } - Object serviceFactory = serviceFactoryClass.newInstance(); + Object serviceFactory = serviceFactoryClass.getDeclaredConstructor().newInstance(); if (serviceFactory instanceof RepositoryServiceFactory) { log.debug("Found RepositoryServiceFactory {}", serviceFactory); @@ -248,7 +248,7 @@ public int getPollTimeout() { public T getConfiguration(String name, T defaultValue) { if (parameters.containsKey(name)) { Object value = parameters.get(name); - Class clazz = (defaultValue == null) + Class clazz = (defaultValue == null) ? value.getClass() : defaultValue.getClass(); if (clazz.isAssignableFrom(value.getClass())) { diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java index 712cb5cbe2c..5dd6d9ce71c 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java @@ -243,7 +243,7 @@ public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtabl } String repositoryConfigClassName = (String)((StringRefAddr)rclas).getContent(); - Object rof = Class.forName(configFactoryClassName).newInstance(); + Object rof = Class.forName(configFactoryClassName).getDeclaredConstructor().newInstance(); if (! (rof instanceof ObjectFactory)) { throw new Exception(rof + " must implement ObjectFactory"); diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/AccessControlProviderStub.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/AccessControlProviderStub.java index 23ace3a6c02..fcb2c2b8cd8 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/AccessControlProviderStub.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/AccessControlProviderStub.java @@ -69,7 +69,7 @@ public static AccessControlProvider newInstance(RepositoryConfig config) throws try { Class acProviderClass = Class.forName(className); if (AccessControlProvider.class.isAssignableFrom(acProviderClass)) { - AccessControlProvider acProvider = (AccessControlProvider) acProviderClass.newInstance(); + AccessControlProvider acProvider = (AccessControlProvider) acProviderClass.getDeclaredConstructor().newInstance(); acProvider.init(config); return acProvider; } else { diff --git a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSDataStore.java b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSDataStore.java index 5e03d66ad28..8dd9cfe9606 100644 --- a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSDataStore.java +++ b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSDataStore.java @@ -300,7 +300,7 @@ protected FileSystemManager createFileSystemManager() throws RepositoryException fileSystemManager = new StandardFileSystemManager(); } else { final Class mgrClass = Class.forName(getFileSystemManagerClassName()); - fileSystemManager = (FileSystemManager) mgrClass.newInstance(); + fileSystemManager = (FileSystemManager) mgrClass.getDeclaredConstructor().newInstance(); } if (fileSystemManager instanceof DefaultFileSystemManager) { diff --git a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java index 8eb1ea1958c..21f08a4b60e 100755 --- a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java +++ b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java @@ -528,7 +528,7 @@ protected FileSystemManager createFileSystemManager() throws FileSystemException fileSystemManager = new StandardFileSystemManager(); } else { final Class mgrClass = Class.forName(getFileSystemManagerClassName()); - fileSystemManager = (FileSystemManager) mgrClass.newInstance(); + fileSystemManager = (FileSystemManager) mgrClass.getDeclaredConstructor().newInstance(); } if (fileSystemManager instanceof DefaultFileSystemManager) { diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportType.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportType.java index 36bbe30b67e..8366814ba19 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportType.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportType.java @@ -28,6 +28,7 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; +import java.lang.reflect.InvocationTargetException; import java.util.HashMap; /** @@ -68,13 +69,10 @@ private ReportType(String localName, Namespace namespace, String key, Class