Be defensive when working with passed in classes

Signed-off-by: Lukas Jungmann <lukas.jungmann@oracle.com>
diff --git a/jaxb-api/src/main/java/jakarta/xml/bind/ContextFinder.java b/jaxb-api/src/main/java/jakarta/xml/bind/ContextFinder.java
index b9ea1a4..8f898bf 100644
--- a/jaxb-api/src/main/java/jakarta/xml/bind/ContextFinder.java
+++ b/jaxb-api/src/main/java/jakarta/xml/bind/ContextFinder.java
@@ -365,7 +365,7 @@
                                 jaxbPropertiesUrl,
                                 JAXBContext.JAXB_CONTEXT_FACTORY, JAXB_CONTEXT_FACTORY_DEPRECATED);
 
-                return newInstance(classes, properties, factoryClassName, c.getClassLoader());
+                return newInstance(classes, properties, factoryClassName, getClassClassLoader(c));
             }
 
         }
@@ -382,8 +382,12 @@
         }
 
         // to ensure backwards compatibility
-        String className = firstByServiceLoaderDeprecated(JAXBContext.class, classes[0].getClassLoader());
-        if (className != null) return newInstance(classes, properties, className, classes[0].getClassLoader());
+        // it is guaranteed classes are not null but it is not guaranteed, that array is not empty
+        ClassLoader loader = classes.length > 0
+                ? getClassClassLoader(classes[0])
+                : getContextClassLoader();
+        String className = firstByServiceLoaderDeprecated(JAXBContext.class, loader);
+        if (className != null) return newInstance(classes, properties, className, loader);
 
         logger.fine("Trying to create the platform default provider");
         Class ctxFactoryClass =