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 =