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 <claus.ib...@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); } }