in src/main/java/org/apache/nifi/NarMojo.java [721:768]
private Map<String,ServiceAPIDefinition> getRequiredServiceDefinitions(final Class<?> extensionClass, final Object extensionInstance)
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
final Map<String,ServiceAPIDefinition> requiredServiceAPIDefinitions = new HashMap<>();
final Method writeMethod = extensionClass.getMethod("getPropertyDescriptors");
final List<Object> propertyDescriptors = (List<Object>) writeMethod.invoke(extensionInstance);
if (propertyDescriptors == null) {
return requiredServiceAPIDefinitions;
}
for (final Object propDescriptor : propertyDescriptors) {
final Method nameMethod = propDescriptor.getClass().getMethod("getName");
final String propName = (String) nameMethod.invoke(propDescriptor);
final Method serviceDefinitionMethod = propDescriptor.getClass().getMethod("getControllerServiceDefinition");
final Object serviceDefinition = serviceDefinitionMethod.invoke(propDescriptor);
if (serviceDefinition == null) {
continue;
}
final Class<?> serviceDefinitionClass = (Class<?>) serviceDefinition;
if (CONTROLLER_SERVICE_CLASS_NAME.equals(serviceDefinitionClass.getName())) {
continue;
}
final ExtensionClassLoader extensionClassLoader = (ExtensionClassLoader) serviceDefinitionClass.getClassLoader();
final Artifact narArtifact = extensionClassLoader.getNarArtifact();
if (narArtifact == null) {
getLog().warn("Could not find NAR Artifact for Controller Service Definition " + serviceDefinitionClass.getName() +
". Documentation may not show appropriate linkage to Controller Service.");
continue;
}
final ServiceAPIDefinition serviceAPIDefinition = new StandardServiceAPIDefinition(
serviceDefinitionClass.getName(),
narArtifact.getGroupId(),
narArtifact.getArtifactId(),
narArtifact.getBaseVersion()
);
requiredServiceAPIDefinitions.put(propName, serviceAPIDefinition);
}
return requiredServiceAPIDefinitions;
}