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 2021/11/04 12:43:24 UTC
[camel] branch main updated: camel-groovy-dsl - Improve using
groovy clousures in setHeader and to configure beans as Camel expression
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 7f090c8 camel-groovy-dsl - Improve using groovy clousures in setHeader and to configure beans as Camel expression
7f090c8 is described below
commit 7f090c804a609d5101334f3c7caf40af087e3085
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Nov 4 13:42:47 2021 +0100
camel-groovy-dsl - Improve using groovy clousures in setHeader and to configure beans as Camel expression
---
.../apache/camel/dsl/groovy/common/GroovyDSL.groovy | 11 +++++++++++
.../extensions/ProcessorDefinitionExtensions.groovy | 12 ++++++++++++
.../dsl/groovy/common/model/BeansConfiguration.groovy | 9 +++++++++
.../dsl/groovy/GroovyRouteBuilderLoaderTest.groovy | 10 ++++++++++
.../src/test/resources/routes/routes-with-beans.groovy | 4 ++++
...s.groovy => routes-with-set-header-variable.groovy} | 18 ++++--------------
6 files changed, 50 insertions(+), 14 deletions(-)
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy
index 171fea4..9b7b9b0 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy
@@ -17,6 +17,7 @@
package org.apache.camel.dsl.groovy.common
import org.apache.camel.Exchange
+import org.apache.camel.Expression
import org.apache.camel.Predicate
import org.apache.camel.Processor
import org.apache.camel.builder.BuilderSupport
@@ -37,6 +38,7 @@ import org.apache.camel.model.RouteDefinition
import org.apache.camel.model.rest.RestConfigurationDefinition
import org.apache.camel.model.rest.RestDefinition
import org.apache.camel.spi.Registry
+import org.apache.camel.support.builder.ExpressionBuilder
class GroovyDSL extends BuilderSupport implements EndpointBuilderFactory {
final Registry registry
@@ -132,4 +134,13 @@ class GroovyDSL extends BuilderSupport implements EndpointBuilderFactory {
return callable.call(it)
} as Predicate
}
+
+ static Expression expression(@DelegatesTo(Exchange) Closure<?> callable) {
+ callable.resolveStrategy = Closure.DELEGATE_FIRST
+
+ return {
+ return callable.call(it)
+ } as Expression
+ }
+
}
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/extensions/ProcessorDefinitionExtensions.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/extensions/ProcessorDefinitionExtensions.groovy
index 38f7300..011e4e7 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/extensions/ProcessorDefinitionExtensions.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/extensions/ProcessorDefinitionExtensions.groovy
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.groovy.common.extensions
import groovy.transform.CompileStatic
import org.apache.camel.Exchange
+import org.apache.camel.Expression
import org.apache.camel.Processor
import org.apache.camel.model.ProcessorDefinition
@@ -35,6 +36,17 @@ class ProcessorDefinitionExtensions {
});
}
+ static <T extends ProcessorDefinition<T>> T setHeader(ProcessorDefinition<T> self, String name, Closure<?> callable) {
+ return self.setHeader(name, new Expression() {
+ @Override
+ def <T> T evaluate(Exchange exchange, Class<T> type) {
+ callable.resolveStrategy = Closure.DELEGATE_ONLY
+ Object obj = callable.call(exchange)
+ return exchange.getContext().getTypeConverter().convertTo(type, exchange, obj)
+ }
+ });
+ }
+
static <T extends ProcessorDefinition<T>> T process(ProcessorDefinition<T> self, Closure<?> callable) {
return self.process(new Processor() {
@Override
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeansConfiguration.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeansConfiguration.groovy
index fed4ea4..4980ffa 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeansConfiguration.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeansConfiguration.groovy
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.groovy.common.model
import org.apache.camel.CamelContext
import org.apache.camel.Exchange
+import org.apache.camel.Expression
import org.apache.camel.Predicate
import org.apache.camel.Processor
import org.apache.camel.builder.endpoint.EndpointBuilderFactory
@@ -69,4 +70,12 @@ class BeansConfiguration implements EndpointBuilderFactory {
return callable.call(it)
} as Predicate
}
+
+ static Expression expression(@DelegatesTo(Exchange) Closure<?> callable) {
+ callable.resolveStrategy = Closure.DELEGATE_FIRST
+
+ return {
+ return callable.call(it)
+ } as Expression
+ }
}
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy
index d0fbbe0..602dc0e 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy
@@ -16,6 +16,7 @@
*/
package org.apache.camel.dsl.groovy
+import org.apache.camel.Expression
import org.apache.camel.Predicate
import org.apache.camel.Processor
import org.apache.camel.component.jackson.JacksonDataFormat
@@ -121,6 +122,7 @@ class GroovyRouteBuilderLoaderTest extends Specification {
it.lookupByName('filterStrategy') instanceof DefaultHeaderFilterStrategy
it.lookupByName('myProcessor') instanceof Processor
it.lookupByName('myPredicate') instanceof Predicate
+ it.lookupByName('myExpression') instanceof Expression
}
}
@@ -210,4 +212,12 @@ class GroovyRouteBuilderLoaderTest extends Specification {
then:
1 == 1
}
+
+ def "load integration with set-header-variable"() {
+ when:
+ loadRoute('/routes/routes-with-set-header-variable.groovy')
+ context.start()
+ then:
+ 1 == 1
+ }
}
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
index e6e35e0..2b63933e 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
@@ -29,4 +29,8 @@ beans {
myPredicate = predicate {
false
}
+
+ myExpression = expression {
+ 'Hello World'
+ }
}
\ No newline at end of file
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-set-header-variable.groovy
similarity index 72%
copy from dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
copy to dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-set-header-variable.groovy
index e6e35e0..7ca612a 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-set-header-variable.groovy
@@ -14,19 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-beans {
- myBean(org.apache.camel.dsl.groovy.support.MyBean) {
- name = "test"
- }
- filterStrategy {
- new org.apache.camel.support.DefaultHeaderFilterStrategy()
- }
- myProcessor = processor {
- it.in.body = 'value'
- }
+def myVar = "Hello World"
- myPredicate = predicate {
- false
- }
-}
\ No newline at end of file
+from("direct:1")
+ .setHeader("foo", { myVar.reverse() } )
+ .setBody( { 3 * 2 })