diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/SaslClientAuthenticationProviders.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/SaslClientAuthenticationProviders.java index 56c36e8eae70..aaaee003c595 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/SaslClientAuthenticationProviders.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/SaslClientAuthenticationProviders.java @@ -17,6 +17,7 @@ */ package org.apache.hadoop.hbase.security.provider; +import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -111,13 +112,14 @@ static AuthenticationProviderSelector instantiateSelector(Configuration conf, Class clz = conf.getClass( SELECTOR_KEY, BuiltInProviderSelector.class, AuthenticationProviderSelector.class); try { - AuthenticationProviderSelector selector = clz.newInstance(); + AuthenticationProviderSelector selector = clz.getConstructor().newInstance(); selector.configure(conf, providers); if (LOG.isTraceEnabled()) { LOG.trace("Loaded ProviderSelector {}", selector.getClass()); } return selector; - } catch (InstantiationException | IllegalAccessException e) { + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | + InvocationTargetException e) { throw new RuntimeException("Failed to instantiate " + clz + " as the ProviderSelector defined by " + SELECTOR_KEY, e); } @@ -148,8 +150,9 @@ static void addExplicitProviders(Configuration conf, // Instantiate it SaslClientAuthenticationProvider provider; try { - provider = (SaslClientAuthenticationProvider) clz.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { + provider = (SaslClientAuthenticationProvider) clz.getConstructor().newInstance(); + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException + | InvocationTargetException e) { LOG.warn("Failed to instantiate SaslClientAuthenticationProvider {}", clz, e); continue; } diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/security/provider/TestSaslClientAuthenticationProviders.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/security/provider/TestSaslClientAuthenticationProviders.java index c1317028d35a..2b399593e7c1 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/security/provider/TestSaslClientAuthenticationProviders.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/security/provider/TestSaslClientAuthenticationProviders.java @@ -96,6 +96,10 @@ public void testDifferentConflictingImplementationsFail() { static class ConflictingProvider1 implements SaslClientAuthenticationProvider { static final SaslAuthMethod METHOD1 = new SaslAuthMethod( "FOO", (byte)12, "DIGEST-MD5", AuthenticationMethod.SIMPLE); + + public ConflictingProvider1() { + } + @Override public SaslAuthMethod getSaslAuthMethod() { return METHOD1; } @@ -118,6 +122,10 @@ static class ConflictingProvider1 implements SaslClientAuthenticationProvider { static class ConflictingProvider2 implements SaslClientAuthenticationProvider { static final SaslAuthMethod METHOD2 = new SaslAuthMethod( "BAR", (byte)12, "DIGEST-MD5", AuthenticationMethod.SIMPLE); + + public ConflictingProvider2() { + } + @Override public SaslAuthMethod getSaslAuthMethod() { return METHOD2; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/provider/SaslServerAuthenticationProviders.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/provider/SaslServerAuthenticationProviders.java index d1c22b7b4550..829498dfd9fe 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/provider/SaslServerAuthenticationProviders.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/provider/SaslServerAuthenticationProviders.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hbase.security.provider; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Optional; import java.util.ServiceLoader; @@ -120,9 +121,10 @@ static void addExtraProviders(Configuration conf, try { SaslServerAuthenticationProvider provider = - (SaslServerAuthenticationProvider) clz.newInstance(); + (SaslServerAuthenticationProvider) clz.getConstructor().newInstance(); addProviderIfNotExists(provider, providers); - } catch (InstantiationException | IllegalAccessException e) { + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException + | InvocationTargetException e) { LOG.warn("Failed to instantiate {}", clz, e); } }