Repository: nifi Updated Branches: refs/heads/master fdb1fd1a6 -> 1f2cf4bc6
NIFI-5761 ReplaceText processor can stop processing data if it evaluates invalid expressions NIFI-5761 Code review. Remove startsWidth to check an exception. Added the dependency as provided. NIFI-5761 Code review. Remove provided. NIFI-5761 Code review. Improve logging. This closes #3112. Signed-off-by: Koji Kawamura <ijokaruma...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/1f2cf4bc Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/1f2cf4bc Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/1f2cf4bc Branch: refs/heads/master Commit: 1f2cf4bc6128e2a09dcc378bdf66b46302d44754 Parents: fdb1fd1 Author: Gardella Juan Pablo <gardellajuanpa...@gmail.com> Authored: Fri Oct 26 16:41:26 2018 -0300 Committer: Koji Kawamura <ijokaruma...@apache.org> Committed: Wed Oct 31 12:01:16 2018 +0900 ---------------------------------------------------------------------- .../nifi-standard-processors/pom.xml | 4 ++++ .../nifi/processors/standard/ReplaceText.java | 10 +++++--- .../processors/standard/TestReplaceText.java | 25 ++++++++++++++++++++ nifi-nar-bundles/nifi-standard-bundle/pom.xml | 5 ++++ 4 files changed, 41 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/1f2cf4bc/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml index ed86dfd..620c570 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml @@ -26,6 +26,10 @@ </dependency> <dependency> <groupId>org.apache.nifi</groupId> + <artifactId>nifi-expression-language</artifactId> + </dependency> + <dependency> + <groupId>org.apache.nifi</groupId> <artifactId>nifi-processor-utils</artifactId> <version>1.9.0-SNAPSHOT</version> </dependency> http://git-wip-us.apache.org/repos/asf/nifi/blob/1f2cf4bc/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java index 2a9a6fe..3108a6c 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java @@ -26,6 +26,8 @@ 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.annotation.documentation.Tags; +import org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageException; +import org.apache.nifi.attribute.expression.language.exception.IllegalAttributeException; import org.apache.nifi.components.AllowableValue; import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.components.PropertyValue; @@ -297,17 +299,19 @@ public class ReplaceText extends AbstractProcessor { } catch (StackOverflowError e) { // Some regular expressions can produce many matches on large input data size using recursive code // do not log the StackOverflowError stack trace - logger.info("Transferred {} to 'failure' due to {}", new Object[] {flowFile, e.toString()}); + logger.info("Transferred {} to 'failure' due to {}", new Object[] { flowFile, e.toString() }); + session.transfer(flowFile, REL_FAILURE); + return; + } catch (IllegalAttributeException | AttributeExpressionLanguageException e) { + logger.warn("Transferred {} to 'failure' due to {}", new Object[] { flowFile, e.toString() }, e); session.transfer(flowFile, REL_FAILURE); return; } - logger.info("Transferred {} to 'success'", new Object[] {flowFile}); session.getProvenanceReporter().modifyContent(flowFile, stopWatch.getElapsed(TimeUnit.MILLISECONDS)); session.transfer(flowFile, REL_SUCCESS); } - // If we find a back reference that is not valid, then we will treat it as a literal string. For example, if we have 3 capturing // groups and the Replacement Value has the value is "I owe $8 to him", then we want to treat the $8 as a literal "$8", rather // than attempting to use it as a back reference. http://git-wip-us.apache.org/repos/asf/nifi/blob/1f2cf4bc/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java index e96eddd..eb89221 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java @@ -1227,6 +1227,31 @@ public class TestReplaceText { runner.assertAllFlowFilesTransferred(ReplaceText.REL_FAILURE, 1); } + /** + * Related to + * <a href="https://issues.apache.org/jira/browse/NIFI-5761">NIFI-5761</a>. It + * verifies that if a runtime exception is raised during replace text + * evaluation, it sends the error to failure relationship. + */ + @Test + public void testWithInvalidExpression() { + final TestRunner runner = getRunner(); + runner.setProperty(ReplaceText.EVALUATION_MODE, ReplaceText.ENTIRE_TEXT); + runner.setProperty(ReplaceText.SEARCH_VALUE, ".*"); + runner.setProperty(ReplaceText.REPLACEMENT_VALUE, "${date:toDate(\"yyyy/MM/dd\")}"); + + final Map<String, String> attributes = new HashMap<>(); + attributes.put("date", "12"); + runner.enqueue("hi", attributes); + + runner.run(); + + runner.assertAllFlowFilesTransferred(ReplaceText.REL_FAILURE, 1); + final MockFlowFile out = runner.getFlowFilesForRelationship(ReplaceText.REL_FAILURE).get(0); + final String outContent = translateNewLines(new String(out.toByteArray(), StandardCharsets.UTF_8)); + Assert.assertTrue(outContent.equals("hi")); + } + private String translateNewLines(final File file) throws IOException { return translateNewLines(file.toPath()); } http://git-wip-us.apache.org/repos/asf/nifi/blob/1f2cf4bc/nifi-nar-bundles/nifi-standard-bundle/pom.xml ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/pom.xml b/nifi-nar-bundles/nifi-standard-bundle/pom.xml index 1afd153..23c9ac7 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/pom.xml +++ b/nifi-nar-bundles/nifi-standard-bundle/pom.xml @@ -47,6 +47,11 @@ </dependency> <dependency> <groupId>org.apache.nifi</groupId> + <artifactId>nifi-expression-language</artifactId> + <version>1.9.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.nifi</groupId> <artifactId>nifi-standard-reporting-tasks</artifactId> <version>1.9.0-SNAPSHOT</version> </dependency>