You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2021/06/06 15:10:51 UTC

[pulsar] branch master updated: ReflectionUtils use Class.forName in order to properly discover classes in Functions Runtime while using DefaultImplementation (#10827)

This is an automated email from the ASF dual-hosted git repository.

mmerli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 4d263ff  ReflectionUtils use Class.forName in order to properly discover classes in Functions Runtime while using DefaultImplementation (#10827)
4d263ff is described below

commit 4d263ff7752c3156326cd4ab3b1bfbc5d81daeff
Author: Enrico Olivelli <eo...@gmail.com>
AuthorDate: Sun Jun 6 17:09:35 2021 +0200

    ReflectionUtils use Class.forName in order to properly discover classes in Functions Runtime while using DefaultImplementation (#10827)
    
    Using Class.forName allows Java classes loaded in the Functions Runtime to fully use the Implementation classes loaded from the Pulsar API
    using DefaultImplementation
    
    Co-authored-by: Enrico Olivelli <eo...@apache.org>
---
 .../main/java/org/apache/pulsar/client/internal/ReflectionUtils.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/internal/ReflectionUtils.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/internal/ReflectionUtils.java
index 59db2cc..c33f1f1 100644
--- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/internal/ReflectionUtils.java
+++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/internal/ReflectionUtils.java
@@ -51,12 +51,12 @@ class ReflectionUtils {
         try {
             try {
                 // when the API is loaded in the same classloader as the impl
-                return (Class<T>) DefaultImplementation.class.getClassLoader().loadClass(className);
+                return (Class<T>) Class.forName(className, true, DefaultImplementation.class.getClassLoader());
             } catch (Exception e) {
                 // when the API is loaded in a separate classloader as the impl
                 // the classloader that loaded the impl needs to be a child classloader of the classloader
                 // that loaded the API
-                return (Class<T>) Thread.currentThread().getContextClassLoader().loadClass(className);
+                return (Class<T>) Class.forName(className, true, Thread.currentThread().getContextClassLoader());
             }
         } catch (ClassNotFoundException | NoClassDefFoundError e) {
             throw new RuntimeException(e);