http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestQueryElasticsearchHttp.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestQueryElasticsearchHttp.java
 
b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestQueryElasticsearchHttp.java
index 4789496..1b07d22 100644
--- 
a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestQueryElasticsearchHttp.java
+++ 
b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestQueryElasticsearchHttp.java
@@ -62,7 +62,6 @@ public class TestQueryElasticsearchHttp {
     @Test
     public void testQueryElasticsearchOnTrigger_withInput() throws IOException 
{
         runner = TestRunners.newTestRunner(new 
QueryElasticsearchHttpTestProcessor());
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
 
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
@@ -81,7 +80,6 @@ public class TestQueryElasticsearchHttp {
     @Test
     public void testQueryElasticsearchOnTrigger_withInput_EL() throws 
IOException {
         runner = TestRunners.newTestRunner(new 
QueryElasticsearchHttpTestProcessor());
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"${es.url}");
 
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
@@ -104,7 +102,6 @@ public class TestQueryElasticsearchHttp {
     @Test
     public void testQueryElasticsearchOnTrigger_withInput_attributeTarget() 
throws IOException {
         runner = TestRunners.newTestRunner(new 
QueryElasticsearchHttpTestProcessor());
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
 
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
@@ -130,7 +127,6 @@ public class TestQueryElasticsearchHttp {
     @Test
     public void testQueryElasticsearchOnTrigger_withNoInput() throws 
IOException {
         runner = TestRunners.newTestRunner(new 
QueryElasticsearchHttpTestProcessor());
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
 
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
@@ -175,7 +171,6 @@ public class TestQueryElasticsearchHttp {
     @Test
     public void testQueryElasticsearchOnTriggerWithFields() throws IOException 
{
         runner = TestRunners.newTestRunner(new 
QueryElasticsearchHttpTestProcessor());
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
 
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
@@ -195,7 +190,6 @@ public class TestQueryElasticsearchHttp {
     @Test
     public void testQueryElasticsearchOnTriggerWithLimit() throws IOException {
         runner = TestRunners.newTestRunner(new 
QueryElasticsearchHttpTestProcessor());
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
 
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
@@ -221,7 +215,6 @@ public class TestQueryElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
         runner.setProperty(QueryElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(QueryElasticsearchHttp.QUERY, "${doc_id}");
 
         runner.enqueue("".getBytes(), new HashMap<String, String>() {
@@ -247,7 +240,6 @@ public class TestQueryElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
         runner.setProperty(QueryElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(QueryElasticsearchHttp.QUERY, "${doc_id}");
 
         runner.enqueue("".getBytes(), new HashMap<String, String>() {
@@ -273,7 +265,6 @@ public class TestQueryElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
         runner.setProperty(QueryElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(QueryElasticsearchHttp.QUERY, "${doc_id}");
 
         runner.enqueue("".getBytes(), new HashMap<String, String>() {
@@ -299,7 +290,6 @@ public class TestQueryElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
         runner.setProperty(QueryElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(QueryElasticsearchHttp.QUERY, "${doc_id}");
 
         runner.enqueue("".getBytes(), new HashMap<String, String>() {
@@ -326,7 +316,6 @@ public class TestQueryElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
         runner.setProperty(QueryElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(QueryElasticsearchHttp.QUERY, "${doc_id}");
 
         runner.setIncomingConnection(false);
@@ -348,7 +337,6 @@ public class TestQueryElasticsearchHttp {
         runner.setProperty(QueryElasticsearchHttp.PROP_SSL_CONTEXT_SERVICE, 
"ssl-context");
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(QueryElasticsearchHttp.QUERY, "${doc_id}");
 
         // Allow time for the controller service to fully initialize
@@ -367,7 +355,6 @@ public class TestQueryElasticsearchHttp {
         QueryElasticsearchHttpTestProcessor p = new 
QueryElasticsearchHttpTestProcessor();
         p.setExpectedParam("myparam=myvalue");
         runner = TestRunners.newTestRunner(p);
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
 
         runner.setProperty(QueryElasticsearchHttp.INDEX, "doc");
@@ -480,6 +467,7 @@ public class TestQueryElasticsearchHttp {
             });
         }
 
+        @Override
         protected OkHttpClient getClient() {
             return client;
         }

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestScrollElasticsearchHttp.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestScrollElasticsearchHttp.java
 
b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestScrollElasticsearchHttp.java
index 1e687f1..f22275a 100644
--- 
a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestScrollElasticsearchHttp.java
+++ 
b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestScrollElasticsearchHttp.java
@@ -63,7 +63,6 @@ public class TestScrollElasticsearchHttp {
     @Test
     public void testScrollElasticsearchOnTrigger_withNoInput() throws 
IOException {
         runner = TestRunners.newTestRunner(new 
ScrollElasticsearchHttpTestProcessor());
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
 
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
@@ -83,7 +82,6 @@ public class TestScrollElasticsearchHttp {
     @Test
     public void testScrollElasticsearchOnTrigger_withNoInput_EL() throws 
IOException {
         runner = TestRunners.newTestRunner(new 
ScrollElasticsearchHttpTestProcessor());
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"${es.url}");
 
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
@@ -131,7 +129,6 @@ public class TestScrollElasticsearchHttp {
     @Test
     public void testScrollElasticsearchOnTriggerWithFields() throws 
IOException {
         runner = TestRunners.newTestRunner(new 
ScrollElasticsearchHttpTestProcessor());
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
 
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
@@ -157,7 +154,6 @@ public class TestScrollElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
         runner.setProperty(ScrollElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(ScrollElasticsearchHttp.QUERY, "${doc_id}");
         runner.setIncomingConnection(false);
 
@@ -182,7 +178,6 @@ public class TestScrollElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
         runner.setProperty(ScrollElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(ScrollElasticsearchHttp.QUERY, "${doc_id}");
         runner.setIncomingConnection(false);
 
@@ -207,7 +202,6 @@ public class TestScrollElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
         runner.setProperty(ScrollElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(ScrollElasticsearchHttp.QUERY, "${doc_id}");
 
         runner.enqueue("".getBytes(), new HashMap<String, String>() {
@@ -232,7 +226,6 @@ public class TestScrollElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
         runner.setProperty(ScrollElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(ScrollElasticsearchHttp.QUERY, "${doc_id}");
 
         runner.setIncomingConnection(false);
@@ -254,7 +247,6 @@ public class TestScrollElasticsearchHttp {
         runner.setProperty(ScrollElasticsearchHttp.PROP_SSL_CONTEXT_SERVICE, 
"ssl-context");
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(ScrollElasticsearchHttp.QUERY, "${doc_id}");
         runner.setIncomingConnection(false);
 
@@ -278,7 +270,6 @@ public class TestScrollElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
         runner.setProperty(ScrollElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(ScrollElasticsearchHttp.QUERY, "${doc_id}");
 
         runner.enqueue("".getBytes(), new HashMap<String, String>() {
@@ -302,7 +293,6 @@ public class TestScrollElasticsearchHttp {
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
         runner.setProperty(ScrollElasticsearchHttp.TYPE, "status");
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(ScrollElasticsearchHttp.QUERY, "${doc_id}");
 
         runner.enqueue("".getBytes(), new HashMap<String, String>() {
@@ -323,7 +313,6 @@ public class TestScrollElasticsearchHttp {
         ScrollElasticsearchHttpTestProcessor p = new 
ScrollElasticsearchHttpTestProcessor();
         p.setExpectedParam("myparam=myvalue");
         runner = TestRunners.newTestRunner(p);
-        runner.setValidateExpressionUsage(true);
         runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, 
"http://127.0.0.1:9200";);
 
         runner.setProperty(ScrollElasticsearchHttp.INDEX, "doc");
@@ -438,6 +427,7 @@ public class TestScrollElasticsearchHttp {
             });
         }
 
+        @Override
         protected OkHttpClient getClient() {
             return client;
         }

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/AbstractEmailProcessor.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/AbstractEmailProcessor.java
 
b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/AbstractEmailProcessor.java
index 8e6dbae..9b6d396 100644
--- 
a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/AbstractEmailProcessor.java
+++ 
b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/AbstractEmailProcessor.java
@@ -36,6 +36,7 @@ import javax.mail.MessagingException;
 
 import org.apache.nifi.annotation.lifecycle.OnStopped;
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.flowfile.FlowFile;
 import org.apache.nifi.processor.AbstractProcessor;
 import org.apache.nifi.processor.ProcessContext;
@@ -62,7 +63,7 @@ abstract class AbstractEmailProcessor<T extends 
AbstractMailReceiver> extends Ab
             .displayName("Host Name")
             .description("Network address of Email server (e.g., 
pop.gmail.com, imap.gmail.com . . .)")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
     public static final PropertyDescriptor PORT = new 
PropertyDescriptor.Builder()
@@ -70,7 +71,7 @@ abstract class AbstractEmailProcessor<T extends 
AbstractMailReceiver> extends Ab
             .displayName("Port")
             .description("Numeric value identifying Port of Email server 
(e.g., 993)")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .addValidator(StandardValidators.PORT_VALIDATOR)
             .build();
     public static final PropertyDescriptor USER = new 
PropertyDescriptor.Builder()
@@ -78,7 +79,7 @@ abstract class AbstractEmailProcessor<T extends 
AbstractMailReceiver> extends Ab
             .displayName("User Name")
             .description("User Name used for authentication and authorization 
with Email server.")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
     public static final PropertyDescriptor PASSWORD = new 
PropertyDescriptor.Builder()
@@ -86,7 +87,7 @@ abstract class AbstractEmailProcessor<T extends 
AbstractMailReceiver> extends Ab
             .displayName("Password")
             .description("Password used for authentication and authorization 
with Email server.")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .sensitive(true)
             .build();
@@ -95,7 +96,7 @@ abstract class AbstractEmailProcessor<T extends 
AbstractMailReceiver> extends Ab
             .displayName("Folder")
             .description("Email folder to retrieve messages from (e.g., 
INBOX)")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .defaultValue("INBOX")
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
@@ -104,7 +105,7 @@ abstract class AbstractEmailProcessor<T extends 
AbstractMailReceiver> extends Ab
             .displayName("Fetch Size")
             .description("Specify the maximum number of Messages to fetch per 
call to Email Server.")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .defaultValue("10")
             .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
             .build();
@@ -123,7 +124,7 @@ abstract class AbstractEmailProcessor<T extends 
AbstractMailReceiver> extends Ab
             .description("The amount of time to wait to connect to Email 
server")
             .required(true)
             .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .defaultValue("30 sec")
             .build();
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java
 
b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java
index 70a26dd..462f405 100644
--- 
a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java
+++ 
b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java
@@ -52,6 +52,7 @@ import org.apache.nifi.annotation.documentation.Tags;
 import org.apache.nifi.annotation.lifecycle.OnStopped;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.Validator;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.flowfile.FlowFile;
 import org.apache.nifi.processor.AbstractProcessor;
 import org.apache.nifi.processor.ProcessContext;
@@ -92,7 +93,7 @@ public class ConsumeEWS extends AbstractProcessor {
             .displayName("User Name")
             .description("User Name used for authentication and authorization 
with Email server.")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
     public static final PropertyDescriptor PASSWORD = new 
PropertyDescriptor.Builder()
@@ -100,7 +101,7 @@ public class ConsumeEWS extends AbstractProcessor {
             .displayName("Password")
             .description("Password used for authentication and authorization 
with Email server.")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .sensitive(true)
             .build();
@@ -109,7 +110,7 @@ public class ConsumeEWS extends AbstractProcessor {
             .displayName("Folder")
             .description("Email folder to retrieve messages from (e.g., 
INBOX)")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .defaultValue("INBOX")
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
@@ -118,7 +119,7 @@ public class ConsumeEWS extends AbstractProcessor {
             .displayName("Fetch Size")
             .description("Specify the maximum number of Messages to fetch per 
call to Email Server.")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .defaultValue("10")
             .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
             .build();
@@ -137,7 +138,7 @@ public class ConsumeEWS extends AbstractProcessor {
             .description("The amount of time to wait to connect to Email 
server")
             .required(true)
             .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .defaultValue("30 sec")
             .build();
     public static final PropertyDescriptor EXCHANGE_VERSION = new 
PropertyDescriptor.Builder()
@@ -256,7 +257,7 @@ public class ConsumeEWS extends AbstractProcessor {
             this.messageQueue = new ArrayBlockingQueue<>(fetchSize);
         }
 
-        this.folderName = context.getProperty(FOLDER).getValue();
+        this.folderName = 
context.getProperty(FOLDER).evaluateAttributeExpressions().getValue();
 
         Message emailMessage = this.receiveMessage(context);
         if (emailMessage != null) {
@@ -274,8 +275,8 @@ public class ConsumeEWS extends AbstractProcessor {
         final String timeoutInMillis = 
String.valueOf(context.getProperty(CONNECTION_TIMEOUT).evaluateAttributeExpressions().asTimePeriod(TimeUnit.MILLISECONDS));
         service.setTimeout(Integer.parseInt(timeoutInMillis));
 
-        String userEmail = context.getProperty(USER).getValue();
-        String password = context.getProperty(PASSWORD).getValue();
+        String userEmail = 
context.getProperty(USER).evaluateAttributeExpressions().getValue();
+        String password = 
context.getProperty(PASSWORD).evaluateAttributeExpressions().getValue();
 
         ExchangeCredentials credentials = new WebCredentials(userEmail, 
password);
         service.setCredentials(credentials);

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ExtractEmailHeaders.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ExtractEmailHeaders.java
 
b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ExtractEmailHeaders.java
index 22936fd..5a11f04 100644
--- 
a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ExtractEmailHeaders.java
+++ 
b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ExtractEmailHeaders.java
@@ -30,6 +30,7 @@ import org.apache.nifi.annotation.behavior.WritesAttributes;
 import org.apache.nifi.annotation.documentation.CapabilityDescription;
 import org.apache.nifi.annotation.documentation.Tags;
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.components.AllowableValue;
 import org.apache.nifi.flowfile.FlowFile;
 import org.apache.nifi.logging.ComponentLog;
@@ -98,7 +99,7 @@ public class ExtractEmailHeaders extends AbstractProcessor {
                     "NOTE the header key is case insensitive and will be 
matched as lower-case." +
                     " Values will respect email contents.")
             .required(false)
-            .expressionLanguageSupported(false)
+            .expressionLanguageSupported(ExpressionLanguageScope.NONE)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .defaultValue("x-mailer")
             .build();

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ListenSMTP.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ListenSMTP.java
 
b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ListenSMTP.java
index 62d9bd4..bed09b1 100644
--- 
a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ListenSMTP.java
+++ 
b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ListenSMTP.java
@@ -41,6 +41,7 @@ import org.apache.nifi.annotation.lifecycle.OnStopped;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.ValidationContext;
 import org.apache.nifi.components.ValidationResult;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.logging.ComponentLog;
 import org.apache.nifi.processor.AbstractSessionFactoryProcessor;
 import org.apache.nifi.processor.DataUnit;
@@ -85,7 +86,7 @@ public class ListenSMTP extends 
AbstractSessionFactoryProcessor {
                     + "NOTE that on Unix derivative operating  systems this 
port must "
                     + "be higher than 1024 unless NiFi is running as with root 
user permissions.")
             .required(true)
-            .expressionLanguageSupported(false)
+            .expressionLanguageSupported(ExpressionLanguageScope.NONE)
             .addValidator(StandardValidators.PORT_VALIDATOR)
             .build();
 
@@ -95,7 +96,7 @@ public class ListenSMTP extends 
AbstractSessionFactoryProcessor {
             .description("The maximum number of simultaneous SMTP 
connections.")
             .required(true)
             .defaultValue("1")
-            .expressionLanguageSupported(false)
+            .expressionLanguageSupported(ExpressionLanguageScope.NONE)
             .addValidator(StandardValidators.INTEGER_VALIDATOR)
             .build();
 
@@ -105,7 +106,7 @@ public class ListenSMTP extends 
AbstractSessionFactoryProcessor {
             .description("The maximum time to wait for an action of SMTP 
client.")
             .defaultValue("60 seconds")
             .required(true)
-            .expressionLanguageSupported(false)
+            .expressionLanguageSupported(ExpressionLanguageScope.NONE)
             .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
             .build();
 
@@ -115,7 +116,7 @@ public class ListenSMTP extends 
AbstractSessionFactoryProcessor {
             .description("The maximum number of bytes the server will accept.")
             .required(true)
             .defaultValue("20 MB")
-            .expressionLanguageSupported(false)
+            .expressionLanguageSupported(ExpressionLanguageScope.NONE)
             .addValidator(StandardValidators.createDataSizeBoundsValidator(1, 
Integer.MAX_VALUE))
             .build();
 
@@ -141,7 +142,7 @@ public class ListenSMTP extends 
AbstractSessionFactoryProcessor {
             .displayName("SMTP hostname")
             .description("The hostname to be embedded into the banner 
displayed when an "
                     + "SMTP client connects to the processor TCP port .")
-            .expressionLanguageSupported(false)
+            .expressionLanguageSupported(ExpressionLanguageScope.NONE)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/AbstractEnrichIP.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/AbstractEnrichIP.java
 
b/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/AbstractEnrichIP.java
index f55e701..30226a9 100644
--- 
a/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/AbstractEnrichIP.java
+++ 
b/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/AbstractEnrichIP.java
@@ -31,6 +31,7 @@ import org.apache.nifi.annotation.lifecycle.OnScheduled;
 import org.apache.nifi.annotation.lifecycle.OnStopped;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.expression.AttributeExpression;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.processor.AbstractProcessor;
 import org.apache.nifi.processor.ProcessContext;
 import org.apache.nifi.processor.ProcessorInitializationContext;
@@ -56,7 +57,7 @@ public abstract class AbstractEnrichIP extends 
AbstractProcessor {
             .displayName("IP Address Attribute")
             .required(true)
             .description("The name of an attribute whose value is a dotted 
decimal IP address for which enrichment should occur")
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             
.addValidator(StandardValidators.createAttributeExpressionLanguageValidator(AttributeExpression.ResultType.STRING))
             .build();

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/enrich/AbstractEnrichProcessor.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/enrich/AbstractEnrichProcessor.java
 
b/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/enrich/AbstractEnrichProcessor.java
index 0ba7934..e0307a0 100644
--- 
a/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/enrich/AbstractEnrichProcessor.java
+++ 
b/nifi-nar-bundles/nifi-enrich-bundle/nifi-enrich-processors/src/main/java/org/apache/nifi/processors/enrich/AbstractEnrichProcessor.java
@@ -26,6 +26,7 @@ import org.apache.nifi.components.AllowableValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.ValidationContext;
 import org.apache.nifi.components.ValidationResult;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.processor.AbstractProcessor;
 import org.apache.nifi.processor.Relationship;
 import org.apache.nifi.processor.util.StandardValidators;
@@ -44,7 +45,7 @@ public abstract class AbstractEnrichProcessor extends 
AbstractProcessor {
             .displayName("Lookup value")
             .required(true)
             .description("The value that should be used to populate the query")
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
 
@@ -70,7 +71,7 @@ public abstract class AbstractEnrichProcessor extends 
AbstractProcessor {
             .description("Choice between a splitter and regex matcher used to 
parse the results of the query into attribute groups.\n" +
             "NOTE: This is a multiline regular expression, therefore, the DFM 
should decide how to handle trailing new line " +
             "characters.")
-            .expressionLanguageSupported(false)
+            .expressionLanguageSupported(ExpressionLanguageScope.NONE)
             .required(false)
             .addValidator(StandardValidators.REGULAR_EXPRESSION_VALIDATOR)
             .build();

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/hadoop/KerberosProperties.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/hadoop/KerberosProperties.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/hadoop/KerberosProperties.java
index 676c684..7d0210f 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/hadoop/KerberosProperties.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/hadoop/KerberosProperties.java
@@ -21,6 +21,7 @@ import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.ValidationContext;
 import org.apache.nifi.components.ValidationResult;
 import org.apache.nifi.components.Validator;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.logging.ComponentLog;
 import org.apache.nifi.processor.util.StandardValidators;
 
@@ -85,7 +86,7 @@ public class KerberosProperties {
                 .description("Kerberos principal to authenticate as. Requires 
nifi.kerberos.krb5.file to be set in your nifi.properties")
                 .addValidator(kerberosConfigValidator)
                 
.addValidator(StandardValidators.ATTRIBUTE_EXPRESSION_LANGUAGE_VALIDATOR)
-                .expressionLanguageSupported(true)
+                
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
                 .build();
 
         this.kerberosKeytab = new PropertyDescriptor.Builder()
@@ -94,7 +95,7 @@ public class KerberosProperties {
                 .addValidator(StandardValidators.FILE_EXISTS_VALIDATOR)
                 .addValidator(kerberosConfigValidator)
                 
.addValidator(StandardValidators.ATTRIBUTE_EXPRESSION_LANGUAGE_VALIDATOR)
-                .expressionLanguageSupported(true)
+                
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
                 .build();
     }
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractHadoopProcessor.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractHadoopProcessor.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractHadoopProcessor.java
index 54ddc66..1eca5af 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractHadoopProcessor.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractHadoopProcessor.java
@@ -30,6 +30,7 @@ import org.apache.nifi.annotation.lifecycle.OnStopped;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.ValidationContext;
 import org.apache.nifi.components.ValidationResult;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.hadoop.KerberosProperties;
 import org.apache.nifi.hadoop.SecurityUtil;
 import org.apache.nifi.kerberos.KerberosCredentialsService;
@@ -78,7 +79,7 @@ public abstract class AbstractHadoopProcessor extends 
AbstractProcessor {
                     + "To use swebhdfs, see 'Additional Details' section of 
PutHDFS's documentation.")
             .required(false)
             .addValidator(HadoopValidators.ONE_OR_MORE_FILE_EXISTS_VALIDATOR)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .build();
 
     public static final PropertyDescriptor DIRECTORY = new 
PropertyDescriptor.Builder()
@@ -86,7 +87,7 @@ public abstract class AbstractHadoopProcessor extends 
AbstractProcessor {
             .description("The HDFS directory from which files should be read")
             .required(true)
             
.addValidator(StandardValidators.ATTRIBUTE_EXPRESSION_LANGUAGE_VALIDATOR)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
             .build();
 
     public static final PropertyDescriptor COMPRESSION_CODEC = new 
PropertyDescriptor.Builder()
@@ -103,7 +104,7 @@ public abstract class AbstractHadoopProcessor extends 
AbstractProcessor {
             .defaultValue("4 hours")
             .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .build();
 
     public static final PropertyDescriptor ADDITIONAL_CLASSPATH_RESOURCES = 
new PropertyDescriptor.Builder()

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/AbstractListenEventBatchingProcessor.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/AbstractListenEventBatchingProcessor.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/AbstractListenEventBatchingProcessor.java
index 9a97671..c83fdae 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/AbstractListenEventBatchingProcessor.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/AbstractListenEventBatchingProcessor.java
@@ -20,6 +20,7 @@ import static 
org.apache.nifi.processor.util.listen.ListenerProperties.NETWORK_I
 
 import org.apache.nifi.annotation.lifecycle.OnScheduled;
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.flowfile.FlowFile;
 import org.apache.nifi.processor.ProcessContext;
 import org.apache.nifi.processor.ProcessSession;
@@ -54,7 +55,7 @@ public abstract class AbstractListenEventBatchingProcessor<E 
extends Event> exte
                     "The maximum number of messages to add to a single 
FlowFile. If multiple messages are available, they will be concatenated along 
with "
                             + "the <Message Delimiter> up to this configured 
maximum number of messages")
             .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
-            .expressionLanguageSupported(false)
+            .expressionLanguageSupported(ExpressionLanguageScope.NONE)
             .defaultValue("1")
             .required(true)
             .build();

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/ListenerProperties.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/ListenerProperties.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/ListenerProperties.java
index 5e4c639..128a9d9 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/ListenerProperties.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/listen/ListenerProperties.java
@@ -21,6 +21,7 @@ import org.apache.nifi.components.ValidationContext;
 import org.apache.nifi.components.ValidationResult;
 import org.apache.nifi.components.Validator;
 import org.apache.nifi.expression.AttributeExpression;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 
 import java.net.NetworkInterface;
 import java.net.SocketException;
@@ -81,7 +82,7 @@ public class ListenerProperties {
                     return result;
                 }
             })
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .build();
 
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/put/AbstractPutEventProcessor.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/put/AbstractPutEventProcessor.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/put/AbstractPutEventProcessor.java
index d09fe06..a5ba8ba 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/put/AbstractPutEventProcessor.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-processor-utils/src/main/java/org/apache/nifi/processor/util/put/AbstractPutEventProcessor.java
@@ -20,6 +20,7 @@ import org.apache.nifi.annotation.lifecycle.OnScheduled;
 import org.apache.nifi.annotation.lifecycle.OnStopped;
 import org.apache.nifi.components.AllowableValue;
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.flowfile.FlowFile;
 import org.apache.nifi.processor.AbstractSessionFactoryProcessor;
 import org.apache.nifi.processor.ProcessContext;
@@ -56,14 +57,14 @@ public abstract class AbstractPutEventProcessor extends 
AbstractSessionFactoryPr
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .defaultValue("localhost")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .build();
     public static final PropertyDescriptor PORT = new PropertyDescriptor
             .Builder().name("Port")
             .description("The port on the destination.")
             .required(true)
             .addValidator(StandardValidators.PORT_VALIDATOR)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .build();
     public static final PropertyDescriptor MAX_SOCKET_SEND_BUFFER_SIZE = new 
PropertyDescriptor.Builder()
             .name("Max Size of Socket Send Buffer")
@@ -106,7 +107,7 @@ public abstract class AbstractPutEventProcessor extends 
AbstractSessionFactoryPr
                     + "relationship.")
             .required(false)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
             .build();
     public static final PropertyDescriptor CHARSET = new 
PropertyDescriptor.Builder()
             .name("Character Set")
@@ -130,7 +131,7 @@ public abstract class AbstractPutEventProcessor extends 
AbstractSessionFactoryPr
                     + "enter '\\n'. For a tab character use '\\t'. Finally for 
a carriage return use '\\r'.")
             .required(false)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
             .build();
     public static final PropertyDescriptor CONNECTION_PER_FLOWFILE = new 
PropertyDescriptor.Builder()
             .name("Connection Per FlowFile")

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/schema/access/SchemaAccessUtils.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/schema/access/SchemaAccessUtils.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/schema/access/SchemaAccessUtils.java
index 17aef2a..111b02a 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/schema/access/SchemaAccessUtils.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/schema/access/SchemaAccessUtils.java
@@ -23,6 +23,7 @@ import org.apache.nifi.components.PropertyValue;
 import org.apache.nifi.components.ValidationContext;
 import org.apache.nifi.components.ValidationResult;
 import org.apache.nifi.context.PropertyContext;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.processor.util.StandardValidators;
 import org.apache.nifi.schemaregistry.services.SchemaRegistry;
 
@@ -73,7 +74,7 @@ public class SchemaAccessUtils {
             .displayName("Schema Name")
             .description("Specifies the name of the schema to lookup in the 
Schema Registry property")
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
             .defaultValue("${schema.name}")
             .required(false)
             .build();
@@ -103,7 +104,7 @@ public class SchemaAccessUtils {
             .displayName("Schema Text")
             .description("The text of an Avro-formatted Schema")
             .addValidator(new AvroSchemaValidator())
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
             .defaultValue("${avro.schema}")
             .required(false)
             .build();

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-hadoop-record-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractFetchHDFSRecord.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-hadoop-record-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractFetchHDFSRecord.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-hadoop-record-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractFetchHDFSRecord.java
index 96631ef..41b0365 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-hadoop-record-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractFetchHDFSRecord.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-hadoop-record-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractFetchHDFSRecord.java
@@ -39,6 +39,7 @@ import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.nifi.annotation.behavior.TriggerWhenEmpty;
 import org.apache.nifi.annotation.configuration.DefaultSettings;
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.flowfile.FlowFile;
 import org.apache.nifi.flowfile.attributes.CoreAttributes;
 import org.apache.nifi.processor.ProcessContext;
@@ -68,7 +69,7 @@ public abstract class AbstractFetchHDFSRecord extends 
AbstractHadoopProcessor {
             .displayName("Filename")
             .description("The name of the file to retrieve")
             .required(true)
-            .expressionLanguageSupported(true)
+            
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
             .defaultValue("${path}/${filename}")
             
.addValidator(StandardValidators.ATTRIBUTE_EXPRESSION_LANGUAGE_VALIDATOR)
             .build();

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/csv/CSVUtils.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/csv/CSVUtils.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/csv/CSVUtils.java
index eecf290..f379bea 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/csv/CSVUtils.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/csv/CSVUtils.java
@@ -24,6 +24,7 @@ import org.apache.nifi.components.AllowableValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.PropertyValue;
 import org.apache.nifi.context.PropertyContext;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.processor.util.StandardValidators;
 
 public class CSVUtils {
@@ -41,7 +42,7 @@ public class CSVUtils {
     public static final PropertyDescriptor CSV_FORMAT = new 
PropertyDescriptor.Builder()
         .name("CSV Format")
         .description("Specifies which \"format\" the CSV data is in, or 
specifies if custom formatting should be used.")
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .allowableValues(CUSTOM, RFC_4180, EXCEL, TDF, MYSQL, INFORMIX_UNLOAD, 
INFORMIX_UNLOAD_CSV)
         .defaultValue(CUSTOM.getValue())
         .required(true)
@@ -50,7 +51,7 @@ public class CSVUtils {
         .name("Value Separator")
         .description("The character that is used to separate values/fields in 
a CSV Record")
         .addValidator(CSVValidators.UNESCAPED_SINGLE_CHAR_VALIDATOR)
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .defaultValue(",")
         .required(true)
         .build();
@@ -58,7 +59,7 @@ public class CSVUtils {
         .name("Quote Character")
         .description("The character that is used to quote values so that 
escape characters do not have to be used")
         .addValidator(new CSVValidators.SingleCharacterValidator())
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .defaultValue("\"")
         .required(true)
         .build();
@@ -70,7 +71,7 @@ public class CSVUtils {
             + "present and won't be processed as a Record. Otherwise, if 
'true', then the first line of CSV data will not be processed as a record and 
if 'false',"
             + "then the first line will be interpreted as a record.")
         .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .allowableValues("true", "false")
         .defaultValue("false")
         .required(true)
@@ -82,7 +83,7 @@ public class CSVUtils {
             + "the Reader will interpret the fields. If this property is true, 
then the field names mapped to each column are driven only by the configured 
schema and "
             + "any fields not in the schema will be ignored. If this property 
is false, then the field names found in the CSV Header will be used as the 
names of the "
             + "fields.")
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .allowableValues("true", "false")
         .defaultValue("false")
         .required(false)
@@ -91,14 +92,14 @@ public class CSVUtils {
         .name("Comment Marker")
         .description("The character that is used to denote the start of a 
comment. Any line that begins with this comment will be ignored.")
         .addValidator(new CSVValidators.SingleCharacterValidator())
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .required(false)
         .build();
     public static final PropertyDescriptor ESCAPE_CHAR = new 
PropertyDescriptor.Builder()
         .name("Escape Character")
         .description("The character that is used to escape characters that 
would otherwise have a specific meaning to the CSV Parser.")
         .addValidator(new CSVValidators.SingleCharacterValidator())
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .defaultValue("\\")
         .required(true)
         .build();
@@ -106,13 +107,13 @@ public class CSVUtils {
         .name("Null String")
         .description("Specifies a String that, if present as a value in the 
CSV, should be considered a null field instead of using the literal value.")
         .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .required(false)
         .build();
     public static final PropertyDescriptor TRIM_FIELDS = new 
PropertyDescriptor.Builder()
         .name("Trim Fields")
         .description("Whether or not white space should be removed from the 
beginning and end of fields")
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .allowableValues("true", "false")
         .defaultValue("true")
         .required(true)
@@ -121,7 +122,7 @@ public class CSVUtils {
         .name("csvutils-character-set")
         .displayName("Character Set")
         .description("The Character Encoding that is used to encode/decode the 
CSV file")
-        .expressionLanguageSupported(true)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .addValidator(StandardValidators.CHARACTER_SET_VALIDATOR)
         .defaultValue("UTF-8")
         .required(true)
@@ -138,7 +139,7 @@ public class CSVUtils {
     public static final PropertyDescriptor QUOTE_MODE = new 
PropertyDescriptor.Builder()
         .name("Quote Mode")
         .description("Specifies how fields should be quoted when they are 
written")
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .allowableValues(QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NON_NUMERIC, 
QUOTE_NONE)
         .defaultValue(QUOTE_MINIMAL.getValue())
         .required(true)
@@ -146,7 +147,7 @@ public class CSVUtils {
     public static final PropertyDescriptor TRAILING_DELIMITER = new 
PropertyDescriptor.Builder()
         .name("Include Trailing Delimiter")
         .description("If true, a trailing delimiter will be added to each CSV 
Record that is written. If false, the trailing delimiter will be omitted.")
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .allowableValues("true", "false")
         .defaultValue("false")
         .required(true)
@@ -155,7 +156,7 @@ public class CSVUtils {
         .name("Record Separator")
         .description("Specifies the characters to use in order to separate CSV 
Records")
         .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .defaultValue("\\n")
         .required(true)
         .build();

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/serialization/DateTimeUtils.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/serialization/DateTimeUtils.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/serialization/DateTimeUtils.java
index 6336943..45b3f93 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/serialization/DateTimeUtils.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/serialization/DateTimeUtils.java
@@ -18,6 +18,7 @@
 package org.apache.nifi.serialization;
 
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 
 public class DateTimeUtils {
     public static final PropertyDescriptor DATE_FORMAT = new 
PropertyDescriptor.Builder()
@@ -26,7 +27,7 @@ public class DateTimeUtils {
             + "If not specified, Date fields will be assumed to be number of 
milliseconds since epoch (Midnight, Jan 1, 1970 GMT). "
             + "If specified, the value must match the Java Simple Date Format 
(for example, MM/dd/yyyy for a two-digit month, followed by "
             + "a two-digit day, followed by a four-digit year, all separated 
by '/' characters, as in 01/01/2017).")
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .addValidator(new SimpleDateFormatValidator())
         .required(false)
         .build();
@@ -37,7 +38,7 @@ public class DateTimeUtils {
             + "If not specified, Time fields will be assumed to be number of 
milliseconds since epoch (Midnight, Jan 1, 1970 GMT). "
             + "If specified, the value must match the Java Simple Date Format 
(for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by "
             + "a two-digit minute, followed by a two-digit second, all 
separated by ':' characters, as in 18:04:15).")
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .addValidator(new SimpleDateFormatValidator())
         .required(false)
         .build();
@@ -49,7 +50,7 @@ public class DateTimeUtils {
             + "If specified, the value must match the Java Simple Date Format 
(for example, MM/dd/yyyy HH:mm:ss for a two-digit month, followed by "
             + "a two-digit day, followed by a four-digit year, all separated 
by '/' characters; and then followed by a two-digit hour in 24-hour format, 
followed by "
             + "a two-digit minute, followed by a two-digit second, all 
separated by ':' characters, as in 01/01/2017 18:04:15).")
-        .expressionLanguageSupported(false)
+        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
         .addValidator(new SimpleDateFormatValidator())
         .required(false)
         .build();

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PropertyDescriptorDTO.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PropertyDescriptorDTO.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PropertyDescriptorDTO.java
index 3e31d60..e14b1bf 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PropertyDescriptorDTO.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PropertyDescriptorDTO.java
@@ -37,6 +37,7 @@ public class PropertyDescriptorDTO {
     private Boolean sensitive;
     private Boolean dynamic;
     private Boolean supportsEl;
+    private String scopeEl;
     private String identifiesControllerService;
     private BundleDTO identifiesControllerServiceBundle;
 
@@ -167,6 +168,20 @@ public class PropertyDescriptorDTO {
     }
 
     /**
+     * @return specifies the scope of expression language evaluation
+     */
+    @ApiModelProperty(
+            value = "Scope of the EL evaluation for the property."
+    )
+    public String getScopeEl() {
+        return scopeEl;
+    }
+
+    public void setScopeEl(String scopeEl) {
+        this.scopeEl = scopeEl;
+    }
+
+    /**
      * @return if this property identifies a controller service this returns 
the fully qualified type, null otherwise
      */
     @ApiModelProperty(

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
index 9294906..48fa109 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/main/java/org/apache/nifi/documentation/html/HtmlDocumentationWriter.java
@@ -18,11 +18,12 @@ package org.apache.nifi.documentation.html;
 
 import org.apache.nifi.annotation.behavior.DynamicProperties;
 import org.apache.nifi.annotation.behavior.DynamicProperty;
-import org.apache.nifi.annotation.behavior.Restriction;
-import org.apache.nifi.annotation.behavior.SystemResourceConsideration;
 import org.apache.nifi.annotation.behavior.InputRequirement;
+import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
 import org.apache.nifi.annotation.behavior.Restricted;
+import org.apache.nifi.annotation.behavior.Restriction;
 import org.apache.nifi.annotation.behavior.Stateful;
+import org.apache.nifi.annotation.behavior.SystemResourceConsideration;
 import org.apache.nifi.annotation.documentation.CapabilityDescription;
 import org.apache.nifi.annotation.documentation.DeprecationNotice;
 import org.apache.nifi.annotation.documentation.SeeAlso;
@@ -34,6 +35,7 @@ import org.apache.nifi.components.ConfigurableComponent;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.controller.ControllerService;
 import org.apache.nifi.documentation.DocumentationWriter;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.nar.ExtensionManager;
 import org.apache.nifi.util.StringUtils;
 import org.slf4j.Logger;
@@ -522,14 +524,36 @@ public class HtmlDocumentationWriter implements 
DocumentationWriter {
 
                 if (property.isExpressionLanguageSupported()) {
                     xmlStreamWriter.writeEmptyElement("br");
-                    writeSimpleElement(xmlStreamWriter, "strong", "Supports 
Expression Language: true");
+                    String text = "Supports Expression Language: true";
+                    final String perFF = " (will be evaluated using flow file 
attributes and registry)";
+                    final String registry = " (will be evaluated using 
registry only)";
+                    final InputRequirement inputRequirement = 
configurableComponent.getClass().getAnnotation(InputRequirement.class);
+
+                    switch(property.getExpressionLanguageScope()) {
+                        case FLOWFILE_ATTRIBUTES:
+                            if(inputRequirement != null && 
inputRequirement.value().equals(Requirement.INPUT_FORBIDDEN)) {
+                                text += registry;
+                            } else {
+                                text += perFF;
+                            }
+                            break;
+                        case VARIABLE_REGISTRY:
+                            text += registry;
+                            break;
+                        case NONE:
+                        default:
+                            // in case legacy/deprecated method has been used 
to specify EL support
+                            text += " (undefined scope)";
+                            break;
+                    }
+
+                    writeSimpleElement(xmlStreamWriter, "strong", text);
                 }
                 xmlStreamWriter.writeEndElement();
 
                 xmlStreamWriter.writeEndElement();
             }
 
-            // TODO support dynamic properties...
             xmlStreamWriter.writeEndElement();
 
         } else {
@@ -555,7 +579,7 @@ public class HtmlDocumentationWriter implements 
DocumentationWriter {
     /**
      * Indicates whether or not the component contains at least one property 
that supports Expression Language.
      *
-     * @param component the component to interogate
+     * @param component the component to interrogate
      * @return whether or not the component contains at least one sensitive 
property.
      */
     private boolean containsExpressionLanguage(final ConfigurableComponent 
component) {
@@ -590,10 +614,32 @@ public class HtmlDocumentationWriter implements 
DocumentationWriter {
                 writeSimpleElement(xmlStreamWriter, "td", 
dynamicProperty.value(), false, "value");
                 xmlStreamWriter.writeStartElement("td");
                 xmlStreamWriter.writeCharacters(dynamicProperty.description());
-                if (dynamicProperty.supportsExpressionLanguage()) {
-                    xmlStreamWriter.writeEmptyElement("br");
-                    writeSimpleElement(xmlStreamWriter, "strong", "Supports 
Expression Language: true");
+
+                xmlStreamWriter.writeEmptyElement("br");
+                String text;
+
+                
if(dynamicProperty.expressionLanguageScope().equals(ExpressionLanguageScope.NONE))
 {
+                    if(dynamicProperty.supportsExpressionLanguage()) {
+                        text = "Supports Expression Language: true (undefined 
scope)";
+                    } else {
+                        text = "Supports Expression Language: false";
+                    }
+                } else {
+                    switch(dynamicProperty.expressionLanguageScope()) {
+                        case FLOWFILE_ATTRIBUTES:
+                            text = "Supports Expression Language: true (will 
be evaluated using flow file attributes and registry)";
+                            break;
+                        case VARIABLE_REGISTRY:
+                            text = "Supports Expression Language: true (will 
be evaluated using registry only)";
+                            break;
+                        case NONE:
+                        default:
+                            text = "Supports Expression Language: false";
+                            break;
+                    }
                 }
+
+                writeSimpleElement(xmlStreamWriter, "strong", text);
                 xmlStreamWriter.writeEndElement();
                 xmlStreamWriter.writeEndElement();
             }

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/DeprecatedProcessor.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/DeprecatedProcessor.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/DeprecatedProcessor.java
index 0c4ca95..dcd3efe 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/DeprecatedProcessor.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/example/DeprecatedProcessor.java
@@ -16,6 +16,12 @@
  */
 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;
@@ -32,6 +38,7 @@ import org.apache.nifi.annotation.lifecycle.OnShutdown;
 import org.apache.nifi.components.AllowableValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.state.Scope;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.processor.AbstractProcessor;
 import org.apache.nifi.processor.ProcessContext;
 import org.apache.nifi.processor.ProcessSession;
@@ -40,12 +47,6 @@ import org.apache.nifi.processor.Relationship;
 import org.apache.nifi.processor.exception.ProcessException;
 import org.apache.nifi.processor.util.StandardValidators;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 @Tags({"one", "two", "three"})
 @CapabilityDescription("This is a processor that is used to test 
documentation.")
 @WritesAttributes({
@@ -53,46 +54,69 @@ import java.util.Set;
     @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")
+@DynamicProperty(name = "Relationship Name", expressionLanguageScope = 
ExpressionLanguageScope.FLOWFILE_ATTRIBUTES,
+                    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")
 @Stateful(scopes = {Scope.CLUSTER, Scope.LOCAL}, description = "state 
management description")
 @Restricted("processor restriction description")
 @DeprecationNotice(alternatives = {FullyDocumentedProcessor.class, 
FullyDocumentedReportingTask.class})
 public class DeprecatedProcessor extends AbstractProcessor {
 
-    public static final PropertyDescriptor DIRECTORY = new 
PropertyDescriptor.Builder().name("Input Directory")
-            .description("The input directory from which to pull 
files").required(true)
+    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();
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
+            .build();
 
-    public static final PropertyDescriptor RECURSE = new 
PropertyDescriptor.Builder().name("Recurse Subdirectories")
-            .description("Indicates whether or not to pull files from 
subdirectories").required(true)
+    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();
+            )
+            .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();
+            .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();
+            .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();
+            .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;

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/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 8442a33..efd8e99 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
@@ -37,6 +37,7 @@ import org.apache.nifi.components.AllowableValue;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.RequiredPermission;
 import org.apache.nifi.components.state.Scope;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.processor.AbstractProcessor;
 import org.apache.nifi.processor.ProcessContext;
 import org.apache.nifi.processor.ProcessSession;
@@ -58,7 +59,8 @@ import java.util.Set;
     @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")
+@DynamicProperty(name = "Relationship Name", expressionLanguageScope = 
ExpressionLanguageScope.FLOWFILE_ATTRIBUTES,
+                    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")
 @Stateful(scopes = {Scope.CLUSTER, Scope.LOCAL}, description = "state 
management description")
 @Restricted(
@@ -75,39 +77,63 @@ import java.util.Set;
 @SystemResourceConsideration(resource = SystemResource.MEMORY, description = 
"")
 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)
+    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();
+            
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
+            .build();
 
-    public static final PropertyDescriptor RECURSE = new 
PropertyDescriptor.Builder().name("Recurse Subdirectories")
-            .description("Indicates whether or not to pull files from 
subdirectories").required(true)
+    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();
+            )
+            .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();
+            .name("Optional Property")
+            .description("This is a property you can use or not")
+            .required(false)
+            .expressionLanguageSupported(true) // test documentation of 
deprecated method
+            .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();
+            .required(true)
+            .expressionLanguageSupported(false) // test documentation of 
deprecated method
+            .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();
+            .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;

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/html/ProcessorDocumentationWriterTest.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/html/ProcessorDocumentationWriterTest.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/html/ProcessorDocumentationWriterTest.java
index 10333d0..a047fd5 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/html/ProcessorDocumentationWriterTest.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/html/ProcessorDocumentationWriterTest.java
@@ -16,8 +16,14 @@
  */
 package org.apache.nifi.documentation.html;
 
-import org.apache.nifi.annotation.behavior.SystemResourceConsideration;
+import static org.apache.nifi.documentation.html.XmlValidator.assertContains;
+import static 
org.apache.nifi.documentation.html.XmlValidator.assertNotContains;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
 import org.apache.nifi.annotation.behavior.SystemResource;
+import org.apache.nifi.annotation.behavior.SystemResourceConsideration;
 import org.apache.nifi.annotation.documentation.CapabilityDescription;
 import org.apache.nifi.components.RequiredPermission;
 import org.apache.nifi.documentation.DocumentationWriter;
@@ -29,12 +35,6 @@ import org.apache.nifi.init.ProcessorInitializer;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import static org.apache.nifi.documentation.html.XmlValidator.assertContains;
-import static 
org.apache.nifi.documentation.html.XmlValidator.assertNotContains;
-
 public class ProcessorDocumentationWriterTest {
 
     @Test
@@ -86,6 +86,13 @@ public class ProcessorDocumentationWriterTest {
         assertNotContains(results, "No tags provided.");
         assertNotContains(results, "Additional Details...");
 
+        // check expression language scope
+        assertContains(results, "Supports Expression Language: true (will be 
evaluated using registry only)");
+        assertContains(results, "Supports Expression Language: true (undefined 
scope)");
+
+        // verify dynamic properties
+        assertContains(results, "Routes FlowFiles to relationships based on 
XPath");
+
         // input requirement
         assertContains(results, "This component does not allow an incoming 
relationship.");
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java
index 6bfa49d..5b40f72 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java
@@ -209,6 +209,7 @@ public class TemplateUtils {
         descriptor.setRequired(null);
         descriptor.setSensitive(null);
         descriptor.setSupportsEl(null);
+        descriptor.setScopeEl(null);
         descriptor.setIdentifiesControllerServiceBundle(null);
     }
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/4c787799/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/DummyScheduledReportingTask.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/DummyScheduledReportingTask.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/DummyScheduledReportingTask.java
index a347e98..4acd624 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/DummyScheduledReportingTask.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/DummyScheduledReportingTask.java
@@ -22,6 +22,7 @@ import java.util.List;
 
 import org.apache.nifi.annotation.configuration.DefaultSchedule;
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.processor.util.StandardValidators;
 import org.apache.nifi.reporting.AbstractReportingTask;
 import org.apache.nifi.reporting.ReportingContext;
@@ -37,7 +38,7 @@ public class DummyScheduledReportingTask extends 
AbstractReportingTask {
         .name("Test with default value")
         .description("Test with default value")
         .required(true)
-        .expressionLanguageSupported(true)
+        .expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
         .defaultValue("nifi")
         .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
         .build();
@@ -46,7 +47,7 @@ public class DummyScheduledReportingTask extends 
AbstractReportingTask {
         .name("Test without default value")
         .description("Test without default value")
         .required(false)
-        .expressionLanguageSupported(true)
+        .expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
         .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
         .build();
 

Reply via email to