diff --git a/api/src/main/java/jakarta/xml/bind/ContextFinder.java b/api/src/main/java/jakarta/xml/bind/ContextFinder.java index bbb67f0..15fffa4 100644 --- a/api/src/main/java/jakarta/xml/bind/ContextFinder.java +++ b/api/src/main/java/jakarta/xml/bind/ContextFinder.java @@ -302,16 +302,18 @@ static JAXBContext find(String factoryId, String factoryName = classNameFromSystemProperties(); if (factoryName != null) return newInstance(contextPath, contextPathClasses, factoryName, classLoader, properties); - Object factory = properties.get(factoryId); - if (factory != null) { - if (factory instanceof String) { - factoryName = (String) factory; - } else { - throw new JAXBException(Messages.format(Messages.ILLEGAL_CAST, factory.getClass().getName(), "String")); + if (properties != null) { + Object factory = properties.get(factoryId); + if (factory != null) { + if (factory instanceof String) { + factoryName = (String) factory; + } else { + throw new JAXBException(Messages.format(Messages.ILLEGAL_CAST, factory.getClass().getName(), "String")); + } + } + if (factoryName != null) { + return newInstance(contextPath, contextPathClasses, factoryName, classLoader, properties); } - } - if (factoryName != null) { - return newInstance(contextPath, contextPathClasses, factoryName, classLoader, properties); } JAXBContextFactory obj = ServiceLoaderUtil.firstByServiceLoader( @@ -344,16 +346,18 @@ static JAXBContext find(Class[] classes, Map properties) throws JA String factoryClassName = classNameFromSystemProperties(); if (factoryClassName != null) return newInstance(classes, properties, factoryClassName); - Object ctxFactory = properties.get(JAXBContext.JAXB_CONTEXT_FACTORY); - if (ctxFactory != null) { - if (ctxFactory instanceof String) { - factoryClassName = (String) ctxFactory; - } else { - throw new JAXBException(Messages.format(Messages.ILLEGAL_CAST, ctxFactory.getClass().getName(), "String")); + if (properties != null) { + Object ctxFactory = properties.get(JAXBContext.JAXB_CONTEXT_FACTORY); + if (ctxFactory != null) { + if (ctxFactory instanceof String) { + factoryClassName = (String) ctxFactory; + } else { + throw new JAXBException(Messages.format(Messages.ILLEGAL_CAST, ctxFactory.getClass().getName(), "String")); + } + } + if (factoryClassName != null) { + return newInstance(classes, properties, factoryClassName); } - } - if (factoryClassName != null) { - return newInstance(classes, properties, factoryClassName); } JAXBContextFactory factory = diff --git a/api/src/main/java/jakarta/xml/bind/ModuleUtil.java b/api/src/main/java/jakarta/xml/bind/ModuleUtil.java index af02171..8644464 100644 --- a/api/src/main/java/jakarta/xml/bind/ModuleUtil.java +++ b/api/src/main/java/jakarta/xml/bind/ModuleUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0, which is available at @@ -112,6 +112,14 @@ public static void delegateAddOpensToImplModule(Class[] classes, Class fac Module jaxbModule = JAXBContext.class.getModule(); + if (!jaxbModule.isNamed()) { + //we are not on the module path, so assume class-path mode + if (LOGGER.isLoggable(Level.FINE)) { + LOGGER.log(Level.FINE, "Using jakarta.xml.bind-api on the class path."); + } + return; + } + for (Class cls : classes) { Class jaxbClass = cls.isArray() ? cls.getComponentType() : cls;