diff --git a/filter/src/main/java/org/apache/rocketmq/filter/expression/ComparisonExpression.java b/filter/src/main/java/org/apache/rocketmq/filter/expression/ComparisonExpression.java index 14fd7045b41..4d25f4cb774 100644 --- a/filter/src/main/java/org/apache/rocketmq/filter/expression/ComparisonExpression.java +++ b/filter/src/main/java/org/apache/rocketmq/filter/expression/ComparisonExpression.java @@ -536,7 +536,7 @@ protected static int __compare(Comparable lv, Comparable rv, boolean convertStri try { if (lc == Boolean.class) { if (convertStringExpressions && rc == String.class) { - lv = Boolean.valueOf((String) lv).booleanValue(); + rv = Boolean.valueOf((String) rv); } else { return -1; } diff --git a/filter/src/test/java/org/apache/rocketmq/filter/ExpressionTest.java b/filter/src/test/java/org/apache/rocketmq/filter/ExpressionTest.java index df883458ed6..5ea1ae132f0 100644 --- a/filter/src/test/java/org/apache/rocketmq/filter/ExpressionTest.java +++ b/filter/src/test/java/org/apache/rocketmq/filter/ExpressionTest.java @@ -598,6 +598,17 @@ public void testEvaluate_boolean() throws Exception { eval(expression, context, Boolean.FALSE); } + @Test + public void testEvaluate_booleanConstantComparedToStringProperty() throws Exception { + EvaluationContext trueContext = genContext(KeyValue.c("a", "true")); + EvaluationContext falseContext = genContext(KeyValue.c("a", "false")); + + eval(genExp("TRUE=a"), trueContext, Boolean.TRUE); + eval(genExp("TRUE<>a"), falseContext, Boolean.TRUE); + eval(genExp("FALSE=a"), falseContext, Boolean.TRUE); + eval(genExp("FALSE<>a"), trueContext, Boolean.TRUE); + } + @Test public void testEvaluate_equal() throws Exception { Expression expression = genExp(equalExpression);