private Map getRequiredServiceDefinitions()

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;
    }