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/03/22 12:46:38 UTC

[camel] branch master updated: Fix camel-jms resequencer test as sending java objects (java.lang.Integer) is forbidden in ActiveMQ. Send text based messages instead, and fix comparator to detect its numeric and compare correctly.

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 384de2a  Fix camel-jms resequencer test as sending java objects (java.lang.Integer) is forbidden in ActiveMQ. Send text based messages instead, and fix comparator to detect its numeric and compare correctly.
384de2a is described below

commit 384de2a57a4cbe454fdd0ac8b2ccd65cf01fabd1
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Mar 22 13:43:30 2020 +0100

    Fix camel-jms resequencer test as sending java objects (java.lang.Integer) is forbidden in ActiveMQ. Send text based messages instead, and fix comparator to detect its numeric and compare correctly.
---
 .../apache/camel/component/jms/issues/JmsResequencerTest.java    | 4 +++-
 .../src/main/java/org/apache/camel/processor/Resequencer.java    | 4 ++--
 .../main/java/org/apache/camel/support/ExpressionComparator.java | 9 ++++++++-
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsResequencerTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsResequencerTest.java
index 2d7026d..78d9688 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsResequencerTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsResequencerTest.java
@@ -51,7 +51,9 @@ public class JmsResequencerTest extends CamelSpringTestSupport {
         }
 
         for (int i = 100; i > 0; i--) {
-            template.sendBodyAndHeader(endpoint, i, "num", (long) i);
+            // send as text messages (not java objects - as they are not serializable and allowed by JMS brokers like ActiveMQ)
+            String text = "" + i;
+            template.sendBodyAndHeader(endpoint, text, "num", (long) i);
         }
 
         assertMockEndpointsSatisfied();
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/Resequencer.java b/core/camel-base/src/main/java/org/apache/camel/processor/Resequencer.java
index ff316e0..1c5124e 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/Resequencer.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/Resequencer.java
@@ -266,7 +266,7 @@ public class Resequencer extends AsyncProcessorSupport implements Navigate<Proce
         this.routeId = routeId;
     }
 
-// Implementation methods
+    // Implementation methods
     //-------------------------------------------------------------------------
 
     protected static Set<Exchange> createSet(Expression expression, boolean allowDuplicates, boolean reverse) {
@@ -382,7 +382,7 @@ public class Resequencer extends AsyncProcessorSupport implements Navigate<Proce
         try {
             result = expression.evaluate(exchange, Object.class);
         } catch (Exception e) {
-            // ignore
+            LOG.debug("Error evaluating expression: " + expression + ". This exception is ignored.", e);
         }
         return result != null;
     }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ExpressionComparator.java b/core/camel-support/src/main/java/org/apache/camel/support/ExpressionComparator.java
index 5e860e9..708f840 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ExpressionComparator.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ExpressionComparator.java
@@ -24,7 +24,6 @@ import org.apache.camel.Expression;
 /**
  * An implementation of {@link Comparator} that takes an {@link Expression} which is evaluated
  * on each exchange to be compared
- *  
  */
 public class ExpressionComparator implements Comparator<Exchange> {
     private final Expression expression;
@@ -37,6 +36,14 @@ public class ExpressionComparator implements Comparator<Exchange> {
     public int compare(Exchange e1, Exchange e2) {
         Object o1 = expression.evaluate(e1, Object.class);
         Object o2 = expression.evaluate(e2, Object.class);
+
+        // if they are numeric then use numeric comparison instead of text
+        Long l1 = e1.getContext().getTypeConverter().tryConvertTo(Long.class, e1, o1);
+        Long l2 = e1.getContext().getTypeConverter().tryConvertTo(Long.class, e2, o2);
+        if (l1 != null && l2 != null) {
+            return l1.compareTo(l2);
+        }
+
         return ObjectHelper.compare(o1, o2);
     }
 }