This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-3.18.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.18.x by this push: new c483beb7281 CAMEL-18807: camel-yaml-dsl - Using method call in filter EIP not working. This was a general bug in predicates vs expression reifier in camel-core. c483beb7281 is described below commit c483beb72817018d594a7ca90f40fa820f6f368d Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Dec 9 14:58:16 2022 +0100 CAMEL-18807: camel-yaml-dsl - Using method call in filter EIP not working. This was a general bug in predicates vs expression reifier in camel-core. --- .../camel/reifier/language/ExpressionReifier.java | 4 +- .../MethodCallRefOrBeanPrefixPredicateTest.java | 55 ++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java index 8005a840156..0d2a2d92423 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java @@ -177,6 +177,8 @@ public class ExpressionReifier<T extends ExpressionDefinition> extends AbstractR prepareExpression(); if (definition.getExpressionType() != null) { expression = reifier(camelContext, definition.getExpressionType()).createExpression(); + } else if (definition.getExpressionValue() != null) { + expression = definition.getExpressionValue(); } else { ObjectHelper.notNull(definition.getLanguage(), "language"); Language language = camelContext.resolveLanguage(definition.getLanguage()); @@ -215,7 +217,7 @@ public class ExpressionReifier<T extends ExpressionDefinition> extends AbstractR predicate = reifier(camelContext, definition.getExpressionType()).createPredicate(); } else if (definition.getExpressionValue() != null) { predicate = new ExpressionToPredicateAdapter(definition.getExpressionValue()); - } else if (definition.getExpression() != null) { + } else { ObjectHelper.notNull(definition.getLanguage(), "language"); Language language = camelContext.resolveLanguage(definition.getLanguage()); if (language == null) { diff --git a/core/camel-core/src/test/java/org/apache/camel/component/bean/MethodCallRefOrBeanPrefixPredicateTest.java b/core/camel-core/src/test/java/org/apache/camel/component/bean/MethodCallRefOrBeanPrefixPredicateTest.java new file mode 100644 index 00000000000..755e5bcfb89 --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/component/bean/MethodCallRefOrBeanPrefixPredicateTest.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.bean; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.spi.Registry; +import org.junit.jupiter.api.Test; + +public class MethodCallRefOrBeanPrefixPredicateTest extends ContextTestSupport { + + @Override + protected Registry createRegistry() throws Exception { + Registry jndi = super.createRegistry(); + jndi.bind("foo", new MyFooBean()); + return jndi; + } + + @Test + public void testRefOrBeanPrefix() throws Exception { + getMockEndpoint("mock:a").expectedBodiesReceived("A"); + getMockEndpoint("mock:b").expectedBodiesReceived("B"); + + template.sendBody("direct:a", "A"); + template.sendBody("direct:b", "B"); + + assertMockEndpointsSatisfied(); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:a").filter().method("ref:foo").to("mock:a"); + + from("direct:b").filter().method("bean:foo").to("mock:b"); + } + }; + } +}