in src/main/java/org/apache/nifi/NarMojo.java [661:690]
private void writeDocumentation(final ExtensionDefinition extensionDefinition, final ExtensionClassLoader classLoader,
final Class<?> docWriterClass, final XMLStreamWriter xmlWriter)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, ClassNotFoundException {
getLog().debug("Generating documentation for " + extensionDefinition.getExtensionName() + " using ClassLoader:" + System.lineSeparator() + classLoader.toTree());
final Object docWriter = docWriterClass.getConstructor(XMLStreamWriter.class).newInstance(xmlWriter);
final Class<?> configurableComponentClass = Class.forName("org.apache.nifi.components.ConfigurableComponent", false, classLoader);
final Class<?> extensionClass = Class.forName(extensionDefinition.getExtensionName(), false, classLoader);
final Object extensionInstance = extensionClass.getDeclaredConstructor().newInstance();
final Method initMethod = docWriterClass.getMethod("initialize", configurableComponentClass);
initMethod.invoke(docWriter, extensionInstance);
final Map<String,ServiceAPIDefinition> propertyServiceDefinitions = getRequiredServiceDefinitions(extensionClass, extensionInstance);
final Set<ServiceAPIDefinition> providedServiceDefinitions = extensionDefinition.getProvidedServiceAPIs();
if ((providedServiceDefinitions == null || providedServiceDefinitions.isEmpty())
&& (propertyServiceDefinitions == null || propertyServiceDefinitions.isEmpty())) {
final Method writeMethod = docWriterClass.getMethod("write", configurableComponentClass);
writeMethod.invoke(docWriter, extensionInstance);
} else {
final Class<?> serviceApiClass = Class.forName("org.apache.nifi.documentation.StandardServiceAPI", false, classLoader);
final List<Object> providedServices = getDocumentationServiceAPIs(serviceApiClass, providedServiceDefinitions);
final Map<String,Object> propertyServices = getDocumentationServiceAPIs(serviceApiClass, propertyServiceDefinitions);
final Method writeMethod = docWriterClass.getMethod("write", configurableComponentClass, Collection.class, Map.class);
writeMethod.invoke(docWriter, extensionInstance, providedServices, propertyServices);
}
}