You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/11/04 15:55:00 UTC

[camel] branch master updated: CAMEL-15807: Fixed regression with Simple language contains function.

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 <cl...@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;
     }