diff --git a/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java b/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java index c6be441c7ed82..9c764829d173a 100644 --- a/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java +++ b/clients/src/main/java/org/apache/kafka/common/security/kerberos/KerberosError.java @@ -49,7 +49,10 @@ public enum KerberosError { static { try { - if (Java.isIbmJdk()) { + // different IBM JDKs versions include different security implementations + if (Java.isIbmJdk() && canLoad("com.ibm.security.krb5.KrbException")) { + KRB_EXCEPTION_CLASS = Class.forName("com.ibm.security.krb5.KrbException"); + } else if (Java.isIbmJdk() && canLoad("com.ibm.security.krb5.internal.KrbException")) { KRB_EXCEPTION_CLASS = Class.forName("com.ibm.security.krb5.internal.KrbException"); } else { KRB_EXCEPTION_CLASS = Class.forName("sun.security.krb5.KrbException"); @@ -60,6 +63,15 @@ public enum KerberosError { } } + private static boolean canLoad(String clazz) { + try { + Class.forName(clazz); + return true; + } catch (Exception e) { + return false; + } + } + private final int errorCode; private final boolean retriable;