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
The following commit(s) were added to refs/heads/main by this push: new 03d924c NIFI-10011 Recursively look for provided API implementations 03d924c is described below commit 03d924c1028bbb10792f045fe8cb0f5c670f36ae Author: Bryan Bende <bbe...@gmail.com> AuthorDate: Tue May 10 13:57:35 2022 -0400 NIFI-10011 Recursively look for provided API implementations --- .../extraction/ExtensionDefinitionFactory.java | 26 ++++++++++++++-------- 1 file changed, 17 insertions(+), 9 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 d632d19..5e51614 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 @@ -83,22 +83,30 @@ public class ExtensionDefinitionFactory { final Set<ServiceAPIDefinition> serviceApis = new HashSet<>(); final Class<?> controllerServiceClass = Class.forName("org.apache.nifi.controller.ControllerService", false, extensionClassLoader); + addProvidedServiceAPIs(controllerServiceClass, extensionClass, serviceApis); + return serviceApis; + } - for (final Class<?> implementedInterface : extensionClass.getInterfaces()) { - if (controllerServiceClass.isAssignableFrom(implementedInterface)) { - final ClassLoader interfaceClassLoader = implementedInterface.getClassLoader(); - if (interfaceClassLoader instanceof ExtensionClassLoader) { - final Artifact interfaceNarArtifact = ((ExtensionClassLoader) interfaceClassLoader).getNarArtifact(); + private void addProvidedServiceAPIs(final Class<?> controllerServiceClass, final Class<?> extensionClass, final Set<ServiceAPIDefinition> serviceApis) { + if (extensionClass.getInterfaces() != null) { + for (final Class<?> implementedInterface : extensionClass.getInterfaces()) { + if (controllerServiceClass.isAssignableFrom(implementedInterface) && !controllerServiceClass.equals(implementedInterface)) { + final ClassLoader interfaceClassLoader = implementedInterface.getClassLoader(); + if (interfaceClassLoader instanceof ExtensionClassLoader) { + final Artifact interfaceNarArtifact = ((ExtensionClassLoader) interfaceClassLoader).getNarArtifact(); - final ServiceAPIDefinition serviceDefinition = new StandardServiceAPIDefinition(implementedInterface.getName(), - interfaceNarArtifact.getGroupId(), interfaceNarArtifact.getArtifactId(), interfaceNarArtifact.getBaseVersion()); + final ServiceAPIDefinition serviceDefinition = new StandardServiceAPIDefinition(implementedInterface.getName(), + interfaceNarArtifact.getGroupId(), interfaceNarArtifact.getArtifactId(), interfaceNarArtifact.getBaseVersion()); - serviceApis.add(serviceDefinition); + serviceApis.add(serviceDefinition); + } } } } - return serviceApis; + if (extensionClass.getSuperclass() != null) { + addProvidedServiceAPIs(controllerServiceClass, extensionClass.getSuperclass(), serviceApis); + } } private Set<String> discoverClassNames(final String extensionType) throws IOException {