diff --git a/hk2-configuration/persistence/hk2-xml/main/src/main/java/org/glassfish/hk2/xml/internal/JAUtilities.java b/hk2-configuration/persistence/hk2-xml/main/src/main/java/org/glassfish/hk2/xml/internal/JAUtilities.java
index 0d44733..12408e4 100755
--- a/hk2-configuration/persistence/hk2-xml/main/src/main/java/org/glassfish/hk2/xml/internal/JAUtilities.java
+++ b/hk2-configuration/persistence/hk2-xml/main/src/main/java/org/glassfish/hk2/xml/internal/JAUtilities.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,6 @@
 
 package org.glassfish.hk2.xml.internal;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
@@ -29,6 +28,7 @@
 import javassist.CtClass;
 import javassist.LoaderClassPath;
 import javassist.NotFoundException;
+import javassist.bytecode.ClassFile;
 
 import org.glassfish.hk2.api.MultiException;
 import org.glassfish.hk2.utilities.cache.Computable;
@@ -65,7 +65,7 @@
         }
             
     });
-    
+
     public final static String GET = "get";
     public final static String SET = "set";
     public final static String IS = "is";
@@ -238,8 +238,12 @@
                   CtClass generated = Generator.generate(new ClassAltClassImpl(key, classReflectionHelper),
                         jaUtilities.getBaseClass(),
                         jaUtilities.getClassPool());
-                  
-                  proxyClass = generated.toClass(key.getClassLoader(), key.getProtectionDomain());
+
+                  if (ClassFile.MAJOR_VERSION > ClassFile.JAVA_8) {
+                      proxyClass = generated.toClass(key);
+                  } else {
+                      proxyClass = generated.toClass(key.getClassLoader(), key.getProtectionDomain());
+                  }
                 }
                 catch (RuntimeException re) {
                     throw new RuntimeException("Could not compile proxy for class " + iFaceName, re);
diff --git a/pom.xml b/pom.xml
index 93c4129..9ba96f0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
 
     This program and the accompanying materials are made available under the
     terms of the Eclipse Public License v. 2.0, which is available at
@@ -150,7 +150,7 @@
         <glassfish.javax.el.version>3.0.1-b10</glassfish.javax.el.version>
         <jakarta.el.version>3.0.2</jakarta.el.version>
         <jtype.version>0.1.0</jtype.version>
-        <javassist.version>3.22.0-CR2</javassist.version>
+        <javassist.version>3.27.0-GA</javassist.version>
         <junit.version>4.12</junit.version>
         <asm.version>7.1</asm.version>
         <woodstox.version>4.1.2</woodstox.version>
