You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2025/07/25 13:30:37 UTC

(jackrabbit) 01/01: JCR-5154 Remove deprecated Class.newInstance()

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/remove-deprecated-class-newinstance
in repository https://gitbox.apache.org/repos/asf/jackrabbit.git

commit 2a179e0ae23973f68c7df788bb97d247ca889e42
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Fri Jul 25 15:30:12 2025 +0200

    JCR-5154 Remove deprecated Class.newInstance()
---
 .../main/java/org/apache/jackrabbit/core/SearchManager.java |  2 +-
 .../apache/jackrabbit/core/config/SimpleBeanFactory.java    |  6 ++++--
 .../apache/jackrabbit/core/query/lucene/SearchIndex.java    | 12 ++++++------
 .../core/security/principal/ProviderRegistryImpl.java       | 13 ++++---------
 .../core/query/lucene/directory/DirectoryManagerTest.java   |  8 ++++----
 .../apache/jackrabbit/core/util/db/ConnectionFactory.java   | 10 ++++------
 .../org/apache/jackrabbit/client/RepositoryFactoryImpl.java |  2 +-
 .../server/remoting/davex/ProtectedRemoveManager.java       |  9 +++------
 .../org/apache/jackrabbit/webdav/simple/ResourceConfig.java |  2 +-
 .../apache/jackrabbit/test/api/RepositoryFactoryTest.java   |  2 +-
 .../apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java |  4 ++--
 .../java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java  |  2 +-
 .../security/authorization/AccessControlProviderStub.java   |  2 +-
 .../java/org/apache/jackrabbit/vfs/ext/ds/VFSDataStore.java |  2 +-
 .../org/apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java     |  2 +-
 .../apache/jackrabbit/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 05cd8fc40..f98a9e209 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 class SearchManager implements SynchronousEventListener {
     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 d81230003..56dd2daa1 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 class SimpleBeanFactory implements BeanFactory {
             }
 
             // 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 8e4db22cc..0f79761fa 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 class SearchIndex extends AbstractQueryHandler {
             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 @@ public class SearchIndex extends AbstractQueryHandler {
         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 @@ public class SearchIndex extends AbstractQueryHandler {
                 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 @@ public class SearchIndex extends AbstractQueryHandler {
                 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 @@ public class SearchIndex extends AbstractQueryHandler {
         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 class SearchIndex extends AbstractQueryHandler {
     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 6a233db45..674a5e8c0 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 @@ public class ProviderRegistryImpl implements PrincipalProviderRegistry {
         }
 
         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 5651aaef3..1b80f02c2 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 @@ import junit.framework.TestCase;
  */
 public class DirectoryManagerTest extends TestCase {
 
-    private static final Collection IMPLEMENTATIONS = Arrays.asList(
+    private static final Collection<Class<?>> IMPLEMENTATIONS = Arrays.asList(
             new Class[]{FSDirectoryManager.class, RAMDirectoryManager.class});
 
     private static final SearchIndex INDEX = new SearchIndex();
@@ -91,9 +91,9 @@ public class DirectoryManagerTest extends TestCase {
     }
 
     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<Class<?>> 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 b5241e897..65f63eb56 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 @@ public final class ConnectionFactory {
             Class<Context> 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 @@ public final class ConnectionFactory {
                         "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 @@ public final class ConnectionFactory {
                 // 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 a8923f4ad..924689a07 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 class RepositoryFactoryImpl implements RepositoryFactory {
             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 f6e3f785a..3e85135c6 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.FileInputStream;
 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 @@ class ProtectedRemoveManager {
             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 1292b129c..defe7a522 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 @@ public class ResourceConfig {
                 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 2f39caedc..16a7c1f55 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 @@ public class RepositoryFactoryTest extends AbstractJCRTest {
             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 b4e00ee38..7200b74fc 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 @@ public class Jcr2spiRepositoryFactory implements RepositoryFactory {
                     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 class Jcr2spiRepositoryFactory implements RepositoryFactory {
         public <T> 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 712cb5cbe..5dd6d9ce7 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 class RepositoryImpl extends AbstractRepository implements Referenceable
                     }
                     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 23ace3a6c..fcb2c2b8c 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 class AccessControlProviderStub {
 			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 5e03d66ad..8dd9cfe96 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 @@ public class VFSDataStore extends CachingDataStore {
                 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 8eb1ea195..21f08a4b6 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 @@ public class VFSFileSystem implements FileSystem {
                 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 36bbe30b6..8366814ba 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.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.HashMap;
 
 /**
@@ -68,13 +69,10 @@ public class ReportType implements DeltaVConstants, XmlSerializable {
      */
     public Report createReport(DeltaVResource resource, ReportInfo info) throws DavException {
         try {
-            Report report = reportClass.newInstance();
+            Report report = reportClass.getDeclaredConstructor().newInstance();
             report.init(resource, info);
             return report;
-        } catch (IllegalAccessException e) {
-            // should never occur
-            throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, "Failed to create new report (" + reportClass.getName() + ") from class: " + e.getMessage());
-        } catch (InstantiationException e) {
+        } catch (IllegalAccessException|InstantiationException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException e) {
             // should never occur
             throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, "Failed to create new report (" + reportClass.getName() + ") from class: " + e.getMessage());
         }