This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
The following commit(s) were added to refs/heads/master by this push: new 5d00bcc [OWB-1214] fallback on loadClass(package-info) when getPackage is not available in the JVM 5d00bcc is described below commit 5d00bcc5c9d9a5efc0a9848d46eff91ef5186025 Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Wed Jun 3 10:43:26 2020 +0200 [OWB-1214] fallback on loadClass(package-info) when getPackage is not available in the JVM --- .../org/apache/webbeans/config/BeansDeployer.java | 55 ++++++++++------------ 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java b/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java index 99689fa..057db3d 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java @@ -145,30 +145,6 @@ public class BeansDeployer private static final Logger logger = WebBeansLoggerFacade.getLogger(BeansDeployer.class); public static final String JAVAX_ENTERPRISE_PACKAGE = "javax.enterprise."; - private static final Method GET_PACKAGE; - static - { - Method getPackage; - try - { - getPackage = ClassLoader.class.getDeclaredMethod("getDefinedPackage", String.class); - getPackage.setAccessible(true); - } - catch (NoSuchMethodException e) - { - try - { - getPackage = ClassLoader.class.getDeclaredMethod("getPackage", String.class); - getPackage.setAccessible(true); - } - catch (NoSuchMethodException ex) - { - throw new IllegalStateException(ex); - } - } - GET_PACKAGE = getPackage; - } - /**Deployment is started or not*/ protected boolean deployed; @@ -1443,13 +1419,32 @@ public class BeansDeployer { return result; } - try // this is related to classloader and not to Package actually :( so we need reflection + while (true) { - pckge = Package.class.cast(GET_PACKAGE.invoke(classLoader, previousPackage)); - } - catch (Exception e) - { - throw new IllegalStateException(e); + try // not always existing but enables to go further when getPackage is not available (graal) + { + pckge = classLoader.loadClass(previousPackage + + (previousPackage.isEmpty() ? "" :".") + "package-info").getPackage(); + break; + } + catch (Exception e) + { + if (previousPackage.isEmpty()) + { + pckge = null; + break; + } + packageVetoCache.put(previousPackage, false); + idx = previousPackage.lastIndexOf('.'); + if (idx > 0) + { + previousPackage = previousPackage.substring(0, idx); + } + else + { + previousPackage = ""; + } + } } } else