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 2022/04/06 17:35:00 UTC
[camel] branch main updated: Datasonnet libraries autodiscovery (#7374)
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 92138ec1b47 Datasonnet libraries autodiscovery (#7374)
92138ec1b47 is described below
commit 92138ec1b4796ae6f1fe8cb6f75e6cb4a8517c3e
Author: javaduke <Eu...@modusbox.com>
AuthorDate: Wed Apr 6 10:34:46 2022 -0700
Datasonnet libraries autodiscovery (#7374)
* Datasonnet libraries auto discovery
* cleanup
* header added
* better organized imports
* cleanup
* Fixing style
---
.../language/datasonnet/DatasonnetExpression.java | 21 +++++--
.../src/test/java/library/TestLib.java | 72 ++++++++++++++++++++++
.../datasonnet/CamelDatasonnetJavaDslTest.java | 20 ++++++
.../language/datasonnet/CamelDatasonnetTest.java | 7 +++
.../camel/language.datasonnet/camel-context.xml | 16 +++++
.../org/apache/camel/main/components.properties | 2 +-
6 files changed, 131 insertions(+), 7 deletions(-)
diff --git a/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetExpression.java b/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetExpression.java
index 0bc7353d112..14b21c3b8c9 100644
--- a/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetExpression.java
+++ b/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetExpression.java
@@ -28,6 +28,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
import com.datasonnet.Mapper;
import com.datasonnet.MapperBuilder;
@@ -36,6 +37,7 @@ import com.datasonnet.document.Document;
import com.datasonnet.document.MediaType;
import com.datasonnet.document.MediaTypes;
import com.datasonnet.header.Header;
+import com.datasonnet.spi.Library;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.RuntimeExpressionException;
@@ -183,12 +185,19 @@ public class DatasonnetExpression extends ExpressionAdapter implements Expressio
language = (DatasonnetLanguage) context.resolveLanguage("datasonnet");
// initialize mapper eager
- language.computeIfMiss(expression, () -> new MapperBuilder(expression)
- .withInputNames("body")
- .withImports(resolveImports(language))
- .withLibrary(CML.getInstance())
- .withDefaultOutput(MediaTypes.APPLICATION_JAVA)
- .build());
+ language.computeIfMiss(expression, () -> {
+ MapperBuilder builder = new MapperBuilder(expression)
+ .withInputNames("body")
+ .withImports(resolveImports(language))
+ .withLibrary(CML.getInstance())
+ .withDefaultOutput(MediaTypes.APPLICATION_JAVA);
+
+ Set<Library> additionalLibraries = context.getRegistry().findByType(com.datasonnet.spi.Library.class);
+ for (Library lib : additionalLibraries) {
+ builder = builder.withLibrary(lib);
+ }
+ return builder.build();
+ });
}
// Getter/Setter methods
diff --git a/components/camel-datasonnet/src/test/java/library/TestLib.java b/components/camel-datasonnet/src/test/java/library/TestLib.java
new file mode 100644
index 00000000000..1a1f0e8dde0
--- /dev/null
+++ b/components/camel-datasonnet/src/test/java/library/TestLib.java
@@ -0,0 +1,72 @@
+/*
+ * 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 library;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+
+import com.datasonnet.header.Header;
+import com.datasonnet.spi.DataFormatService;
+import com.datasonnet.spi.Library;
+import org.springframework.stereotype.Component;
+import sjsonnet.Val;
+
+@Component
+public class TestLib extends Library {
+
+ private static final TestLib INSTANCE = new TestLib();
+
+ public TestLib() {
+ }
+
+ public static TestLib getInstance() {
+ return INSTANCE;
+ }
+
+ @Override
+ public String namespace() {
+ return "testlib";
+ }
+
+ @Override
+ public Map<String, Val.Func> functions(DataFormatService dataFormats, Header header) {
+ Map<String, Val.Func> answer = new HashMap<>();
+ answer.put("sayHello", makeSimpleFunc(
+ Collections.emptyList(), //parameters list
+ new Function<List<Val>, Val>() {
+ @Override
+ public Val apply(List<Val> vals) {
+ return new Val.Str("Hello, World");
+ }
+ }));
+ return answer;
+ }
+
+ @Override
+ public Map<String, Val.Obj> modules(DataFormatService dataFormats, Header header) {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Set<String> libsonnets() {
+ return Collections.emptySet();
+ }
+}
diff --git a/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetJavaDslTest.java b/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetJavaDslTest.java
index 00d9b482d54..2c980ff0005 100644
--- a/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetJavaDslTest.java
+++ b/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetJavaDslTest.java
@@ -21,6 +21,8 @@ import java.nio.charset.Charset;
import com.datasonnet.document.Document;
import com.datasonnet.document.MediaTypes;
+import library.TestLib;
+import org.apache.camel.BindToRegistry;
import org.apache.camel.Exchange;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
@@ -34,6 +36,11 @@ import org.skyscreamer.jsonassert.JSONAssert;
public class CamelDatasonnetJavaDslTest extends CamelTestSupport {
private MockEndpoint mock;
+ @BindToRegistry
+ public TestLib testLib() {
+ return TestLib.getInstance();
+ }
+
@Test
public void testTransform() throws Exception {
runCamelTest(loadResourceAsString("simpleMapping_payload.json"),
@@ -55,6 +62,13 @@ public class CamelDatasonnetJavaDslTest extends CamelTestSupport {
"direct:transformCSV");
}
+ @Test
+ public void testRegistryLibraries() throws Exception {
+ runCamelTest("{}",
+ "{ \"test\":\"Hello, World\"}",
+ "direct:registryLibraries");
+ }
+
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@@ -82,6 +96,12 @@ public class CamelDatasonnetJavaDslTest extends CamelTestSupport {
MediaTypes.APPLICATION_CSV_VALUE, MediaTypes.APPLICATION_JSON_VALUE))
.to("mock:direct:end");
+ from("direct:registryLibraries")
+ .routeId("registryLibraries")
+ .transform(datasonnet("{test: testlib.sayHello()}", String.class,
+ MediaTypes.APPLICATION_JSON_VALUE, MediaTypes.APPLICATION_JSON_VALUE))
+ .to("mock:direct:end");
+
}
};
}
diff --git a/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetTest.java b/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetTest.java
index 5963796d1ea..22486236499 100644
--- a/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetTest.java
+++ b/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetTest.java
@@ -95,6 +95,13 @@ public class CamelDatasonnetTest extends CamelSpringTestSupport {
"direct:nullInput");
}
+ @Test
+ public void testRegistryLibraries() throws Exception {
+ runCamelTest("",
+ "{ \"test\":\"Hello, World\"}",
+ "direct:registryLibraries");
+ }
+
@Test
public void testReadJava() throws Exception {
Gizmo theGizmo = new Gizmo();
diff --git a/components/camel-datasonnet/src/test/resources/org/apache/camel/language.datasonnet/camel-context.xml b/components/camel-datasonnet/src/test/resources/org/apache/camel/language.datasonnet/camel-context.xml
index 55752457395..91d33d838f1 100644
--- a/components/camel-datasonnet/src/test/resources/org/apache/camel/language.datasonnet/camel-context.xml
+++ b/components/camel-datasonnet/src/test/resources/org/apache/camel/language.datasonnet/camel-context.xml
@@ -20,10 +20,13 @@
<!-- Configures the Camel Context-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
+ <context:component-scan base-package="library"/>
<camelContext id="main" xmlns="http://camel.apache.org/schema/spring">
<route id="basicTransform">
@@ -175,6 +178,19 @@
<to uri="mock:direct:end"/>
</route>
+ <route id="registryLibraries">
+ <from uri="direct:registryLibraries"/>
+ <setBody>
+ <datasonnet outputMediaType="application/json" resultType="java.lang.String">
+ {
+ test: testlib.sayHello()
+ }
+ </datasonnet>
+ </setBody>
+
+ <to uri="mock:direct:end"/>
+ </route>
+
</camelContext>
</beans>
diff --git a/core/camel-main/src/generated/resources/org/apache/camel/main/components.properties b/core/camel-main/src/generated/resources/org/apache/camel/main/components.properties
index e5655177c61..29c3afe39fa 100644
--- a/core/camel-main/src/generated/resources/org/apache/camel/main/components.properties
+++ b/core/camel-main/src/generated/resources/org/apache/camel/main/components.properties
@@ -340,4 +340,4 @@ xslt
xslt-saxon
zendesk
zookeeper
-zookeeper-master
+zookeeper-master
\ No newline at end of file