You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2018/09/24 21:29:26 UTC
[camel-k] branch master updated: Add bindings for rest dsl in
groovy/js routes #117
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/master by this push:
new e1312ed Add bindings for rest dsl in groovy/js routes #117
e1312ed is described below
commit e1312edf6c9c9c413683892dfb6a673cf7926625
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Mon Sep 24 21:53:09 2018 +0200
Add bindings for rest dsl in groovy/js routes #117
---
runtime/examples/routes-rest.js | 48 ++++++++++++++++++++++
.../java/org/apache/camel/k/jvm/RoutesLoaders.java | 36 ++++++++++++++--
2 files changed, 81 insertions(+), 3 deletions(-)
diff --git a/runtime/examples/routes-rest.js b/runtime/examples/routes-rest.js
new file mode 100644
index 0000000..47b9c24
--- /dev/null
+++ b/runtime/examples/routes-rest.js
@@ -0,0 +1,48 @@
+//
+// To run this integrations use:
+//
+// kamel run --name=withrest --dependency=camel:undertow runtime/examples/routes-rest.js
+//
+
+// ****************
+//
+// Setup
+//
+// ****************
+
+l = components.get('log')
+l.exchangeFormatter = function(e) {
+ return "log - body=" + e.in.body + ", headers=" + e.in.headers
+}
+
+c = restConfiguration()
+c.component = 'undertow'
+c.port = 8081
+
+// ****************
+//
+// Functions
+//
+// ****************
+
+function proc(e) {
+ e.getIn().setHeader('RandomValue', Math.floor((Math.random() * 100) + 1))
+}
+
+// ****************
+//
+// Route
+//
+// ****************
+
+rest()
+ .path('/say/hello')
+ .get().route()
+ .transform().constant("Hello World");
+
+from('timer:js?period=1s')
+ .routeId('js')
+ .setBody()
+ .constant('Hello Camel K')
+ .process(proc)
+ .to('log:info')
\ No newline at end of file
diff --git a/runtime/jvm/src/main/java/org/apache/camel/k/jvm/RoutesLoaders.java b/runtime/jvm/src/main/java/org/apache/camel/k/jvm/RoutesLoaders.java
index cc07cc2..5b27f99 100644
--- a/runtime/jvm/src/main/java/org/apache/camel/k/jvm/RoutesLoaders.java
+++ b/runtime/jvm/src/main/java/org/apache/camel/k/jvm/RoutesLoaders.java
@@ -23,10 +23,12 @@ import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
+import java.util.function.Supplier;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.SimpleBindings;
+import javax.xml.bind.UnmarshalException;
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
@@ -35,12 +37,16 @@ import org.apache.camel.CamelContext;
import org.apache.camel.Component;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.rest.RestConfigurationDefinition;
+import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.ResourceHelper;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.groovy.control.CompilerConfiguration;
import org.joor.Reflect;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static org.apache.camel.k.jvm.Constants.SCHEME_CLASSPATH;
import static org.apache.camel.k.jvm.Constants.SCHEME_FILE;
@@ -116,6 +122,8 @@ public enum RoutesLoaders implements RoutesLoader {
bindings.put("context", context);
bindings.put("components", new Components(context));
bindings.put("from", (Function<String, RouteDefinition>) uri -> from(uri));
+ bindings.put("rest", (Supplier<RestDefinition>) () -> rest());
+ bindings.put("restConfiguration", (Supplier<RestConfigurationDefinition>) () -> restConfiguration());
try (InputStream is = ResourceHelper.resolveMandatoryResourceAsInputStream(context, resource)) {
engine.eval(new InputStreamReader(is), bindings);
@@ -165,15 +173,29 @@ public enum RoutesLoaders implements RoutesLoader {
@Override
public void configure() throws Exception {
try (InputStream is = ResourceHelper.resolveMandatoryResourceAsInputStream(getContext(), resource)) {
- setRouteCollection(
- getContext().loadRoutesDefinition(is)
- );
+ try {
+ setRouteCollection(
+ getContext().loadRoutesDefinition(is)
+ );
+ } catch (UnmarshalException e) {
+ LOGGER.debug("Unable to load RoutesDefinition: {}", e.getMessage());
+ }
+
+ try {
+ setRestCollection(
+ getContext().loadRestsDefinition(is)
+ );
+ } catch (UnmarshalException e) {
+ LOGGER.debug("Unbale to load RestsDefinition: {}", e.getMessage());
+ }
}
}
};
}
};
+ private static final Logger LOGGER = LoggerFactory.getLogger(RoutesLoaders.class);
+
public static RoutesLoader loaderFor(String resource, String languageName) {
if (!resource.startsWith(SCHEME_CLASSPATH) && !resource.startsWith(SCHEME_FILE)) {
throw new IllegalArgumentException("No valid resource format, expected scheme:path, found " + resource);
@@ -242,5 +264,13 @@ public enum RoutesLoaders implements RoutesLoader {
public RouteDefinition from(String endpoint) {
return builder.from(endpoint);
}
+
+ public RestDefinition rest() {
+ return builder.rest();
+ }
+
+ public RestConfigurationDefinition restConfiguration() {
+ return builder.restConfiguration();
+ }
}
}