#121: ContextFinder falls back to context classloader resulting in class cast errors

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 3aa8b76..b9ea1a4 100644
--- a/jaxb-api/src/main/java/jakarta/xml/bind/ContextFinder.java
+++ b/jaxb-api/src/main/java/jakarta/xml/bind/ContextFinder.java
@@ -239,11 +239,18 @@
     /**
      * Create an instance of a class using the thread context ClassLoader
      */
-    static JAXBContext newInstance(Class[] classes, Map properties, String className) throws JAXBException {
+    private static JAXBContext newInstance(Class[] classes, Map properties, String className) throws JAXBException {
+        return newInstance(classes, properties, className, getContextClassLoader());
+    }
+
+    /**
+     * Create an instance of a class using passed in ClassLoader
+     */
+    private static JAXBContext newInstance(Class[] classes, Map properties, String className, ClassLoader loader) throws JAXBException {
 
         Class spi;
         try {
-            spi = ServiceLoaderUtil.safeLoadClass(className, DEFAULT_FACTORY_CLASS, getContextClassLoader());
+            spi = ServiceLoaderUtil.safeLoadClass(className, DEFAULT_FACTORY_CLASS, loader);
         } catch (ClassNotFoundException e) {
             throw new JAXBException(Messages.format(Messages.DEFAULT_PROVIDER_NOT_FOUND), e);
         }
@@ -358,7 +365,7 @@
                                 jaxbPropertiesUrl,
                                 JAXBContext.JAXB_CONTEXT_FACTORY, JAXB_CONTEXT_FACTORY_DEPRECATED);
 
-                return newInstance(classes, properties, factoryClassName);
+                return newInstance(classes, properties, factoryClassName, c.getClassLoader());
             }
 
         }
@@ -375,8 +382,8 @@
         }
 
         // to ensure backwards compatibility
-        String className = firstByServiceLoaderDeprecated(JAXBContext.class, getContextClassLoader());
-        if (className != null) return newInstance(classes, properties, className);
+        String className = firstByServiceLoaderDeprecated(JAXBContext.class, classes[0].getClassLoader());
+        if (className != null) return newInstance(classes, properties, className, classes[0].getClassLoader());
 
         logger.fine("Trying to create the platform default provider");
         Class ctxFactoryClass =