http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/util/ReflectionUtils.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/util/ReflectionUtils.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/util/ReflectionUtils.java
index 449bd07..b16c605 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/util/ReflectionUtils.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/util/ReflectionUtils.java
@@ -1,139 +1,139 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation.util;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.nifi.logging.ProcessorLog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class is a copy of org.apache.nifi.util.ReflectionUtils.  Ultimately 
the documentation generation
- * component should be moved to a place where it can depend on this directly 
instead of copying it in.
- *
- *
- */
-public class ReflectionUtils {
-
-    private final static Logger LOG = 
LoggerFactory.getLogger(ReflectionUtils.class);
-    /**
-     * Invokes all methods on the given instance that have been annotated with 
the given preferredAnnotation and if no such method exists will invoke all 
methods on the given instance that have been
-     * annotated with the given alternateAnnotation, if any exists. If the 
signature of the method that is defined in <code>instance</code> uses 1 or more 
parameters, those parameters must be
-     * specified by the <code>args</code> parameter. However, if more 
arguments are supplied by the <code>args</code> parameter than needed, the 
extra arguments will be ignored.
-     *
-     * @param preferredAnnotation preferred
-     * @param alternateAnnotation alternate
-     * @param instance instance
-     * @param logger the ProcessorLog to use for logging any errors. If null, 
will use own logger, but that will not generate bulletins or easily tie to the 
Processor's log messages.
-     * @param args args
-     * @return <code>true</code> if all appropriate methods were invoked and 
returned without throwing an Exception, <code>false</code> if one of the 
methods threw an Exception or could not be
-     * invoked; if <code>false</code> is returned, an error will have been 
logged.
-     */
-    public static boolean quietlyInvokeMethodsWithAnnotations(
-            final Class<? extends Annotation> preferredAnnotation, final 
Class<? extends Annotation> alternateAnnotation, final Object instance, final 
ProcessorLog logger, final Object... args) {
-        final List<Class<? extends Annotation>> annotationClasses = new 
ArrayList<>(alternateAnnotation == null ? 1 : 2);
-        annotationClasses.add(preferredAnnotation);
-        if (alternateAnnotation != null) {
-            annotationClasses.add(alternateAnnotation);
-        }
-
-        boolean annotationFound = false;
-        for (final Class<? extends Annotation> annotationClass : 
annotationClasses) {
-            if (annotationFound) {
-                break;
-            }
-
-            for (final Method method : instance.getClass().getMethods()) {
-                if (method.isAnnotationPresent(annotationClass)) {
-                    annotationFound = true;
-
-                    final boolean isAccessible = method.isAccessible();
-                    method.setAccessible(true);
-
-                    try {
-                        final Class<?>[] argumentTypes = 
method.getParameterTypes();
-                        if (argumentTypes.length > args.length) {
-                            if (logger == null) {
-                                LOG.error("Unable to invoke method {} on {} 
because method expects {} parameters but only {} were given",
-                                        new Object[]{method.getName(), 
instance, argumentTypes.length, args.length});
-                            } else {
-                                logger.error("Unable to invoke method {} on {} 
because method expects {} parameters but only {} were given",
-                                        new Object[]{method.getName(), 
instance, argumentTypes.length, args.length});
-                            }
-
-                            return false;
-                        }
-
-                        for (int i = 0; i < argumentTypes.length; i++) {
-                            final Class<?> argType = argumentTypes[i];
-                            if (!argType.isAssignableFrom(args[i].getClass())) 
{
-                                if (logger == null) {
-                                    LOG.error("Unable to invoke method {} on 
{} because method parameter {} is expected to be of type {} but argument passed 
was of type {}",
-                                            new Object[]{method.getName(), 
instance, i, argType, args[i].getClass()});
-                                } else {
-                                    logger.error("Unable to invoke method {} 
on {} because method parameter {} is expected to be of type {} but argument 
passed was of type {}",
-                                            new Object[]{method.getName(), 
instance, i, argType, args[i].getClass()});
-                                }
-
-                                return false;
-                            }
-                        }
-
-                        try {
-                            if (argumentTypes.length == args.length) {
-                                method.invoke(instance, args);
-                            } else {
-                                final Object[] argsToPass = new 
Object[argumentTypes.length];
-                                for (int i = 0; i < argsToPass.length; i++) {
-                                    argsToPass[i] = args[i];
-                                }
-
-                                method.invoke(instance, argsToPass);
-                            }
-                        } catch (final InvocationTargetException ite) {
-                            if (logger == null) {
-                                LOG.error("Unable to invoke method {} on {} 
due to {}", new Object[]{method.getName(), instance, ite.getCause()});
-                                LOG.error("", ite.getCause());
-                            } else {
-                                logger.error("Unable to invoke method {} on {} 
due to {}", new Object[]{method.getName(), instance, ite.getCause()});
-                            }
-                        } catch (final IllegalAccessException | 
IllegalArgumentException t) {
-                            if (logger == null) {
-                                LOG.error("Unable to invoke method {} on {} 
due to {}", new Object[]{method.getName(), instance, t});
-                                LOG.error("", t);
-                            } else {
-                                logger.error("Unable to invoke method {} on {} 
due to {}", new Object[]{method.getName(), instance, t});
-                            }
-
-                            return false;
-                        }
-                    } finally {
-                        if (!isAccessible) {
-                            method.setAccessible(false);
-                        }
-                    }
-                }
-            }
-        }
-        return true;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation.util;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.nifi.logging.ProcessorLog;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class is a copy of org.apache.nifi.util.ReflectionUtils.  Ultimately 
the documentation generation
+ * component should be moved to a place where it can depend on this directly 
instead of copying it in.
+ *
+ *
+ */
+public class ReflectionUtils {
+
+    private final static Logger LOG = 
LoggerFactory.getLogger(ReflectionUtils.class);
+    /**
+     * Invokes all methods on the given instance that have been annotated with 
the given preferredAnnotation and if no such method exists will invoke all 
methods on the given instance that have been
+     * annotated with the given alternateAnnotation, if any exists. If the 
signature of the method that is defined in <code>instance</code> uses 1 or more 
parameters, those parameters must be
+     * specified by the <code>args</code> parameter. However, if more 
arguments are supplied by the <code>args</code> parameter than needed, the 
extra arguments will be ignored.
+     *
+     * @param preferredAnnotation preferred
+     * @param alternateAnnotation alternate
+     * @param instance instance
+     * @param logger the ProcessorLog to use for logging any errors. If null, 
will use own logger, but that will not generate bulletins or easily tie to the 
Processor's log messages.
+     * @param args args
+     * @return <code>true</code> if all appropriate methods were invoked and 
returned without throwing an Exception, <code>false</code> if one of the 
methods threw an Exception or could not be
+     * invoked; if <code>false</code> is returned, an error will have been 
logged.
+     */
+    public static boolean quietlyInvokeMethodsWithAnnotations(
+            final Class<? extends Annotation> preferredAnnotation, final 
Class<? extends Annotation> alternateAnnotation, final Object instance, final 
ProcessorLog logger, final Object... args) {
+        final List<Class<? extends Annotation>> annotationClasses = new 
ArrayList<>(alternateAnnotation == null ? 1 : 2);
+        annotationClasses.add(preferredAnnotation);
+        if (alternateAnnotation != null) {
+            annotationClasses.add(alternateAnnotation);
+        }
+
+        boolean annotationFound = false;
+        for (final Class<? extends Annotation> annotationClass : 
annotationClasses) {
+            if (annotationFound) {
+                break;
+            }
+
+            for (final Method method : instance.getClass().getMethods()) {
+                if (method.isAnnotationPresent(annotationClass)) {
+                    annotationFound = true;
+
+                    final boolean isAccessible = method.isAccessible();
+                    method.setAccessible(true);
+
+                    try {
+                        final Class<?>[] argumentTypes = 
method.getParameterTypes();
+                        if (argumentTypes.length > args.length) {
+                            if (logger == null) {
+                                LOG.error("Unable to invoke method {} on {} 
because method expects {} parameters but only {} were given",
+                                        new Object[]{method.getName(), 
instance, argumentTypes.length, args.length});
+                            } else {
+                                logger.error("Unable to invoke method {} on {} 
because method expects {} parameters but only {} were given",
+                                        new Object[]{method.getName(), 
instance, argumentTypes.length, args.length});
+                            }
+
+                            return false;
+                        }
+
+                        for (int i = 0; i < argumentTypes.length; i++) {
+                            final Class<?> argType = argumentTypes[i];
+                            if (!argType.isAssignableFrom(args[i].getClass())) 
{
+                                if (logger == null) {
+                                    LOG.error("Unable to invoke method {} on 
{} because method parameter {} is expected to be of type {} but argument passed 
was of type {}",
+                                            new Object[]{method.getName(), 
instance, i, argType, args[i].getClass()});
+                                } else {
+                                    logger.error("Unable to invoke method {} 
on {} because method parameter {} is expected to be of type {} but argument 
passed was of type {}",
+                                            new Object[]{method.getName(), 
instance, i, argType, args[i].getClass()});
+                                }
+
+                                return false;
+                            }
+                        }
+
+                        try {
+                            if (argumentTypes.length == args.length) {
+                                method.invoke(instance, args);
+                            } else {
+                                final Object[] argsToPass = new 
Object[argumentTypes.length];
+                                for (int i = 0; i < argsToPass.length; i++) {
+                                    argsToPass[i] = args[i];
+                                }
+
+                                method.invoke(instance, argsToPass);
+                            }
+                        } catch (final InvocationTargetException ite) {
+                            if (logger == null) {
+                                LOG.error("Unable to invoke method {} on {} 
due to {}", new Object[]{method.getName(), instance, ite.getCause()});
+                                LOG.error("", ite.getCause());
+                            } else {
+                                logger.error("Unable to invoke method {} on {} 
due to {}", new Object[]{method.getName(), instance, ite.getCause()});
+                            }
+                        } catch (final IllegalAccessException | 
IllegalArgumentException t) {
+                            if (logger == null) {
+                                LOG.error("Unable to invoke method {} on {} 
due to {}", new Object[]{method.getName(), instance, t});
+                                LOG.error("", t);
+                            } else {
+                                logger.error("Unable to invoke method {} on {} 
due to {}", new Object[]{method.getName(), instance, t});
+                            }
+
+                            return false;
+                        }
+                    } finally {
+                        if (!isAccessible) {
+                            method.setAccessible(false);
+                        }
+                    }
+                }
+            }
+        }
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/DocGeneratorTest.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/DocGeneratorTest.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/DocGeneratorTest.java
index 9438601..2a3246b 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/DocGeneratorTest.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/DocGeneratorTest.java
@@ -1,96 +1,96 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.nifi.nar.ExtensionManager;
-import org.apache.nifi.nar.NarClassLoaders;
-import org.apache.nifi.nar.NarUnpacker;
-import org.apache.nifi.util.NiFiProperties;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-
-public class DocGeneratorTest {
-
-    @Test
-    public void testProcessorLoadsNarResources() throws IOException, 
ClassNotFoundException {
-        TemporaryFolder temporaryFolder = new TemporaryFolder();
-        temporaryFolder.create();
-
-        NiFiProperties properties = 
loadSpecifiedProperties("/conf/nifi.properties");
-        properties.setProperty(NiFiProperties.COMPONENT_DOCS_DIRECTORY, 
temporaryFolder.getRoot().getAbsolutePath());
-
-        NarUnpacker.unpackNars(properties);
-
-        NarClassLoaders.load(properties);
-
-        ExtensionManager.discoverExtensions();
-
-        DocGenerator.generate(properties);
-
-        File processorDirectory = new File(temporaryFolder.getRoot(), 
"org.apache.nifi.processors.WriteResourceToStream");
-        File indexHtml = new File(processorDirectory, "index.html");
-        Assert.assertTrue(indexHtml + " should have been generated", 
indexHtml.exists());
-        String generatedHtml = FileUtils.readFileToString(indexHtml);
-        Assert.assertNotNull(generatedHtml);
-        Assert.assertTrue(generatedHtml.contains("This example processor loads 
a resource from the nar and writes it to the FlowFile content"));
-        Assert.assertTrue(generatedHtml.contains("files that were successfully 
processed"));
-        Assert.assertTrue(generatedHtml.contains("files that were not 
successfully processed"));
-        Assert.assertTrue(generatedHtml.contains("resources"));
-    }
-
-    private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
-        String file = 
DocGeneratorTest.class.getResource(propertiesFile).getFile();
-
-        System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
-
-        NiFiProperties properties = NiFiProperties.getInstance();
-
-        // clear out existing properties
-        for (String prop : properties.stringPropertyNames()) {
-            properties.remove(prop);
-        }
-
-        InputStream inStream = null;
-        try {
-            inStream = new BufferedInputStream(new FileInputStream(file));
-            properties.load(inStream);
-        } catch (final Exception ex) {
-            throw new RuntimeException("Cannot load properties file due to "
-                    + ex.getLocalizedMessage(), ex);
-        } finally {
-            if (null != inStream) {
-                try {
-                    inStream.close();
-                } catch (final Exception ex) {
-                    /**
-                     * do nothing *
-                     */
-                }
-            }
-        }
-
-        return properties;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.nifi.nar.ExtensionManager;
+import org.apache.nifi.nar.NarClassLoaders;
+import org.apache.nifi.nar.NarUnpacker;
+import org.apache.nifi.util.NiFiProperties;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class DocGeneratorTest {
+
+    @Test
+    public void testProcessorLoadsNarResources() throws IOException, 
ClassNotFoundException {
+        TemporaryFolder temporaryFolder = new TemporaryFolder();
+        temporaryFolder.create();
+
+        NiFiProperties properties = 
loadSpecifiedProperties("/conf/nifi.properties");
+        properties.setProperty(NiFiProperties.COMPONENT_DOCS_DIRECTORY, 
temporaryFolder.getRoot().getAbsolutePath());
+
+        NarUnpacker.unpackNars(properties);
+
+        NarClassLoaders.load(properties);
+
+        ExtensionManager.discoverExtensions();
+
+        DocGenerator.generate(properties);
+
+        File processorDirectory = new File(temporaryFolder.getRoot(), 
"org.apache.nifi.processors.WriteResourceToStream");
+        File indexHtml = new File(processorDirectory, "index.html");
+        Assert.assertTrue(indexHtml + " should have been generated", 
indexHtml.exists());
+        String generatedHtml = FileUtils.readFileToString(indexHtml);
+        Assert.assertNotNull(generatedHtml);
+        Assert.assertTrue(generatedHtml.contains("This example processor loads 
a resource from the nar and writes it to the FlowFile content"));
+        Assert.assertTrue(generatedHtml.contains("files that were successfully 
processed"));
+        Assert.assertTrue(generatedHtml.contains("files that were not 
successfully processed"));
+        Assert.assertTrue(generatedHtml.contains("resources"));
+    }
+
+    private NiFiProperties loadSpecifiedProperties(String propertiesFile) {
+        String file = 
DocGeneratorTest.class.getResource(propertiesFile).getFile();
+
+        System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, file);
+
+        NiFiProperties properties = NiFiProperties.getInstance();
+
+        // clear out existing properties
+        for (String prop : properties.stringPropertyNames()) {
+            properties.remove(prop);
+        }
+
+        InputStream inStream = null;
+        try {
+            inStream = new BufferedInputStream(new FileInputStream(file));
+            properties.load(inStream);
+        } catch (final Exception ex) {
+            throw new RuntimeException("Cannot load properties file due to "
+                    + ex.getLocalizedMessage(), ex);
+        } finally {
+            if (null != inStream) {
+                try {
+                    inStream.close();
+                } catch (final Exception ex) {
+                    /**
+                     * do nothing *
+                     */
+                }
+            }
+        }
+
+        return properties;
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ControllerServiceWithLogger.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ControllerServiceWithLogger.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ControllerServiceWithLogger.java
index 054bea4..16f53e3 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ControllerServiceWithLogger.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ControllerServiceWithLogger.java
@@ -1,31 +1,31 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation.example;
-
-import org.apache.nifi.controller.AbstractControllerService;
-import org.apache.nifi.controller.ControllerServiceInitializationContext;
-import org.apache.nifi.reporting.InitializationException;
-
-public class ControllerServiceWithLogger extends AbstractControllerService {
-
-    @Override
-    public void init(ControllerServiceInitializationContext context)
-            throws InitializationException {
-        context.getLogger().info("initializing...");
-
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation.example;
+
+import org.apache.nifi.controller.AbstractControllerService;
+import org.apache.nifi.controller.ControllerServiceInitializationContext;
+import org.apache.nifi.reporting.InitializationException;
+
+public class ControllerServiceWithLogger extends AbstractControllerService {
+
+    @Override
+    public void init(ControllerServiceInitializationContext context)
+            throws InitializationException {
+        context.getLogger().info("initializing...");
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedControllerService.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedControllerService.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedControllerService.java
index ea5f622..195a75b 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedControllerService.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedControllerService.java
@@ -1,103 +1,103 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation.example;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.nifi.annotation.documentation.CapabilityDescription;
-import org.apache.nifi.annotation.documentation.Tags;
-import org.apache.nifi.annotation.lifecycle.OnRemoved;
-import org.apache.nifi.annotation.lifecycle.OnShutdown;
-import org.apache.nifi.components.PropertyDescriptor;
-import org.apache.nifi.controller.AbstractControllerService;
-import org.apache.nifi.controller.ConfigurationContext;
-import org.apache.nifi.processor.util.StandardValidators;
-
-@CapabilityDescription("A documented controller service that can help you do 
things")
-@Tags({ "one", "two", "three" })
-public class FullyDocumentedControllerService extends 
AbstractControllerService implements SampleService {
-
-    public static final PropertyDescriptor KEYSTORE = new 
PropertyDescriptor.Builder().name("Keystore Filename").description("The 
fully-qualified filename of the Keystore").defaultValue(null)
-            
.addValidator(StandardValidators.FILE_EXISTS_VALIDATOR).sensitive(false).build();
-    public static final PropertyDescriptor KEYSTORE_TYPE = new 
PropertyDescriptor.Builder().name("Keystore Type").description("The Type of the 
Keystore").allowableValues("JKS", "PKCS12")
-            
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR).defaultValue("JKS").sensitive(false).build();
-    public static final PropertyDescriptor KEYSTORE_PASSWORD = new 
PropertyDescriptor.Builder().name("Keystore 
Password").defaultValue(null).description("The password for the Keystore")
-            
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR).sensitive(true).build();
-
-    private static final List<PropertyDescriptor> properties;
-
-    private int onRemovedNoArgs = 0;
-    private int onRemovedArgs = 0;
-
-    private int onShutdownNoArgs = 0;
-    private int onShutdownArgs = 0;
-
-    static {
-        List<PropertyDescriptor> props = new ArrayList<>();
-        props.add(KEYSTORE);
-        props.add(KEYSTORE_PASSWORD);
-        props.add(KEYSTORE_TYPE);
-        properties = Collections.unmodifiableList(props);
-    }
-
-    @Override
-    protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
-        return properties;
-    }
-
-    @Override
-    public void doSomething() {
-    }
-
-    @OnRemoved
-    public void onRemovedNoArgs() {
-        onRemovedNoArgs++;
-    }
-
-    @OnRemoved
-    public void onRemovedArgs(ConfigurationContext context) {
-        onRemovedArgs++;
-    }
-
-    @OnShutdown
-    public void onShutdownNoArgs() {
-        onShutdownNoArgs++;
-    }
-
-    @OnShutdown
-    public void onShutdownArgs(ConfigurationContext context) {
-        onShutdownArgs++;
-    }
-
-    public int getOnRemovedNoArgs() {
-        return onRemovedNoArgs;
-    }
-
-    public int getOnRemovedArgs() {
-        return onRemovedArgs;
-    }
-
-    public int getOnShutdownNoArgs() {
-        return onShutdownNoArgs;
-    }
-
-    public int getOnShutdownArgs() {
-        return onShutdownArgs;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation.example;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.nifi.annotation.documentation.CapabilityDescription;
+import org.apache.nifi.annotation.documentation.Tags;
+import org.apache.nifi.annotation.lifecycle.OnRemoved;
+import org.apache.nifi.annotation.lifecycle.OnShutdown;
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.controller.AbstractControllerService;
+import org.apache.nifi.controller.ConfigurationContext;
+import org.apache.nifi.processor.util.StandardValidators;
+
+@CapabilityDescription("A documented controller service that can help you do 
things")
+@Tags({ "one", "two", "three" })
+public class FullyDocumentedControllerService extends 
AbstractControllerService implements SampleService {
+
+    public static final PropertyDescriptor KEYSTORE = new 
PropertyDescriptor.Builder().name("Keystore Filename").description("The 
fully-qualified filename of the Keystore").defaultValue(null)
+            
.addValidator(StandardValidators.FILE_EXISTS_VALIDATOR).sensitive(false).build();
+    public static final PropertyDescriptor KEYSTORE_TYPE = new 
PropertyDescriptor.Builder().name("Keystore Type").description("The Type of the 
Keystore").allowableValues("JKS", "PKCS12")
+            
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR).defaultValue("JKS").sensitive(false).build();
+    public static final PropertyDescriptor KEYSTORE_PASSWORD = new 
PropertyDescriptor.Builder().name("Keystore 
Password").defaultValue(null).description("The password for the Keystore")
+            
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR).sensitive(true).build();
+
+    private static final List<PropertyDescriptor> properties;
+
+    private int onRemovedNoArgs = 0;
+    private int onRemovedArgs = 0;
+
+    private int onShutdownNoArgs = 0;
+    private int onShutdownArgs = 0;
+
+    static {
+        List<PropertyDescriptor> props = new ArrayList<>();
+        props.add(KEYSTORE);
+        props.add(KEYSTORE_PASSWORD);
+        props.add(KEYSTORE_TYPE);
+        properties = Collections.unmodifiableList(props);
+    }
+
+    @Override
+    protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
+        return properties;
+    }
+
+    @Override
+    public void doSomething() {
+    }
+
+    @OnRemoved
+    public void onRemovedNoArgs() {
+        onRemovedNoArgs++;
+    }
+
+    @OnRemoved
+    public void onRemovedArgs(ConfigurationContext context) {
+        onRemovedArgs++;
+    }
+
+    @OnShutdown
+    public void onShutdownNoArgs() {
+        onShutdownNoArgs++;
+    }
+
+    @OnShutdown
+    public void onShutdownArgs(ConfigurationContext context) {
+        onShutdownArgs++;
+    }
+
+    public int getOnRemovedNoArgs() {
+        return onRemovedNoArgs;
+    }
+
+    public int getOnRemovedArgs() {
+        return onRemovedArgs;
+    }
+
+    public int getOnShutdownNoArgs() {
+        return onShutdownNoArgs;
+    }
+
+    public int getOnShutdownArgs() {
+        return onShutdownArgs;
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java
index 379c10b..1144e25 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedProcessor.java
@@ -1,172 +1,172 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation.example;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.nifi.annotation.behavior.DynamicProperty;
-import org.apache.nifi.annotation.behavior.DynamicRelationship;
-import org.apache.nifi.annotation.behavior.ReadsAttribute;
-import org.apache.nifi.annotation.behavior.WritesAttribute;
-import org.apache.nifi.annotation.behavior.WritesAttributes;
-import org.apache.nifi.annotation.documentation.CapabilityDescription;
-import org.apache.nifi.annotation.documentation.SeeAlso;
-import org.apache.nifi.annotation.documentation.Tags;
-import org.apache.nifi.annotation.lifecycle.OnRemoved;
-import org.apache.nifi.annotation.lifecycle.OnShutdown;
-import org.apache.nifi.components.AllowableValue;
-import org.apache.nifi.components.PropertyDescriptor;
-import org.apache.nifi.processor.AbstractProcessor;
-import org.apache.nifi.processor.ProcessContext;
-import org.apache.nifi.processor.ProcessSession;
-import org.apache.nifi.processor.ProcessorInitializationContext;
-import org.apache.nifi.processor.Relationship;
-import org.apache.nifi.processor.exception.ProcessException;
-import org.apache.nifi.processor.util.StandardValidators;
-
-@Tags({"one", "two", "three"})
-@CapabilityDescription("This is a processor that is used to test 
documentation.")
-@WritesAttributes({
-    @WritesAttribute(attribute = "first", description = "this is the first 
attribute i write"),
-    @WritesAttribute(attribute = "second")})
-@ReadsAttribute(attribute = "incoming", description = "this specifies the 
format of the thing")
-@SeeAlso(value = {FullyDocumentedControllerService.class, 
FullyDocumentedReportingTask.class}, classNames = 
{"org.apache.nifi.processor.ExampleProcessor"})
-@DynamicProperty(name = "Relationship Name", supportsExpressionLanguage = 
true, value = "some XPath", description = "Routes FlowFiles to relationships 
based on XPath")
-@DynamicRelationship(name = "name from dynamic property", description = "all 
files that match the properties XPath")
-public class FullyDocumentedProcessor extends AbstractProcessor {
-
-    public static final PropertyDescriptor DIRECTORY = new 
PropertyDescriptor.Builder().name("Input Directory")
-            .description("The input directory from which to pull 
files").required(true)
-            
.addValidator(StandardValidators.createDirectoryExistsValidator(true, false))
-            .expressionLanguageSupported(true).build();
-
-    public static final PropertyDescriptor RECURSE = new 
PropertyDescriptor.Builder().name("Recurse Subdirectories")
-            .description("Indicates whether or not to pull files from 
subdirectories").required(true)
-            .allowableValues(
-                    new AllowableValue("true", "true", "Should pull from sub 
directories"),
-                    new AllowableValue("false", "false", "Should not pull from 
sub directories")
-            ).defaultValue("true").build();
-
-    public static final PropertyDescriptor POLLING_INTERVAL = new 
PropertyDescriptor.Builder().name("Polling Interval")
-            .description("Indicates how long to wait before performing a 
directory listing").required(true)
-            
.addValidator(StandardValidators.TIME_PERIOD_VALIDATOR).defaultValue("0 
sec").build();
-
-    public static final PropertyDescriptor OPTIONAL_PROPERTY = new 
PropertyDescriptor.Builder()
-            .name("Optional Property").description("This is a property you can 
use or not").required(false).build();
-
-    public static final PropertyDescriptor TYPE_PROPERTY = new 
PropertyDescriptor.Builder()
-            .name("Type")
-            .description("This is the type of something that you can choose.  
It has several possible values")
-            .allowableValues("yes", "no", "maybe", "possibly", "not likely", 
"longer option name")
-            .required(true).build();
-
-    public static final PropertyDescriptor SERVICE_PROPERTY = new 
PropertyDescriptor.Builder()
-            .name("Controller Service").description("This is the controller 
service to use to do things")
-            
.identifiesControllerService(SampleService.class).required(true).build();
-
-    public static final Relationship REL_SUCCESS = new 
Relationship.Builder().name("success")
-            .description("Successful files").build();
-    public static final Relationship REL_FAILURE = new 
Relationship.Builder().name("failure")
-            .description("Failing files").build();
-
-    private List<PropertyDescriptor> properties;
-    private Set<Relationship> relationships;
-
-    private int onRemovedNoArgs = 0;
-    private int onRemovedArgs = 0;
-
-    private int onShutdownNoArgs = 0;
-    private int onShutdownArgs = 0;
-
-    @Override
-    protected void init(ProcessorInitializationContext context) {
-        final List<PropertyDescriptor> properties = new ArrayList<>();
-        properties.add(DIRECTORY);
-        properties.add(RECURSE);
-        properties.add(POLLING_INTERVAL);
-        properties.add(OPTIONAL_PROPERTY);
-        properties.add(TYPE_PROPERTY);
-        properties.add(SERVICE_PROPERTY);
-        this.properties = Collections.unmodifiableList(properties);
-
-        final Set<Relationship> relationships = new HashSet<>();
-        relationships.add(REL_SUCCESS);
-        relationships.add(REL_FAILURE);
-        this.relationships = Collections.unmodifiableSet(relationships);
-    }
-
-    @Override
-    protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
-        return properties;
-    }
-
-    @Override
-    public Set<Relationship> getRelationships() {
-        return relationships;
-    }
-
-    @Override
-    public void onTrigger(ProcessContext context, ProcessSession session) 
throws ProcessException {
-
-    }
-
-    @Override
-    protected PropertyDescriptor getSupportedDynamicPropertyDescriptor(String 
propertyDescriptorName) {
-        return new PropertyDescriptor.Builder().name(propertyDescriptorName)
-                .description("This is a property you can use or 
not").dynamic(true).build();
-    }
-
-    @OnRemoved
-    public void onRemovedNoArgs() {
-        onRemovedNoArgs++;
-    }
-
-    @OnRemoved
-    public void onRemovedArgs(ProcessContext context) {
-        onRemovedArgs++;
-    }
-
-    @OnShutdown
-    public void onShutdownNoArgs() {
-        onShutdownNoArgs++;
-    }
-
-    @OnShutdown
-    public void onShutdownArgs(ProcessContext context) {
-        onShutdownArgs++;
-    }
-
-    public int getOnRemovedNoArgs() {
-        return onRemovedNoArgs;
-    }
-
-    public int getOnRemovedArgs() {
-        return onRemovedArgs;
-    }
-
-    public int getOnShutdownNoArgs() {
-        return onShutdownNoArgs;
-    }
-
-    public int getOnShutdownArgs() {
-        return onShutdownArgs;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation.example;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.nifi.annotation.behavior.DynamicProperty;
+import org.apache.nifi.annotation.behavior.DynamicRelationship;
+import org.apache.nifi.annotation.behavior.ReadsAttribute;
+import org.apache.nifi.annotation.behavior.WritesAttribute;
+import org.apache.nifi.annotation.behavior.WritesAttributes;
+import org.apache.nifi.annotation.documentation.CapabilityDescription;
+import org.apache.nifi.annotation.documentation.SeeAlso;
+import org.apache.nifi.annotation.documentation.Tags;
+import org.apache.nifi.annotation.lifecycle.OnRemoved;
+import org.apache.nifi.annotation.lifecycle.OnShutdown;
+import org.apache.nifi.components.AllowableValue;
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.processor.AbstractProcessor;
+import org.apache.nifi.processor.ProcessContext;
+import org.apache.nifi.processor.ProcessSession;
+import org.apache.nifi.processor.ProcessorInitializationContext;
+import org.apache.nifi.processor.Relationship;
+import org.apache.nifi.processor.exception.ProcessException;
+import org.apache.nifi.processor.util.StandardValidators;
+
+@Tags({"one", "two", "three"})
+@CapabilityDescription("This is a processor that is used to test 
documentation.")
+@WritesAttributes({
+    @WritesAttribute(attribute = "first", description = "this is the first 
attribute i write"),
+    @WritesAttribute(attribute = "second")})
+@ReadsAttribute(attribute = "incoming", description = "this specifies the 
format of the thing")
+@SeeAlso(value = {FullyDocumentedControllerService.class, 
FullyDocumentedReportingTask.class}, classNames = 
{"org.apache.nifi.processor.ExampleProcessor"})
+@DynamicProperty(name = "Relationship Name", supportsExpressionLanguage = 
true, value = "some XPath", description = "Routes FlowFiles to relationships 
based on XPath")
+@DynamicRelationship(name = "name from dynamic property", description = "all 
files that match the properties XPath")
+public class FullyDocumentedProcessor extends AbstractProcessor {
+
+    public static final PropertyDescriptor DIRECTORY = new 
PropertyDescriptor.Builder().name("Input Directory")
+            .description("The input directory from which to pull 
files").required(true)
+            
.addValidator(StandardValidators.createDirectoryExistsValidator(true, false))
+            .expressionLanguageSupported(true).build();
+
+    public static final PropertyDescriptor RECURSE = new 
PropertyDescriptor.Builder().name("Recurse Subdirectories")
+            .description("Indicates whether or not to pull files from 
subdirectories").required(true)
+            .allowableValues(
+                    new AllowableValue("true", "true", "Should pull from sub 
directories"),
+                    new AllowableValue("false", "false", "Should not pull from 
sub directories")
+            ).defaultValue("true").build();
+
+    public static final PropertyDescriptor POLLING_INTERVAL = new 
PropertyDescriptor.Builder().name("Polling Interval")
+            .description("Indicates how long to wait before performing a 
directory listing").required(true)
+            
.addValidator(StandardValidators.TIME_PERIOD_VALIDATOR).defaultValue("0 
sec").build();
+
+    public static final PropertyDescriptor OPTIONAL_PROPERTY = new 
PropertyDescriptor.Builder()
+            .name("Optional Property").description("This is a property you can 
use or not").required(false).build();
+
+    public static final PropertyDescriptor TYPE_PROPERTY = new 
PropertyDescriptor.Builder()
+            .name("Type")
+            .description("This is the type of something that you can choose.  
It has several possible values")
+            .allowableValues("yes", "no", "maybe", "possibly", "not likely", 
"longer option name")
+            .required(true).build();
+
+    public static final PropertyDescriptor SERVICE_PROPERTY = new 
PropertyDescriptor.Builder()
+            .name("Controller Service").description("This is the controller 
service to use to do things")
+            
.identifiesControllerService(SampleService.class).required(true).build();
+
+    public static final Relationship REL_SUCCESS = new 
Relationship.Builder().name("success")
+            .description("Successful files").build();
+    public static final Relationship REL_FAILURE = new 
Relationship.Builder().name("failure")
+            .description("Failing files").build();
+
+    private List<PropertyDescriptor> properties;
+    private Set<Relationship> relationships;
+
+    private int onRemovedNoArgs = 0;
+    private int onRemovedArgs = 0;
+
+    private int onShutdownNoArgs = 0;
+    private int onShutdownArgs = 0;
+
+    @Override
+    protected void init(ProcessorInitializationContext context) {
+        final List<PropertyDescriptor> properties = new ArrayList<>();
+        properties.add(DIRECTORY);
+        properties.add(RECURSE);
+        properties.add(POLLING_INTERVAL);
+        properties.add(OPTIONAL_PROPERTY);
+        properties.add(TYPE_PROPERTY);
+        properties.add(SERVICE_PROPERTY);
+        this.properties = Collections.unmodifiableList(properties);
+
+        final Set<Relationship> relationships = new HashSet<>();
+        relationships.add(REL_SUCCESS);
+        relationships.add(REL_FAILURE);
+        this.relationships = Collections.unmodifiableSet(relationships);
+    }
+
+    @Override
+    protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
+        return properties;
+    }
+
+    @Override
+    public Set<Relationship> getRelationships() {
+        return relationships;
+    }
+
+    @Override
+    public void onTrigger(ProcessContext context, ProcessSession session) 
throws ProcessException {
+
+    }
+
+    @Override
+    protected PropertyDescriptor getSupportedDynamicPropertyDescriptor(String 
propertyDescriptorName) {
+        return new PropertyDescriptor.Builder().name(propertyDescriptorName)
+                .description("This is a property you can use or 
not").dynamic(true).build();
+    }
+
+    @OnRemoved
+    public void onRemovedNoArgs() {
+        onRemovedNoArgs++;
+    }
+
+    @OnRemoved
+    public void onRemovedArgs(ProcessContext context) {
+        onRemovedArgs++;
+    }
+
+    @OnShutdown
+    public void onShutdownNoArgs() {
+        onShutdownNoArgs++;
+    }
+
+    @OnShutdown
+    public void onShutdownArgs(ProcessContext context) {
+        onShutdownArgs++;
+    }
+
+    public int getOnRemovedNoArgs() {
+        return onRemovedNoArgs;
+    }
+
+    public int getOnRemovedArgs() {
+        return onRemovedArgs;
+    }
+
+    public int getOnShutdownNoArgs() {
+        return onShutdownNoArgs;
+    }
+
+    public int getOnShutdownArgs() {
+        return onShutdownArgs;
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedReportingTask.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedReportingTask.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedReportingTask.java
index 43929be..28a6dc6 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedReportingTask.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/FullyDocumentedReportingTask.java
@@ -1,94 +1,94 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation.example;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.nifi.components.PropertyDescriptor;
-import org.apache.nifi.controller.ConfigurationContext;
-import org.apache.nifi.annotation.documentation.CapabilityDescription;
-import org.apache.nifi.annotation.documentation.Tags;
-import org.apache.nifi.annotation.lifecycle.OnRemoved;
-import org.apache.nifi.annotation.lifecycle.OnShutdown;
-import org.apache.nifi.reporting.AbstractReportingTask;
-import org.apache.nifi.reporting.ReportingContext;
-
-@CapabilityDescription("A helper reporting task to do...")
-@Tags({"first", "second", "third"})
-public class FullyDocumentedReportingTask extends AbstractReportingTask {
-
-    public static final PropertyDescriptor SHOW_DELTAS = new 
PropertyDescriptor.Builder()
-            .name("Show Deltas")
-            .description(
-                    "Specifies whether or not to show the difference in values 
between the current status and the previous status")
-            .required(true).allowableValues("true", 
"false").defaultValue("true").build();
-
-    private int onRemovedNoArgs = 0;
-    private int onRemovedArgs = 0;
-
-    private int onShutdownNoArgs = 0;
-    private int onShutdownArgs = 0;
-
-    @Override
-    public final List<PropertyDescriptor> getSupportedPropertyDescriptors() {
-        final List<PropertyDescriptor> descriptors = new ArrayList<>();
-        descriptors.add(SHOW_DELTAS);
-        return descriptors;
-    }
-
-    @Override
-    public void onTrigger(ReportingContext context) {
-
-    }
-
-    @OnRemoved
-    public void onRemovedNoArgs() {
-        onRemovedNoArgs++;
-    }
-
-    @OnRemoved
-    public void onRemovedArgs(ConfigurationContext context) {
-        onRemovedArgs++;
-    }
-
-    @OnShutdown
-    public void onShutdownNoArgs() {
-        onShutdownNoArgs++;
-    }
-
-    @OnShutdown
-    public void onShutdownArgs(ConfigurationContext context) {
-        onShutdownArgs++;
-    }
-
-    public int getOnRemovedNoArgs() {
-        return onRemovedNoArgs;
-    }
-
-    public int getOnRemovedArgs() {
-        return onRemovedArgs;
-    }
-
-    public int getOnShutdownNoArgs() {
-        return onShutdownNoArgs;
-    }
-
-    public int getOnShutdownArgs() {
-        return onShutdownArgs;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation.example;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.controller.ConfigurationContext;
+import org.apache.nifi.annotation.documentation.CapabilityDescription;
+import org.apache.nifi.annotation.documentation.Tags;
+import org.apache.nifi.annotation.lifecycle.OnRemoved;
+import org.apache.nifi.annotation.lifecycle.OnShutdown;
+import org.apache.nifi.reporting.AbstractReportingTask;
+import org.apache.nifi.reporting.ReportingContext;
+
+@CapabilityDescription("A helper reporting task to do...")
+@Tags({"first", "second", "third"})
+public class FullyDocumentedReportingTask extends AbstractReportingTask {
+
+    public static final PropertyDescriptor SHOW_DELTAS = new 
PropertyDescriptor.Builder()
+            .name("Show Deltas")
+            .description(
+                    "Specifies whether or not to show the difference in values 
between the current status and the previous status")
+            .required(true).allowableValues("true", 
"false").defaultValue("true").build();
+
+    private int onRemovedNoArgs = 0;
+    private int onRemovedArgs = 0;
+
+    private int onShutdownNoArgs = 0;
+    private int onShutdownArgs = 0;
+
+    @Override
+    public final List<PropertyDescriptor> getSupportedPropertyDescriptors() {
+        final List<PropertyDescriptor> descriptors = new ArrayList<>();
+        descriptors.add(SHOW_DELTAS);
+        return descriptors;
+    }
+
+    @Override
+    public void onTrigger(ReportingContext context) {
+
+    }
+
+    @OnRemoved
+    public void onRemovedNoArgs() {
+        onRemovedNoArgs++;
+    }
+
+    @OnRemoved
+    public void onRemovedArgs(ConfigurationContext context) {
+        onRemovedArgs++;
+    }
+
+    @OnShutdown
+    public void onShutdownNoArgs() {
+        onShutdownNoArgs++;
+    }
+
+    @OnShutdown
+    public void onShutdownArgs(ConfigurationContext context) {
+        onShutdownArgs++;
+    }
+
+    public int getOnRemovedNoArgs() {
+        return onRemovedNoArgs;
+    }
+
+    public int getOnRemovedArgs() {
+        return onRemovedArgs;
+    }
+
+    public int getOnShutdownNoArgs() {
+        return onShutdownNoArgs;
+    }
+
+    public int getOnShutdownArgs() {
+        return onShutdownArgs;
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
index e288f0a..d5d2bed 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/NakedProcessor.java
@@ -1,31 +1,31 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation.example;
-
-import org.apache.nifi.processor.AbstractProcessor;
-import org.apache.nifi.processor.ProcessContext;
-import org.apache.nifi.processor.ProcessSession;
-import org.apache.nifi.processor.exception.ProcessException;
-
-public class NakedProcessor extends AbstractProcessor {
-
-    @Override
-    public void onTrigger(ProcessContext arg0, ProcessSession arg1) throws 
ProcessException {
-
-    }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation.example;
+
+import org.apache.nifi.processor.AbstractProcessor;
+import org.apache.nifi.processor.ProcessContext;
+import org.apache.nifi.processor.ProcessSession;
+import org.apache.nifi.processor.exception.ProcessException;
+
+public class NakedProcessor extends AbstractProcessor {
+
+    @Override
+    public void onTrigger(ProcessContext arg0, ProcessSession arg1) throws 
ProcessException {
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ProcessorWithLogger.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ProcessorWithLogger.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ProcessorWithLogger.java
index aca90ad..d1ba3c3 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ProcessorWithLogger.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ProcessorWithLogger.java
@@ -1,37 +1,37 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation.example;
-
-import org.apache.nifi.processor.AbstractProcessor;
-import org.apache.nifi.processor.ProcessContext;
-import org.apache.nifi.processor.ProcessSession;
-import org.apache.nifi.processor.ProcessorInitializationContext;
-import org.apache.nifi.processor.exception.ProcessException;
-
-public class ProcessorWithLogger extends AbstractProcessor {
-
-    @Override
-    protected void init(ProcessorInitializationContext context) {
-        context.getLogger().info("Initializing...");
-    }
-
-    @Override
-    public void onTrigger(ProcessContext context, ProcessSession session)
-            throws ProcessException {
-
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation.example;
+
+import org.apache.nifi.processor.AbstractProcessor;
+import org.apache.nifi.processor.ProcessContext;
+import org.apache.nifi.processor.ProcessSession;
+import org.apache.nifi.processor.ProcessorInitializationContext;
+import org.apache.nifi.processor.exception.ProcessException;
+
+public class ProcessorWithLogger extends AbstractProcessor {
+
+    @Override
+    protected void init(ProcessorInitializationContext context) {
+        context.getLogger().info("Initializing...");
+    }
+
+    @Override
+    public void onTrigger(ProcessContext context, ProcessSession session)
+            throws ProcessException {
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ReportingTaskWithLogger.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ReportingTaskWithLogger.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ReportingTaskWithLogger.java
index e58c637..aeacebb 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ReportingTaskWithLogger.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/ReportingTaskWithLogger.java
@@ -1,36 +1,36 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation.example;
-
-import org.apache.nifi.reporting.AbstractReportingTask;
-import org.apache.nifi.reporting.InitializationException;
-import org.apache.nifi.reporting.ReportingContext;
-import org.apache.nifi.reporting.ReportingInitializationContext;
-
-public class ReportingTaskWithLogger extends AbstractReportingTask {
-
-    @Override
-    public void init(ReportingInitializationContext config)
-            throws InitializationException {
-       config.getLogger().info("Initializing...");
-    }
-
-    @Override
-    public void onTrigger(ReportingContext context) {
-
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation.example;
+
+import org.apache.nifi.reporting.AbstractReportingTask;
+import org.apache.nifi.reporting.InitializationException;
+import org.apache.nifi.reporting.ReportingContext;
+import org.apache.nifi.reporting.ReportingInitializationContext;
+
+public class ReportingTaskWithLogger extends AbstractReportingTask {
+
+    @Override
+    public void init(ReportingInitializationContext config)
+            throws InitializationException {
+       config.getLogger().info("Initializing...");
+    }
+
+    @Override
+    public void onTrigger(ReportingContext context) {
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/3a7ddc6a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/SampleService.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/SampleService.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/SampleService.java
index 6f84c15..3289a70 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/SampleService.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/SampleService.java
@@ -1,25 +1,25 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.documentation.example;
-
-import org.apache.nifi.controller.ControllerService;
-
-public interface SampleService extends ControllerService {
-
-    public void doSomething();
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.documentation.example;
+
+import org.apache.nifi.controller.ControllerService;
+
+public interface SampleService extends ControllerService {
+
+    public void doSomething();
+
+}

Reply via email to