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 <[email protected]>
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 {