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

kdoran pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-maven.git

commit cc264428959b9e41f3bc7cae852f43b060bc248a
Author: Bryan Bende <bbe...@apache.org>
AuthorDate: Thu Dec 1 12:15:52 2022 -0500

    NIFI-10927 Remove service files from parent class loader before discovering 
class names
    
    This closes #27.
    
    Signed-off-by: Kevin Doran <kdo...@apache.org>
---
 .../extraction/ExtensionDefinitionFactory.java       | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git 
a/src/main/java/org/apache/nifi/extension/definition/extraction/ExtensionDefinitionFactory.java
 
b/src/main/java/org/apache/nifi/extension/definition/extraction/ExtensionDefinitionFactory.java
index 1f2f037..d8cabd3 100644
--- 
a/src/main/java/org/apache/nifi/extension/definition/extraction/ExtensionDefinitionFactory.java
+++ 
b/src/main/java/org/apache/nifi/extension/definition/extraction/ExtensionDefinitionFactory.java
@@ -137,19 +137,29 @@ public class ExtensionDefinitionFactory {
     }
 
     private Set<String> discoverClassNames(final String extensionType) throws 
IOException {
-        final Set<String> classNames = new HashSet<>();
+        final Set<URL> resourceUrls = new HashSet<>();
 
         final Enumeration<URL> resources = 
extensionClassLoader.getResources(SERVICES_DIRECTORY + extensionType);
-
         while (resources.hasMoreElements()) {
-            final URL resourceUrl = resources.nextElement();
-            classNames.addAll(discoverClassNames(extensionClassLoader, 
resourceUrl));
+            resourceUrls.add(resources.nextElement());
         }
 
+        final ClassLoader parentClassLoader = extensionClassLoader.getParent();
+        if (parentClassLoader != null) {
+            final Enumeration<URL> parentResources = 
parentClassLoader.getResources(SERVICES_DIRECTORY + extensionType);
+            while (parentResources.hasMoreElements()) {
+                resourceUrls.remove(parentResources.nextElement());
+            }
+        }
+
+        final Set<String> classNames = new HashSet<>();
+        for (final URL resourceUrl : resourceUrls) {
+            classNames.addAll(discoverClassNames(resourceUrl));
+        }
         return classNames;
     }
 
-    private Set<String> discoverClassNames(final ClassLoader classLoader, 
final URL serviceUrl) throws IOException {
+    private Set<String> discoverClassNames(final URL serviceUrl) throws 
IOException {
         final Set<String> classNames = new HashSet<>();
 
         try (final InputStream in = serviceUrl.openStream();

Reply via email to