diff --git a/nifi-commons/nifi-parameter/src/main/java/org/apache/nifi/parameter/ExpressionLanguageAwareParameterParser.java b/nifi-commons/nifi-parameter/src/main/java/org/apache/nifi/parameter/ExpressionLanguageAwareParameterParser.java index 985762899e..b5d22ab9ff 100644 --- a/nifi-commons/nifi-parameter/src/main/java/org/apache/nifi/parameter/ExpressionLanguageAwareParameterParser.java +++ b/nifi-commons/nifi-parameter/src/main/java/org/apache/nifi/parameter/ExpressionLanguageAwareParameterParser.java @@ -69,7 +69,6 @@ public class ExpressionLanguageAwareParameterParser extends AbstractParameterPar continue; } - if (sequentialStartTags > 0) { final ParameterToken token = parseParameterToken(input, i, sequentialStartTags, tokens); @@ -87,6 +86,7 @@ public class ExpressionLanguageAwareParameterParser extends AbstractParameterPar if (--embeddedElCount == 0) { expressionStart = -1; + oddDollarCount = false; } break; case DOLLAR_SIGN: diff --git a/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAgnosticParameterParser.java b/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAgnosticParameterParser.java index f129c5a345..c0c7213455 100644 --- a/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAgnosticParameterParser.java +++ b/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAgnosticParameterParser.java @@ -187,4 +187,35 @@ public class TestExpressionLanguageAgnosticParameterParser { assertEquals("hello", ((ParameterReference) token).getParameterName()); } } + + @Test + public void testMultipleReferencesDifferentExpressions() { + final ParameterParser parameterParser = new ExpressionLanguageAgnosticParameterParser(); + final List tokens = parameterParser.parseTokens("${#{hello}}${#{there}}").toList(); + assertEquals(2, tokens.size()); + + final ParameterToken firstToken = tokens.get(0); + assertTrue(firstToken.isParameterReference()); + assertEquals("hello", ((ParameterReference) firstToken).getParameterName()); + + final ParameterToken secondToken = tokens.get(1); + assertTrue(secondToken.isParameterReference()); + assertEquals("there", ((ParameterReference) secondToken).getParameterName()); + } + + @Test + public void testMultipleReferencesSameExpression() { + final ParameterParser parameterParser = new ExpressionLanguageAgnosticParameterParser(); + final List tokens = parameterParser.parseTokens("${#{hello}:append(#{there})}").toList(); + assertEquals(2, tokens.size()); + + final ParameterToken firstToken = tokens.get(0); + assertTrue(firstToken.isParameterReference()); + assertEquals("hello", ((ParameterReference) firstToken).getParameterName()); + + final ParameterToken secondToken = tokens.get(1); + assertTrue(secondToken.isParameterReference()); + assertEquals("there", ((ParameterReference) secondToken).getParameterName()); + } + } diff --git a/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAwareParameterParser.java b/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAwareParameterParser.java index d4cf058804..c91f38a3f2 100644 --- a/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAwareParameterParser.java +++ b/nifi-commons/nifi-parameter/src/test/java/org/apache/nifi/parameter/TestExpressionLanguageAwareParameterParser.java @@ -198,4 +198,19 @@ public class TestExpressionLanguageAwareParameterParser { assertEquals("hello", ((ParameterReference) token).getParameterName()); } } + + @Test + public void testMultipleReferencesDifferentExpressions() { + final ParameterParser parameterParser = new ExpressionLanguageAwareParameterParser(); + final List tokens = parameterParser.parseTokens("${#{hello}}${#{there}}").toList(); + assertEquals(0, tokens.size()); + } + + @Test + public void testMultipleReferencesSameExpression() { + final ParameterParser parameterParser = new ExpressionLanguageAwareParameterParser(); + final List tokens = parameterParser.parseTokens("${#{hello}:append(#{there})}").toList(); + assertEquals(0, tokens.size()); + } + }