This is an automated email from the ASF dual-hosted git repository.

exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new c272574dcc NIFI-12452 Improved support for DescribedValue in 
Descriptors
c272574dcc is described below

commit c272574dccba9fa212af2ba60853b88afebb6380
Author: EndzeitBegins <[email protected]>
AuthorDate: Sat Dec 2 00:49:44 2023 +0100

    NIFI-12452 Improved support for DescribedValue in Descriptors
    
    - Removed calls to Builder.defaultValue(null) in several Components
    
    This closes #8102
    
    Signed-off-by: David Handermann <[email protected]>
---
 .../apache/nifi/components/PropertyDescriptor.java | 18 ++++++++
 .../org/apache/nifi/components/PropertyValue.java  | 12 ++++++
 .../nifi/components/TestPropertyDescriptor.java    | 11 +++++
 .../expression/language/StandardPropertyValue.java | 17 ++++++++
 .../org/apache/nifi/util/MockPropertyValue.java    |  6 +++
 .../nifi/util/StandardProcessorTestRunner.java     |  3 +-
 .../main/java/org/apache/nifi/util/TestRunner.java |  3 +-
 .../azure/eventhub/PutAzureEventHub.java           |  1 -
 .../cdc/mysql/processors/CaptureChangeMySQL.java   |  1 -
 .../org/apache/nifi/dbcp/utils/DBCPProperties.java |  5 ---
 .../example/FullyDocumentedControllerService.java  |  4 +-
 .../scheduling/ConnectableProcessContext.java      |  7 +++
 .../nifi/processor/TestStandardPropertyValue.java  | 50 ++++++++++++++++++++++
 .../apache/nifi/graph/TinkerpopClientService.java  |  1 -
 .../apache/nifi/dbcp/hive/Hive3ConnectionPool.java |  3 --
 .../processors/kudu/AbstractKuduProcessor.java     |  1 -
 .../org/apache/nifi/snmp/processors/GetSNMP.java   |  1 -
 .../controller/livy/LivySessionController.java     |  1 -
 .../nifi/processors/standard/ListenHTTP.java       |  4 +-
 .../nifi/processors/standard/MergeContent.java     |  1 -
 .../nifi/processors/standard/MergeRecord.java      |  1 -
 .../nifi/processors/standard/ScanAttribute.java    |  1 -
 .../nifi/processors/standard/ValidateRecord.java   |  1 -
 .../nifi/processors/standard/TestListenHTTP.java   |  4 +-
 .../org/apache/nifi/controller/MonitorMemory.java  |  1 -
 .../flowanalysis/rules/DisallowComponentType.java  |  1 -
 .../apache/nifi/dbcp/HikariCPConnectionPool.java   |  5 ---
 .../apache/nifi/dbcp/HadoopDBCPConnectionPool.java |  5 ---
 .../java/org/apache/nifi/json/JsonTreeReader.java  |  1 -
 .../apache/nifi/ssl/StandardSSLContextService.java |  4 --
 30 files changed, 131 insertions(+), 43 deletions(-)

diff --git 
a/nifi-api/src/main/java/org/apache/nifi/components/PropertyDescriptor.java 
b/nifi-api/src/main/java/org/apache/nifi/components/PropertyDescriptor.java
index 48bc181f85..1d039058f4 100644
--- a/nifi-api/src/main/java/org/apache/nifi/components/PropertyDescriptor.java
+++ b/nifi-api/src/main/java/org/apache/nifi/components/PropertyDescriptor.java
@@ -313,6 +313,24 @@ public final class PropertyDescriptor implements 
Comparable<PropertyDescriptor>
             return this;
         }
 
+        /**
+         * Specifies the initial value and the default value that will be used
+         * if the user does not specify a value. When {@link #build()} is
+         * called, if Allowable Values have been set (see
+         * {@link #allowableValues(AllowableValue...)})
+         * and the "Value" of the {@link DescribedValue} object is not
+         * the "Value" of one of those Allowable Values, an Exception will be 
thrown.
+         * If the Allowable Values have been set using the
+         * {@link #allowableValues(AllowableValue...)} method, the default 
value
+         * should be set providing the {@link AllowableValue} to this method.
+         *
+         * @param value default value holder
+         * @return the builder
+         */
+        public Builder defaultValue(final DescribedValue value) {
+            return defaultValue(value != null ? value.getValue() : null);
+        }
+
         public Builder dynamic(final boolean dynamic) {
             this.dynamic = dynamic;
             return this;
diff --git 
a/nifi-api/src/main/java/org/apache/nifi/components/PropertyValue.java 
b/nifi-api/src/main/java/org/apache/nifi/components/PropertyValue.java
index 42527d8345..096dd907ac 100644
--- a/nifi-api/src/main/java/org/apache/nifi/components/PropertyValue.java
+++ b/nifi-api/src/main/java/org/apache/nifi/components/PropertyValue.java
@@ -134,6 +134,18 @@ public interface PropertyValue {
      */
     ResourceReferences asResources();
 
+    /**
+     * @param <E> the generic type of the enum used as allowable values
+     * @param enumType the class of the enum used as allowable values
+     * @return the DescribedValue enum entry whose value is the raw value of 
the
+     * <code>this</code>, or <code>null</code> if the value is not set.
+     * Throws an IllegalArgumentException if none of the enum entries 
correspond to the specified raw value.
+     *
+     * @throws IllegalArgumentException if the value of <code>this</code>
+     * does not point to any of the entries of the specified enum type.
+     */
+    <E extends Enum<E> & DescribedValue> E asDescribedValue(Class<E> enumType) 
throws IllegalArgumentException;
+
     /**
      * @return <code>true</code> if the user has configured a value, or if the
      * {@link PropertyDescriptor} for the associated property has a default
diff --git 
a/nifi-api/src/test/java/org/apache/nifi/components/TestPropertyDescriptor.java 
b/nifi-api/src/test/java/org/apache/nifi/components/TestPropertyDescriptor.java
index 8e20a82e52..fcaa0f7a1f 100644
--- 
a/nifi-api/src/test/java/org/apache/nifi/components/TestPropertyDescriptor.java
+++ 
b/nifi-api/src/test/java/org/apache/nifi/components/TestPropertyDescriptor.java
@@ -69,6 +69,17 @@ public class TestPropertyDescriptor {
         assertNotNull(validDescriptorBuilder.build());
     }
 
+    @Test
+    void testDefaultValueWithDescribedValue() {
+        final PropertyDescriptor propertyDescriptor = new 
PropertyDescriptor.Builder()
+                .name("defaultDescribedValueDescriptor")
+                .defaultValue(EnumAllowableValue.GREEN)
+                .build();
+
+        assertNotNull(propertyDescriptor);
+        assertEquals(EnumAllowableValue.GREEN.getValue(), 
propertyDescriptor.getDefaultValue());
+    }
+
     @Test
     void testAllowableValuesWithEnumClass() {
         final PropertyDescriptor propertyDescriptor = new 
PropertyDescriptor.Builder()
diff --git 
a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/StandardPropertyValue.java
 
b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/StandardPropertyValue.java
index 6168d65ce5..142ba945bc 100644
--- 
a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/StandardPropertyValue.java
+++ 
b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/StandardPropertyValue.java
@@ -19,6 +19,8 @@ package org.apache.nifi.attribute.expression.language;
 import java.time.Duration;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+
+import org.apache.nifi.components.DescribedValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.PropertyValue;
 import org.apache.nifi.components.resource.ResourceContext;
@@ -234,6 +236,21 @@ public class StandardPropertyValue implements 
PropertyValue {
         return 
resourceContext.getResourceReferenceFactory().createResourceReferences(rawValue,
 propertyDescriptor.getResourceDefinition());
     }
 
+    @Override
+    public <E extends Enum<E> & DescribedValue> E asDescribedValue(Class<E> 
enumType) throws IllegalArgumentException {
+        if (rawValue == null) {
+            return null;
+        }
+
+        for (E enumConstant : enumType.getEnumConstants()) {
+            if (enumConstant.getValue().equals(rawValue)) {
+                return enumConstant;
+            }
+        }
+
+        throw new IllegalArgumentException(String.format("%s does not have an 
entry with value %s", enumType.getSimpleName(), rawValue));
+    }
+
     @Override
     public boolean isSet() {
         return rawValue != null;
diff --git 
a/nifi-mock/src/main/java/org/apache/nifi/util/MockPropertyValue.java 
b/nifi-mock/src/main/java/org/apache/nifi/util/MockPropertyValue.java
index fcf910fd62..226df960f5 100644
--- a/nifi-mock/src/main/java/org/apache/nifi/util/MockPropertyValue.java
+++ b/nifi-mock/src/main/java/org/apache/nifi/util/MockPropertyValue.java
@@ -25,6 +25,7 @@ import org.apache.nifi.annotation.behavior.InputRequirement;
 import org.apache.nifi.attribute.expression.language.Query;
 import org.apache.nifi.attribute.expression.language.Query.Range;
 import org.apache.nifi.attribute.expression.language.StandardPropertyValue;
+import org.apache.nifi.components.DescribedValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.PropertyValue;
 import org.apache.nifi.components.resource.ResourceContext;
@@ -322,6 +323,11 @@ public class MockPropertyValue implements PropertyValue {
         return new 
StandardResourceReferenceFactory().createResourceReferences(rawValue, 
propertyDescriptor.getResourceDefinition());
     }
 
+    @Override
+    public <E extends Enum<E> & DescribedValue> E asDescribedValue(Class<E> 
enumType) throws IllegalArgumentException {
+        ensureExpressionsEvaluated();
+        return stdPropValue.asDescribedValue(enumType);
+    }
 
     @Override
     public boolean isSet() {
diff --git 
a/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java 
b/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
index 6dc14b4bf0..35a9badf77 100644
--- 
a/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
+++ 
b/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
@@ -27,6 +27,7 @@ import org.apache.nifi.annotation.lifecycle.OnShutdown;
 import org.apache.nifi.annotation.lifecycle.OnStopped;
 import org.apache.nifi.annotation.lifecycle.OnUnscheduled;
 import org.apache.nifi.components.AllowableValue;
+import org.apache.nifi.components.DescribedValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.ValidationContext;
 import org.apache.nifi.components.ValidationResult;
@@ -579,7 +580,7 @@ public class StandardProcessorTestRunner implements 
TestRunner {
     }
 
     @Override
-    public ValidationResult setProperty(final PropertyDescriptor descriptor, 
final AllowableValue value) {
+    public ValidationResult setProperty(final PropertyDescriptor descriptor, 
final DescribedValue value) {
         return context.setProperty(descriptor, value.getValue());
     }
 
diff --git a/nifi-mock/src/main/java/org/apache/nifi/util/TestRunner.java 
b/nifi-mock/src/main/java/org/apache/nifi/util/TestRunner.java
index 5d590f740b..640226a31e 100644
--- a/nifi-mock/src/main/java/org/apache/nifi/util/TestRunner.java
+++ b/nifi-mock/src/main/java/org/apache/nifi/util/TestRunner.java
@@ -17,6 +17,7 @@
 package org.apache.nifi.util;
 
 import org.apache.nifi.components.AllowableValue;
+import org.apache.nifi.components.DescribedValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.ValidationResult;
 import org.apache.nifi.controller.ControllerService;
@@ -247,7 +248,7 @@ public interface TestRunner {
      * @param value allowable valu
      * @return result
      */
-    ValidationResult setProperty(PropertyDescriptor descriptor, AllowableValue 
value);
+    ValidationResult setProperty(PropertyDescriptor descriptor, DescribedValue 
value);
 
     /**
      * Sets the annotation data.
diff --git 
a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/eventhub/PutAzureEventHub.java
 
b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/eventhub/PutAzureEventHub.java
index 09c01a3701..ab95bab69d 100644
--- 
a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/eventhub/PutAzureEventHub.java
+++ 
b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/eventhub/PutAzureEventHub.java
@@ -99,7 +99,6 @@ public class PutAzureEventHub extends AbstractProcessor 
implements AzureEventHub
             .required(false)
             .expressionLanguageSupported(ExpressionLanguageScope.NONE)
             .addValidator(StandardValidators.ATTRIBUTE_KEY_VALIDATOR)
-            .defaultValue(null)
             .build();
     static final PropertyDescriptor MAX_BATCH_SIZE = new 
PropertyDescriptor.Builder()
             .name("max-batch-size")
diff --git 
a/nifi-nar-bundles/nifi-cdc/nifi-cdc-mysql-bundle/nifi-cdc-mysql-processors/src/main/java/org/apache/nifi/cdc/mysql/processors/CaptureChangeMySQL.java
 
b/nifi-nar-bundles/nifi-cdc/nifi-cdc-mysql-bundle/nifi-cdc-mysql-processors/src/main/java/org/apache/nifi/cdc/mysql/processors/CaptureChangeMySQL.java
index 9054dc401c..7761dea130 100644
--- 
a/nifi-nar-bundles/nifi-cdc/nifi-cdc-mysql-bundle/nifi-cdc-mysql-processors/src/main/java/org/apache/nifi/cdc/mysql/processors/CaptureChangeMySQL.java
+++ 
b/nifi-nar-bundles/nifi-cdc/nifi-cdc-mysql-bundle/nifi-cdc-mysql-processors/src/main/java/org/apache/nifi/cdc/mysql/processors/CaptureChangeMySQL.java
@@ -256,7 +256,6 @@ public class CaptureChangeMySQL extends 
AbstractSessionFactoryProcessor {
             .displayName("MySQL Driver Location(s)")
             .description("Comma-separated list of files/folders and/or URLs 
containing the MySQL driver JAR and its dependencies (if any). "
                     + "For example 
'/var/tmp/mysql-connector-java-5.1.38-bin.jar'")
-            .defaultValue(null)
             .required(false)
             .identifiesExternalResource(ResourceCardinality.MULTIPLE, 
ResourceType.FILE, ResourceType.DIRECTORY, ResourceType.URL)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-dbcp-base/src/main/java/org/apache/nifi/dbcp/utils/DBCPProperties.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-dbcp-base/src/main/java/org/apache/nifi/dbcp/utils/DBCPProperties.java
index d84cb99b09..21d6cdde25 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-dbcp-base/src/main/java/org/apache/nifi/dbcp/utils/DBCPProperties.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-dbcp-base/src/main/java/org/apache/nifi/dbcp/utils/DBCPProperties.java
@@ -38,7 +38,6 @@ public final class DBCPProperties {
             .name("Database Connection URL")
             .description("A database connection URL used to connect to a 
database. May contain database system name, host, port, database name and some 
parameters."
                     + " The exact syntax of a database connection URL is 
specified by your DBMS.")
-            .defaultValue(null)
             .addValidator(new ConnectionUrlValidator())
             .required(true)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
@@ -47,7 +46,6 @@ public final class DBCPProperties {
     public static final PropertyDescriptor DB_USER = new 
PropertyDescriptor.Builder()
             .name("Database User")
             .description("Database user name")
-            .defaultValue(null)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
             .build();
@@ -55,7 +53,6 @@ public final class DBCPProperties {
     public static final PropertyDescriptor DB_PASSWORD = new 
PropertyDescriptor.Builder()
             .name("Password")
             .description("The password for the database user")
-            .defaultValue(null)
             .required(false)
             .sensitive(true)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
@@ -66,7 +63,6 @@ public final class DBCPProperties {
     public static final PropertyDescriptor DB_DRIVERNAME = new 
PropertyDescriptor.Builder()
             .name("Database Driver Class Name")
             .description("Database driver class name")
-            .defaultValue(null)
             .required(true)
             .addValidator(new DriverClassValidator())
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
@@ -76,7 +72,6 @@ public final class DBCPProperties {
             .name("database-driver-locations")
             .displayName("Database Driver Location(s)")
             .description("Comma-separated list of files/folders and/or URLs 
containing the driver JAR and its dependencies (if any). For example 
'/var/tmp/mariadb-java-client-1.1.7.jar'")
-            .defaultValue(null)
             .required(false)
             .identifiesExternalResource(ResourceCardinality.MULTIPLE, 
ResourceType.FILE, ResourceType.DIRECTORY, ResourceType.URL)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
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 4df7fdeeff..69a0f949a7 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
@@ -40,11 +40,11 @@ import java.util.List;
 @SystemResourceConsideration(resource = SystemResource.MEMORY, description = 
"")
 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)
+    public static final PropertyDescriptor KEYSTORE = new 
PropertyDescriptor.Builder().name("Keystore Filename").description("The 
fully-qualified filename of the Keystore")
             
.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")
+    public static final PropertyDescriptor KEYSTORE_PASSWORD = new 
PropertyDescriptor.Builder().name("Keystore Password").description("The 
password for the Keystore")
             
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR).sensitive(true).build();
 
     private static final List<PropertyDescriptor> properties;
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/controller/repository/scheduling/ConnectableProcessContext.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/controller/repository/scheduling/ConnectableProcessContext.java
index 05b03e94ab..e7fc2e06e9 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/controller/repository/scheduling/ConnectableProcessContext.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/controller/repository/scheduling/ConnectableProcessContext.java
@@ -24,6 +24,8 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
+
+import org.apache.nifi.components.DescribedValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.PropertyValue;
 import org.apache.nifi.components.resource.ResourceReference;
@@ -151,6 +153,11 @@ public class ConnectableProcessContext implements 
ProcessContext {
                 return null;
             }
 
+            @Override
+            public <E extends Enum<E> & DescribedValue> E 
asDescribedValue(Class<E> enumType) throws IllegalArgumentException {
+                return null;
+            }
+
             @Override
             public boolean isSet() {
                 return false;
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/test/java/org/apache/nifi/processor/TestStandardPropertyValue.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/test/java/org/apache/nifi/processor/TestStandardPropertyValue.java
index 6f49d80b86..acd3e57269 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/test/java/org/apache/nifi/processor/TestStandardPropertyValue.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/test/java/org/apache/nifi/processor/TestStandardPropertyValue.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.processor;
 
+import org.apache.nifi.components.DescribedValue;
 import org.apache.nifi.parameter.ParameterLookup;
 import org.apache.nifi.attribute.expression.language.StandardPropertyValue;
 import org.apache.nifi.components.PropertyValue;
@@ -32,6 +33,7 @@ import java.util.Set;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
 
@@ -108,6 +110,23 @@ public class TestStandardPropertyValue {
         assertThrows(NumberFormatException.class, substituted::asInteger);
     }
 
+    @Test
+    public void testGetValueAsDescribedValue() {
+        for (ExamplePropertyEnum enumValue : ExamplePropertyEnum.values()) {
+            final PropertyValue value = new 
StandardPropertyValue(enumValue.getValue(), lookup, ParameterLookup.EMPTY);
+            assertEquals(enumValue, 
value.asDescribedValue(ExamplePropertyEnum.class));
+        }
+
+        final PropertyValue nullValue = new StandardPropertyValue(null, 
lookup, ParameterLookup.EMPTY);
+        assertNull(nullValue.asDescribedValue(ExamplePropertyEnum.class));
+
+        IllegalArgumentException exception = 
assertThrows(IllegalArgumentException.class, () -> {
+            final PropertyValue invalidValue = new 
StandardPropertyValue("FOO", lookup, ParameterLookup.EMPTY);
+            invalidValue.asDescribedValue(ExamplePropertyEnum.class);
+        });
+        assertEquals("ExamplePropertyEnum does not have an entry with value 
FOO", exception.getMessage());
+    }
+
     @Test
     public void testFileSize() {
         final PropertyValue value = new StandardPropertyValue("${fileSize}", 
lookup, ParameterLookup.EMPTY);
@@ -177,4 +196,35 @@ public class TestStandardPropertyValue {
         }
 
     }
+
+    private enum ExamplePropertyEnum implements DescribedValue {
+        ONE("One Value", "One Display", "One Description"),
+        OTHER("Other Value", "Other Display", "Other Description"),
+        ANOTHER("Another Value", "Another Display", "Another Description");
+
+        private final String value;
+        private final String displayName;
+        private final String description;
+
+        ExamplePropertyEnum(final String value, final String displayName, 
final String description) {
+            this.value = value;
+            this.displayName = displayName;
+            this.description = description;
+        }
+
+        @Override
+        public String getValue() {
+            return this.value;
+        }
+
+        @Override
+        public String getDisplayName() {
+            return this.displayName;
+        }
+
+        @Override
+        public String getDescription() {
+            return this.description;
+        }
+    }
 }
diff --git 
a/nifi-nar-bundles/nifi-graph-bundle/nifi-other-graph-services/src/main/java/org/apache/nifi/graph/TinkerpopClientService.java
 
b/nifi-nar-bundles/nifi-graph-bundle/nifi-other-graph-services/src/main/java/org/apache/nifi/graph/TinkerpopClientService.java
index ac01bb7a3a..7350b3e684 100644
--- 
a/nifi-nar-bundles/nifi-graph-bundle/nifi-other-graph-services/src/main/java/org/apache/nifi/graph/TinkerpopClientService.java
+++ 
b/nifi-nar-bundles/nifi-graph-bundle/nifi-other-graph-services/src/main/java/org/apache/nifi/graph/TinkerpopClientService.java
@@ -189,7 +189,6 @@ public class TinkerpopClientService extends 
AbstractControllerService implements
                     "classes specified in the YAML file. Additionally, any 
custom classes required for the groovy script to " +
                     "work in the bytecode submission setting should also be 
contained in these JAR files.")
             .dependsOn(CONNECTION_SETTINGS, YAML_SETTINGS)
-            .defaultValue(null)
             .identifiesExternalResource(ResourceCardinality.MULTIPLE, 
ResourceType.FILE, ResourceType.DIRECTORY, ResourceType.URL)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
             .dynamicallyModifiesClasspath(true)
diff --git 
a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive3-processors/src/main/java/org/apache/nifi/dbcp/hive/Hive3ConnectionPool.java
 
b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive3-processors/src/main/java/org/apache/nifi/dbcp/hive/Hive3ConnectionPool.java
index ef7beb8f22..94cc1755f8 100644
--- 
a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive3-processors/src/main/java/org/apache/nifi/dbcp/hive/Hive3ConnectionPool.java
+++ 
b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive3-processors/src/main/java/org/apache/nifi/dbcp/hive/Hive3ConnectionPool.java
@@ -106,7 +106,6 @@ public class Hive3ConnectionPool extends 
AbstractControllerService implements Hi
             .description("A database connection URL used to connect to a 
database. May contain database system name, host, port, database name and some 
parameters."
                     + " The exact syntax of a database connection URL is 
specified by the Hive documentation. For example, the server principal is often 
included "
                     + "as a connection parameter when connecting to a secure 
Hive server.")
-            .defaultValue(null)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .required(true)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
@@ -127,7 +126,6 @@ public class Hive3ConnectionPool extends 
AbstractControllerService implements Hi
             .name("hive-db-user")
             .displayName("Database User")
             .description("Database user name")
-            .defaultValue(null)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
             .build();
@@ -136,7 +134,6 @@ public class Hive3ConnectionPool extends 
AbstractControllerService implements Hi
             .name("hive-db-password")
             .displayName("Password")
             .description("The password for the database user")
-            .defaultValue(null)
             .required(false)
             .sensitive(true)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
diff --git 
a/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/main/java/org/apache/nifi/processors/kudu/AbstractKuduProcessor.java
 
b/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/main/java/org/apache/nifi/processors/kudu/AbstractKuduProcessor.java
index f10094baa8..c6671d4f80 100644
--- 
a/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/main/java/org/apache/nifi/processors/kudu/AbstractKuduProcessor.java
+++ 
b/nifi-nar-bundles/nifi-kudu-bundle/nifi-kudu-processors/src/main/java/org/apache/nifi/processors/kudu/AbstractKuduProcessor.java
@@ -375,7 +375,6 @@ public abstract class AbstractKuduProcessor extends 
AbstractProcessor {
 
         alterTable.addColumn(new ColumnSchema.ColumnSchemaBuilder(columnName, 
toKuduType(nifiType))
                 .nullable(true)
-                .defaultValue(null)
                 .typeAttributes(getKuduTypeAttributes(nifiType))
                 .build());
 
diff --git 
a/nifi-nar-bundles/nifi-snmp-bundle/nifi-snmp-processors/src/main/java/org/apache/nifi/snmp/processors/GetSNMP.java
 
b/nifi-nar-bundles/nifi-snmp-bundle/nifi-snmp-processors/src/main/java/org/apache/nifi/snmp/processors/GetSNMP.java
index 2aa29ab8ef..6f5690bd48 100644
--- 
a/nifi-nar-bundles/nifi-snmp-bundle/nifi-snmp-processors/src/main/java/org/apache/nifi/snmp/processors/GetSNMP.java
+++ 
b/nifi-nar-bundles/nifi-snmp-bundle/nifi-snmp-processors/src/main/java/org/apache/nifi/snmp/processors/GetSNMP.java
@@ -107,7 +107,6 @@ public class GetSNMP extends AbstractSNMPProcessor {
                     "the outgoing flowfile.")
             .required(false)
             .addValidator(StandardValidators.NON_BLANK_VALIDATOR)
-            .defaultValue(null)
             .build();
 
     public static final Relationship REL_SUCCESS = new Relationship.Builder()
diff --git 
a/nifi-nar-bundles/nifi-spark-bundle/nifi-livy-controller-service/src/main/java/org/apache/nifi/controller/livy/LivySessionController.java
 
b/nifi-nar-bundles/nifi-spark-bundle/nifi-livy-controller-service/src/main/java/org/apache/nifi/controller/livy/LivySessionController.java
index 65f8cbc96c..e83112a536 100644
--- 
a/nifi-nar-bundles/nifi-spark-bundle/nifi-livy-controller-service/src/main/java/org/apache/nifi/controller/livy/LivySessionController.java
+++ 
b/nifi-nar-bundles/nifi-spark-bundle/nifi-livy-controller-service/src/main/java/org/apache/nifi/controller/livy/LivySessionController.java
@@ -153,7 +153,6 @@ public class LivySessionController extends 
AbstractControllerService implements
             .required(false)
             .identifiesExternalResource(ResourceCardinality.MULTIPLE, 
ResourceType.FILE)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
-            .defaultValue(null)
             .build();
 
     public static final PropertyDescriptor SSL_CONTEXT_SERVICE = new 
PropertyDescriptor.Builder()
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListenHTTP.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListenHTTP.java
index 1a17512d00..2a286a3ea9 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListenHTTP.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListenHTTP.java
@@ -197,7 +197,7 @@ public class ListenHTTP extends 
AbstractSessionFactoryProcessor {
         .description("HTTP Protocols supported for Application Layer Protocol 
Negotiation with TLS")
         .required(true)
         .allowableValues(HttpProtocolStrategy.class)
-        .defaultValue(HttpProtocolStrategy.HTTP_1_1.getValue())
+        .defaultValue(HttpProtocolStrategy.HTTP_1_1)
         .dependsOn(SSL_CONTEXT_SERVICE)
         .build();
     public static final PropertyDescriptor HEADERS_AS_ATTRIBUTES_REGEX = new 
PropertyDescriptor.Builder()
@@ -414,7 +414,7 @@ public class ListenHTTP extends 
AbstractSessionFactoryProcessor {
 
         // get the configured port
         final int port = 
context.getProperty(PORT).evaluateAttributeExpressions().asInteger();
-        final HttpProtocolStrategy httpProtocolStrategy = 
HttpProtocolStrategy.valueOf(context.getProperty(HTTP_PROTOCOL_STRATEGY).getValue());
+        final HttpProtocolStrategy httpProtocolStrategy = 
context.getProperty(HTTP_PROTOCOL_STRATEGY).asDescribedValue(HttpProtocolStrategy.class);
         final ServerConnector connector = createServerConnector(server,
                 port,
                 sslContextService,
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java
index dfa09a42ed..c4908ddd8c 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java
@@ -325,7 +325,6 @@ public class MergeContent extends BinFiles {
         .required(false)
         
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
         .addValidator(StandardValidators.ATTRIBUTE_KEY_VALIDATOR)
-        .defaultValue(null)
         .dependsOn(MERGE_STRATEGY, MERGE_STRATEGY_BIN_PACK)
         .build();
 
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeRecord.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeRecord.java
index de1e910758..f665ca552f 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeRecord.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeRecord.java
@@ -220,7 +220,6 @@ public class MergeRecord extends 
AbstractSessionFactoryProcessor {
         .required(false)
         .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .addValidator(StandardValidators.ATTRIBUTE_KEY_VALIDATOR)
-        .defaultValue(null)
         .build();
     public static final PropertyDescriptor MIN_SIZE = new 
PropertyDescriptor.Builder()
         .name("min-bin-size")
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ScanAttribute.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ScanAttribute.java
index 1100cfa026..408d9f92c2 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ScanAttribute.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ScanAttribute.java
@@ -96,7 +96,6 @@ public class ScanAttribute extends AbstractProcessor {
                     + "the dictionary will be used and each term will consist 
of the text of the entire line in the file")
             .required(false)
             .addValidator(StandardValidators.createRegexValidator(0, 1, false))
-            .defaultValue(null)
             .build();
 
     private List<PropertyDescriptor> properties;
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateRecord.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateRecord.java
index 34ce727335..30c092781a 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateRecord.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateRecord.java
@@ -201,7 +201,6 @@ public class ValidateRecord extends AbstractProcessor {
         .required(false)
         
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
         .addValidator(StandardValidators.ATTRIBUTE_KEY_VALIDATOR)
-        .defaultValue(null)
         .build();
     static final PropertyDescriptor MAX_VALIDATION_DETAILS_LENGTH = new 
PropertyDescriptor.Builder()
         .name("maximum-validation-details-length")
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListenHTTP.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListenHTTP.java
index 734f1f2a4f..714b64aad5 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListenHTTP.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListenHTTP.java
@@ -236,7 +236,7 @@ public class TestListenHTTP {
         
configureProcessorSslContextService(ListenHTTP.ClientAuthentication.AUTO, 
serverNoTruststoreConfiguration);
 
         runner.setProperty(ListenHTTP.BASE_PATH, HTTP_BASE_PATH);
-        runner.setProperty(ListenHTTP.HTTP_PROTOCOL_STRATEGY, 
HttpProtocolStrategy.H2_HTTP_1_1.getValue());
+        runner.setProperty(ListenHTTP.HTTP_PROTOCOL_STRATEGY, 
HttpProtocolStrategy.H2_HTTP_1_1);
         runner.assertValid();
 
         testPOSTRequestsReceived(HttpServletResponse.SC_OK, true, false);
@@ -248,7 +248,7 @@ public class TestListenHTTP {
 
         runner.setProperty(ListenHTTP.BASE_PATH, HTTP_BASE_PATH);
         runner.setProperty(ListenHTTP.RETURN_CODE, 
Integer.toString(HttpServletResponse.SC_NO_CONTENT));
-        runner.setProperty(ListenHTTP.HTTP_PROTOCOL_STRATEGY, 
HttpProtocolStrategy.H2.getValue());
+        runner.setProperty(ListenHTTP.HTTP_PROTOCOL_STRATEGY, 
HttpProtocolStrategy.H2);
         runner.assertValid();
 
         testPOSTRequestsReceived(HttpServletResponse.SC_NO_CONTENT, true, 
false);
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-reporting-tasks/src/main/java/org/apache/nifi/controller/MonitorMemory.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-reporting-tasks/src/main/java/org/apache/nifi/controller/MonitorMemory.java
index 08078482c6..5361ff01f2 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-reporting-tasks/src/main/java/org/apache/nifi/controller/MonitorMemory.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-reporting-tasks/src/main/java/org/apache/nifi/controller/MonitorMemory.java
@@ -134,7 +134,6 @@ public class MonitorMemory extends AbstractReportingTask {
             .description("Indicates how often this reporting task should 
report bulletins while the memory utilization exceeds the configured threshold")
             .required(false)
             .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-            .defaultValue(null)
             .build();
 
     public static final Pattern PERCENTAGE_PATTERN = 
Pattern.compile("\\d{1,2}%");
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-rules/src/main/java/org/apache/nifi/flowanalysis/rules/DisallowComponentType.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-rules/src/main/java/org/apache/nifi/flowanalysis/rules/DisallowComponentType.java
index 79f635a119..cacb5a81dd 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-rules/src/main/java/org/apache/nifi/flowanalysis/rules/DisallowComponentType.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-rules/src/main/java/org/apache/nifi/flowanalysis/rules/DisallowComponentType.java
@@ -42,7 +42,6 @@ public class DisallowComponentType extends 
AbstractFlowAnalysisRule {
                     " Either the simple or the fully qualified name of the 
type should be provided.")
             .required(true)
             .addValidator(StandardValidators.NON_BLANK_VALIDATOR)
-            .defaultValue(null)
             .build();
 
     private final static List<PropertyDescriptor> propertyDescriptors;
diff --git 
a/nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/main/java/org/apache/nifi/dbcp/HikariCPConnectionPool.java
 
b/nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/main/java/org/apache/nifi/dbcp/HikariCPConnectionPool.java
index b78ad2952c..128701a610 100644
--- 
a/nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/main/java/org/apache/nifi/dbcp/HikariCPConnectionPool.java
+++ 
b/nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/main/java/org/apache/nifi/dbcp/HikariCPConnectionPool.java
@@ -86,7 +86,6 @@ public class HikariCPConnectionPool extends 
AbstractControllerService implements
             .displayName("Database Connection URL")
             .description("A database connection URL used to connect to a 
database. May contain database system name, host, port, database name and some 
parameters."
                     + " The exact syntax of a database connection URL is 
specified by your DBMS.")
-            .defaultValue(null)
             .addValidator(new ConnectionUrlValidator())
             .required(true)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
@@ -96,7 +95,6 @@ public class HikariCPConnectionPool extends 
AbstractControllerService implements
             .name("hikaricp-driver-classname")
             .displayName("Database Driver Class Name")
             .description("The fully-qualified class name of the JDBC driver. 
Example: com.mysql.jdbc.Driver")
-            .defaultValue(null)
             .required(true)
             .addValidator(new DriverClassValidator())
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
@@ -106,7 +104,6 @@ public class HikariCPConnectionPool extends 
AbstractControllerService implements
             .name("hikaricp-driver-locations")
             .displayName("Database Driver Location(s)")
             .description("Comma-separated list of files/folders and/or URLs 
containing the driver JAR and its dependencies (if any). For example 
'/var/tmp/mariadb-java-client-1.1.7.jar'")
-            .defaultValue(null)
             .required(false)
             .identifiesExternalResource(ResourceCardinality.MULTIPLE, 
ResourceType.FILE, ResourceType.DIRECTORY, ResourceType.URL)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
@@ -117,7 +114,6 @@ public class HikariCPConnectionPool extends 
AbstractControllerService implements
             .name("hikaricp-username")
             .displayName("Database User")
             .description("Database user name")
-            .defaultValue(null)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
             .build();
@@ -126,7 +122,6 @@ public class HikariCPConnectionPool extends 
AbstractControllerService implements
             .name("hikaricp-password")
             .displayName("Password")
             .description("The password for the database user")
-            .defaultValue(null)
             .required(false)
             .sensitive(true)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
diff --git 
a/nifi-nar-bundles/nifi-standard-services/nifi-hadoop-dbcp-service-bundle/nifi-hadoop-dbcp-service/src/main/java/org/apache/nifi/dbcp/HadoopDBCPConnectionPool.java
 
b/nifi-nar-bundles/nifi-standard-services/nifi-hadoop-dbcp-service-bundle/nifi-hadoop-dbcp-service/src/main/java/org/apache/nifi/dbcp/HadoopDBCPConnectionPool.java
index 27b86f2706..a031f15efb 100644
--- 
a/nifi-nar-bundles/nifi-standard-services/nifi-hadoop-dbcp-service-bundle/nifi-hadoop-dbcp-service/src/main/java/org/apache/nifi/dbcp/HadoopDBCPConnectionPool.java
+++ 
b/nifi-nar-bundles/nifi-standard-services/nifi-hadoop-dbcp-service-bundle/nifi-hadoop-dbcp-service/src/main/java/org/apache/nifi/dbcp/HadoopDBCPConnectionPool.java
@@ -104,7 +104,6 @@ public class HadoopDBCPConnectionPool extends 
AbstractControllerService implemen
             .name("Database Connection URL")
             .description("A database connection URL used to connect to a 
database. May contain database system name, host, port, database name and some 
parameters."
                     + " The exact syntax of a database connection URL is 
specified by your DBMS.")
-            .defaultValue(null)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .required(true)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
@@ -113,7 +112,6 @@ public class HadoopDBCPConnectionPool extends 
AbstractControllerService implemen
     public static final PropertyDescriptor DB_DRIVERNAME = new 
PropertyDescriptor.Builder()
             .name("Database Driver Class Name")
             .description("Database driver class name")
-            .defaultValue(null)
             .required(true)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
@@ -125,7 +123,6 @@ public class HadoopDBCPConnectionPool extends 
AbstractControllerService implemen
             .description("Comma-separated list of files/folders and/or URLs 
containing the driver JAR and its dependencies (if any). " +
                     "For example '/var/tmp/phoenix-client.jar'. NOTE: It is 
required that the resources specified by this property provide " +
                     "the classes from hadoop-common, such as Configuration and 
UserGroupInformation.")
-            .defaultValue(null)
             .required(true)
             .identifiesExternalResource(ResourceCardinality.MULTIPLE, 
ResourceType.FILE, ResourceType.DIRECTORY, ResourceType.URL)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
@@ -147,7 +144,6 @@ public class HadoopDBCPConnectionPool extends 
AbstractControllerService implemen
     public static final PropertyDescriptor DB_USER = new 
PropertyDescriptor.Builder()
             .name("Database User")
             .description("The user for the database")
-            .defaultValue(null)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
             .build();
@@ -155,7 +151,6 @@ public class HadoopDBCPConnectionPool extends 
AbstractControllerService implemen
     public static final PropertyDescriptor DB_PASSWORD = new 
PropertyDescriptor.Builder()
             .name("Password")
             .description("The password for the database user")
-            .defaultValue(null)
             .required(false)
             .sensitive(true)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
diff --git 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/JsonTreeReader.java
 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/JsonTreeReader.java
index 27f54afc72..6ab294337a 100644
--- 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/JsonTreeReader.java
+++ 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/json/JsonTreeReader.java
@@ -94,7 +94,6 @@ public class JsonTreeReader extends SchemaRegistryService 
implements RecordReade
             .description("Skips forward to the given nested JSON field (array 
or object) to begin processing.")
             .required(false)
             .addValidator(StandardValidators.NON_BLANK_VALIDATOR)
-            .defaultValue(null)
             .dependsOn(STARTING_FIELD_STRATEGY, 
StartingFieldStrategy.NESTED_FIELD.name())
             .build();
 
diff --git 
a/nifi-nar-bundles/nifi-standard-services/nifi-ssl-context-bundle/nifi-ssl-context-service/src/main/java/org/apache/nifi/ssl/StandardSSLContextService.java
 
b/nifi-nar-bundles/nifi-standard-services/nifi-ssl-context-bundle/nifi-ssl-context-service/src/main/java/org/apache/nifi/ssl/StandardSSLContextService.java
index e727795fac..617a3ef8d5 100644
--- 
a/nifi-nar-bundles/nifi-standard-services/nifi-ssl-context-bundle/nifi-ssl-context-service/src/main/java/org/apache/nifi/ssl/StandardSSLContextService.java
+++ 
b/nifi-nar-bundles/nifi-standard-services/nifi-ssl-context-bundle/nifi-ssl-context-service/src/main/java/org/apache/nifi/ssl/StandardSSLContextService.java
@@ -71,7 +71,6 @@ public class StandardSSLContextService extends 
AbstractControllerService impleme
             .name("Truststore Filename")
             .description("The fully-qualified filename of the Truststore")
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
-            .defaultValue(null)
             .identifiesExternalResource(ResourceCardinality.SINGLE, 
ResourceType.FILE)
             .sensitive(false)
             .build();
@@ -85,7 +84,6 @@ public class StandardSSLContextService extends 
AbstractControllerService impleme
     public static final PropertyDescriptor TRUSTSTORE_PASSWORD = new 
PropertyDescriptor.Builder()
             .name("Truststore Password")
             .description("The password for the Truststore")
-            .defaultValue(null)
             .addValidator(Validator.VALID)
             .required(false)
             .sensitive(true)
@@ -94,7 +92,6 @@ public class StandardSSLContextService extends 
AbstractControllerService impleme
             .name("Keystore Filename")
             .description("The fully-qualified filename of the Keystore")
             .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
-            .defaultValue(null)
             .identifiesExternalResource(ResourceCardinality.SINGLE, 
ResourceType.FILE)
             .sensitive(false)
             .build();
@@ -107,7 +104,6 @@ public class StandardSSLContextService extends 
AbstractControllerService impleme
             .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)

Reply via email to