This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 0cde002 CAMEL-15807: Fixed regression with Simple language contains function. 0cde002 is described below commit 0cde0023c06e60d459c5008c321782b747a87bbc Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Nov 4 16:54:24 2020 +0100 CAMEL-15807: Fixed regression with Simple language contains function. --- .../camel/language/simple/SimpleOperatorTest.java | 15 ++++++++--- .../org/apache/camel/support/ObjectHelper.java | 29 ++++++++++++++-------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java index 2a69f1b..849a04b 100644 --- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java @@ -380,11 +380,11 @@ public class SimpleOperatorTest extends LanguageTestSupport { assertPredicate("${in.header.num} <= 123", true); exchange.getIn().setHeader("strNumNegative", "-123"); - assertPredicate("${in.header.strNumNegative} contains '123'", false); - assertPredicate("${in.header.strNumNegative} !contains '123'", true); + assertPredicate("${in.header.strNumNegative} contains '123'", true); + assertPredicate("${in.header.strNumNegative} !contains '123'", false); assertPredicate("${in.header.strNumNegative} contains '-123'", true); assertPredicate("${in.header.strNumNegative} !contains '-123'", false); - assertPredicate("${in.header.strNumNegative} ~~ '123'", false); + assertPredicate("${in.header.strNumNegative} ~~ '123'", true); assertPredicate("${in.header.strNumNegative} ~~ '-123'", true); } @@ -499,6 +499,15 @@ public class SimpleOperatorTest extends LanguageTestSupport { } @Test + public void testContainsNumberInString() throws Exception { + exchange.getMessage().setBody("The answer is 42 and is the answer to life the universe and everything"); + assertPredicate("${body} contains '42'", true); + assertPredicate("${body} contains 42", true); + assertPredicate("${body} contains '77'", false); + assertPredicate("${body} contains 77", false); + } + + @Test public void testNotContains() throws Exception { assertPredicate("${in.header.foo} not contains 'a'", false); assertPredicate("${in.header.foo} not contains 'ab'", false); diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ObjectHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/ObjectHelper.java index 0075784..18e477c 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/ObjectHelper.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/ObjectHelper.java @@ -814,23 +814,30 @@ public final class ObjectHelper { } else { return collection.contains(value); } - } else if (collectionOrArray instanceof String && value instanceof String) { + } else if (collectionOrArray instanceof String) { String str = (String) collectionOrArray; - String subStr = (String) value; - if (ignoreCase) { - String lower = subStr.toLowerCase(Locale.ENGLISH); - return str.toLowerCase(Locale.ENGLISH).contains(lower); + String subStr; + if (value instanceof String) { + subStr = (String) value; } else { - return str.contains(subStr); + subStr = typeConverter.tryConvertTo(String.class, value); } - } else { - Iterator<?> iter = createIterator(collectionOrArray); - while (iter.hasNext()) { - if (typeCoerceEquals(typeConverter, value, iter.next(), ignoreCase)) { - return true; + if (subStr != null) { + if (ignoreCase) { + String lower = subStr.toLowerCase(Locale.ENGLISH); + return str.toLowerCase(Locale.ENGLISH).contains(lower); + } else { + return str.contains(subStr); } } } + + Iterator<?> iter = createIterator(collectionOrArray); + while (iter.hasNext()) { + if (typeCoerceEquals(typeConverter, value, iter.next(), ignoreCase)) { + return true; + } + } return false; }