From ffef70d9e5de7868429da1380559aad081ac3063 Mon Sep 17 00:00:00 2001 From: Jonas Kunz Date: Tue, 22 Aug 2023 09:44:14 +0200 Subject: [PATCH 1/2] Fixed getDefinedPackage lookup for OpenJ9 (8) --- .../indy/InstrumentationModuleClassLoader.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/InstrumentationModuleClassLoader.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/InstrumentationModuleClassLoader.java index 2732285a1c8b..b8a431459f5e 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/InstrumentationModuleClassLoader.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/InstrumentationModuleClassLoader.java @@ -238,18 +238,16 @@ private static MethodHandle getFindPackageMethod() { MethodType methodType = MethodType.methodType(Package.class, String.class); MethodHandles.Lookup lookup = MethodHandles.lookup(); try { + return lookup.findVirtual(ClassLoader.class, "getDefinedPackage", methodType); + } catch (NoSuchMethodException | IllegalAccessException e) { + // In Java 8 getDefinedPackage does not exist (HotSpot) or is not accessible (OpenJ9) try { - return lookup.findVirtual(ClassLoader.class, "getDefinedPackage", methodType); - } catch (NoSuchMethodException e) { - // Java 8 case - try { - return lookup.findVirtual(ClassLoader.class, "getPackage", methodType); - } catch (NoSuchMethodException ex) { - throw new IllegalStateException("expected method to always exist!", ex); - } + return lookup.findVirtual(ClassLoader.class, "getPackage", methodType); + } catch (NoSuchMethodException ex) { + throw new IllegalStateException("expected method to always exist!", ex); + } catch (IllegalAccessException ex2) { + throw new IllegalStateException("Method should be accessible from here", e); } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Method should be accessible from here", e); } } } From c4ae132022150651e59f44edf2e39a5cd271d032 Mon Sep 17 00:00:00 2001 From: Jonas Kunz Date: Tue, 22 Aug 2023 10:08:21 +0200 Subject: [PATCH 2/2] Fix invalid cause on rethrown exception --- .../instrumentation/indy/InstrumentationModuleClassLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/InstrumentationModuleClassLoader.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/InstrumentationModuleClassLoader.java index b8a431459f5e..394ed3c64716 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/InstrumentationModuleClassLoader.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/InstrumentationModuleClassLoader.java @@ -246,7 +246,7 @@ private static MethodHandle getFindPackageMethod() { } catch (NoSuchMethodException ex) { throw new IllegalStateException("expected method to always exist!", ex); } catch (IllegalAccessException ex2) { - throw new IllegalStateException("Method should be accessible from here", e); + throw new IllegalStateException("Method should be accessible from here", ex2); } } }