diff --git a/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/Support.groovy b/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/Support.groovy index 80f0f09e7..d996b2920 100644 --- a/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/Support.groovy +++ b/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/Support.groovy @@ -21,16 +21,18 @@ import org.apache.camel.Predicate import org.apache.camel.Processor trait Support { - def processor(@DelegatesTo(Exchange) Closure callable) { + Processor processor(@DelegatesTo(Exchange) Closure callable) { + callable.resolveStrategy = Closure.DELEGATE_FIRST + return { - callable.resolveStrategy = DELEGATE_FIRST callable.call(it) } as Processor } - def predicate(@DelegatesTo(Exchange) Closure callable) { + Predicate predicate(@DelegatesTo(Exchange) Closure callable) { + callable.resolveStrategy = Closure.DELEGATE_FIRST + return { - callable.resolveStrategy = DELEGATE_FIRST return callable.call(it) } as Predicate } diff --git a/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/GroovySourceLoaderIssuesTest.groovy b/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/GroovySourceLoaderIssuesTest.groovy new file mode 100644 index 000000000..3ca06225c --- /dev/null +++ b/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/GroovySourceLoaderIssuesTest.groovy @@ -0,0 +1,40 @@ +/* + * 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.k.loader.groovy + + +import org.apache.camel.k.loader.groovy.support.TestRuntime +import spock.lang.AutoCleanup +import spock.lang.Specification + +class GroovySourceLoaderIssuesTest extends Specification{ + @AutoCleanup + def runtime = new TestRuntime() + + // https://github.com/apache/camel-k-runtime/issues/529 + def "github-529"() { + when: + runtime.loadRoutes("classpath:issues/github-529.groovy") + runtime.start() + + def result = runtime.camelContext.createFluentProducerTemplate() + .to('direct:process') + .request(Map.class) + then: + result['orderId'] == 'myOderId' + } +} diff --git a/camel-k-loader-groovy/src/test/resources/issues/github-529.groovy b/camel-k-loader-groovy/src/test/resources/issues/github-529.groovy new file mode 100644 index 000000000..246698bc0 --- /dev/null +++ b/camel-k-loader-groovy/src/test/resources/issues/github-529.groovy @@ -0,0 +1,29 @@ +/* + * 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. + */ +beans { + processInvoice = processor { + it.out.body = [ + orderId: 'myOderId', + datetime: System.currentTimeMillis(), + currency: 'USD', + invoiceId: 'B-0' + (Math.floor(1000 + Math.random() * 9999)) + ] + } +} + +from('direct:process') + .process('processInvoice') \ No newline at end of file