You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by ni...@apache.org on 2022/08/05 03:27:41 UTC
[openwhisk-runtime-java] branch support-array-result-include-sequence-action created (now 177e122)
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a change to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
at 177e122 Support sequence action for java8
This branch includes the following new commits:
new 3e1cbcd Support array result
new 3ea32fd Change Launcher to support array
new 95bbf04 Make javaactionloop to support array as input
new 6274269 Fix test case error
new da7cc6d Add test case
new ccffe21 Change depend
new d107659 Optimize test case
new 4a40fe0 Use go1.18 to build actionloop
new b99e99c Change depend on master branch
new babd2c3 Add another test case for sequence action
new 574da16 Add document
new 177e122 Support sequence action for java8
The 12 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[openwhisk-runtime-java] 11/12: Add document
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit 574da1647189b07ed409c19cdd6f65c6a3b3e62c
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Fri Aug 5 10:25:40 2022 +0800
Add document
---
README.md | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/README.md b/README.md
index 58f46c9..c7ce6ca 100644
--- a/README.md
+++ b/README.md
@@ -68,6 +68,36 @@ If needed you can also customize the method name of your Java action. This
can be done by specifying the Java fully-qualified method name of your action,
e.q., `--main com.example.MyMain#methodName`
+Not only support return JsonObject but also support return JsonArray, the main function would be:
+
+```java
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+
+public class HelloArray {
+ public static JsonArray main(JsonObject args) {
+ JsonArray jsonArray = new JsonArray();
+ jsonArray.add("a");
+ jsonArray.add("b");
+ return jsonArray;
+ }
+}
+```
+
+And support array result for sequence action as well, the first action's array result can be used as next action's input parameter.
+
+So the function would be:
+
+```java
+import com.google.gson.JsonArray;
+
+public class Sort {
+ public static JsonArray main(JsonArray args) {
+ return args;
+ }
+}
+```
+
### Create the Java Action
To use as a docker action:
```
[openwhisk-runtime-java] 10/12: Add another test case for sequence action
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit babd2c380f97c6e8c62ac91606bd4a4d87607596
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Fri Aug 5 09:53:39 2022 +0800
Add another test case for sequence action
---
.../JavaActionContainerTests.scala | 29 +++++++++++++++++-----
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala b/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
index 4981086..6ece41a 100644
--- a/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
+++ b/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
@@ -299,7 +299,7 @@ class JavaActionContainerTests extends BasicActionRunnerTests with WskActorSyste
})
}
- it should "support array result" in {
+ it should "support return array result" in {
val (out, err) = withActionContainer() { c =>
val jar = JarBuilder.mkBase64Jar(
Seq("", "HelloArrayWhisk.java") ->
@@ -324,12 +324,29 @@ class JavaActionContainerTests extends BasicActionRunnerTests with WskActorSyste
runCode should be(200)
runRes shouldBe Some(JsArray(JsString("a"), JsString("b")))
}
+ }
- checkStreams(out, err, {
- case (o, e) =>
- o shouldBe empty
- e shouldBe empty
- })
+ it should "support array as input param" in {
+ val (out, err) = withActionContainer() { c =>
+ val jar = JarBuilder.mkBase64Jar(
+ Seq("", "HelloArrayWhisk.java") ->
+ """
+ | import com.google.gson.JsonArray;
+ |
+ | public class HelloArrayWhisk {
+ | public static JsonArray main(JsonArray args) throws Exception {
+ | return args;
+ | }
+ | }
+ """.stripMargin.trim)
+
+ val (initCode, _) = c.init(initPayload(jar, "HelloArrayWhisk"))
+ initCode should be(200)
+
+ val (runCode, runRes) = c.runForJsArray(runPayload(JsArray(JsString("a"), JsString("b"))))
+ runCode should be(200)
+ runRes shouldBe Some(JsArray(JsString("a"), JsString("b")))
+ }
}
it should "survive System.exit" in {
[openwhisk-runtime-java] 08/12: Use go1.18 to build actionloop
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit 4a40fe0c6c16a1b1c02594ad65a2d9ed24327115
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Mon Jul 25 15:30:32 2022 +0800
Use go1.18 to build actionloop
---
core/java8actionloop/Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/java8actionloop/Dockerfile b/core/java8actionloop/Dockerfile
index f14c47f..172d403 100644
--- a/core/java8actionloop/Dockerfile
+++ b/core/java8actionloop/Dockerfile
@@ -16,7 +16,7 @@
#
# build go proxy from source
-FROM golang:1.17 AS builder_source
+FROM golang:1.18 AS builder_source
ARG GO_PROXY_GITHUB_USER=ningyougang
ARG GO_PROXY_GITHUB_BRANCH=support-array-result-include-sequence-action
RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
[openwhisk-runtime-java] 01/12: Support array result
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit 3e1cbcd451d3f8f6636c6ed3f7d5f7f92905224b
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Wed May 18 09:01:57 2022 +0800
Support array result
- JsonObject is good here
- JsonArray is bad here
---
.../java/org/apache/openwhisk/runtime/java/action/JarLoader.java | 8 +++++---
.../main/java/org/apache/openwhisk/runtime/java/action/Proxy.java | 4 ++--
core/java8actionloop/lib/src/Launcher.java | 2 +-
3 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/JarLoader.java b/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/JarLoader.java
index e17d0a9..29ec30f 100644
--- a/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/JarLoader.java
+++ b/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/JarLoader.java
@@ -32,6 +32,8 @@ import java.util.Base64;
import java.util.Collections;
import java.util.Map;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
public class JarLoader extends URLClassLoader {
@@ -65,15 +67,15 @@ public class JarLoader extends URLClassLoader {
Method m = mainClass.getMethod(entrypointMethodName, new Class[] { JsonObject.class });
m.setAccessible(true);
int modifiers = m.getModifiers();
- if (m.getReturnType() != JsonObject.class || !Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
+ if ((m.getReturnType() != JsonObject.class && m.getReturnType() != JsonArray.class) || !Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
throw new NoSuchMethodException("main");
}
this.mainMethod = m;
}
- public JsonObject invokeMain(JsonObject arg, Map<String, String> env) throws Exception {
+ public Object invokeMain(JsonObject arg, Map<String, String> env) throws Exception {
augmentEnv(env);
- return (JsonObject) mainMethod.invoke(null, arg);
+ return mainMethod.invoke(null, arg);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
diff --git a/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/Proxy.java b/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/Proxy.java
index 4c0dc21..27fb175 100644
--- a/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/Proxy.java
+++ b/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/Proxy.java
@@ -153,8 +153,8 @@ public class Proxy {
Thread.currentThread().setContextClassLoader(loader);
System.setSecurityManager(new WhiskSecurityManager());
- // User code starts running here.
- JsonObject output = loader.invokeMain(inputObject, env);
+ // User code starts running here. the return object supports JsonObject and JsonArray both.
+ Object output = loader.invokeMain(inputObject, env);
// User code finished running here.
if (output == null) {
diff --git a/core/java8actionloop/lib/src/Launcher.java b/core/java8actionloop/lib/src/Launcher.java
index ef571e9..7f97202 100644
--- a/core/java8actionloop/lib/src/Launcher.java
+++ b/core/java8actionloop/lib/src/Launcher.java
@@ -62,7 +62,7 @@ class Launcher {
Method m = mainClass.getMethod(mainMethodName, new Class[] { JsonObject.class });
m.setAccessible(true);
int modifiers = m.getModifiers();
- if (m.getReturnType() != JsonObject.class || !Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
+ if ((m.getReturnType() != JsonObject.class && m.getReturnType() != JsonArray.class) || !Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
throw new NoSuchMethodException(mainMethodName);
}
mainMethod = m;
[openwhisk-runtime-java] 06/12: Change depend
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit ccffe215a9151464d9bfb1f6fb65fd5d47ba356e
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Mon Jul 25 15:02:16 2022 +0800
Change depend
---
core/java8actionloop/Dockerfile | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/core/java8actionloop/Dockerfile b/core/java8actionloop/Dockerfile
index 510393d..f14c47f 100644
--- a/core/java8actionloop/Dockerfile
+++ b/core/java8actionloop/Dockerfile
@@ -16,9 +16,9 @@
#
# build go proxy from source
-FROM golang:1.16 AS builder_source
-ARG GO_PROXY_GITHUB_USER=apache
-ARG GO_PROXY_GITHUB_BRANCH=master
+FROM golang:1.17 AS builder_source
+ARG GO_PROXY_GITHUB_USER=ningyougang
+ARG GO_PROXY_GITHUB_BRANCH=support-array-result-include-sequence-action
RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
https://github.com/${GO_PROXY_GITHUB_USER}/openwhisk-runtime-go /src ;\
cd /src ; env GO111MODULE=on CGO_ENABLED=0 go build main/proxy.go && \
@@ -31,13 +31,13 @@ RUN curl -sL \
https://github.com/apache/openwhisk-runtime-go/archive/{$GO_PROXY_RELEASE_VERSION}.tar.gz\
| tar xzf -\
&& cd openwhisk-runtime-go-*/main\
- && GO111MODULE=on go build -o /bin/proxy
+ && GO111MODULE=on CGO_ENABLED=0 go build -o /bin/proxy
# Use AdoptOpenJDK's JDK8, OpenJ9, ubuntu
FROM ibm-semeru-runtimes:open-8u332-b09-jdk-focal
# select the builder to use
-ARG GO_PROXY_BUILD_FROM=release
+ARG GO_PROXY_BUILD_FROM=source
RUN rm -rf /var/lib/apt/lists/* \
&& apt-get clean \
[openwhisk-runtime-java] 02/12: Change Launcher to support array
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit 3ea32fdb528e82e5a497640b0a58693603244d86
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Wed May 18 11:12:21 2022 +0800
Change Launcher to support array
---
core/java8actionloop/lib/src/Launcher.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/core/java8actionloop/lib/src/Launcher.java b/core/java8actionloop/lib/src/Launcher.java
index 7f97202..a5cbf05 100644
--- a/core/java8actionloop/lib/src/Launcher.java
+++ b/core/java8actionloop/lib/src/Launcher.java
@@ -68,9 +68,9 @@ class Launcher {
mainMethod = m;
}
- private static JsonObject invokeMain(JsonObject arg, Map<String, String> env) throws Exception {
+ private static Object invokeMain(JsonObject arg, Map<String, String> env) throws Exception {
augmentEnv(env);
- return (JsonObject) mainMethod.invoke(null, arg);
+ return mainMethod.invoke(null, arg);
}
private static SecurityManager defaultSecurityManager = null;
@@ -142,7 +142,7 @@ class Launcher {
}
augmentEnv(env);
}
- JsonElement response = invokeMain(payload, env);
+ Object response = invokeMain(payload, env);
out.println(response.toString());
} catch(NullPointerException npe) {
System.out.println("the action returned null");
[openwhisk-runtime-java] 05/12: Add test case
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit da7cc6d3554f587c83ebd68c1f54724eaa3b7f89
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Mon Jul 18 15:47:04 2022 +0800
Add test case
---
.../JavaActionContainerTests.scala | 33 ++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala b/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
index 17b0e5d..8396404 100644
--- a/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
+++ b/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
@@ -299,6 +299,39 @@ class JavaActionContainerTests extends BasicActionRunnerTests with WskActorSyste
})
}
+ it should "support array result" in {
+ val (out, err) = withActionContainer() { c =>
+ val jar = JarBuilder.mkBase64Jar(
+ Seq("", "HelloArrayWhisk.java") ->
+ """
+ | import com.google.gson.JsonArray;
+ | import com.google.gson.JsonObject;
+ |
+ | public class HelloArrayWhisk {
+ | public static JsonArray main(JsonObject args) throws Exception {
+ | JsonArray jsonArray = new JsonArray();
+ | jsonArray.add("a");
+ | jsonArray.add("b");
+ | return jsonArray;
+ | }
+ | }
+ """.stripMargin.trim)
+
+ val (initCode, _) = c.init(initPayload(jar, "HelloArrayWhisk"))
+ initCode should be(200)
+
+ val (runCode, runRes) = c.runForJsArray(JsObject())
+ runCode should be(200)
+ runRes.get.elements shouldBe Vector(JsString("a"), JsString("b"))
+ }
+
+ checkStreams(out, err, {
+ case (o, e) =>
+ o shouldBe empty
+ e shouldBe empty
+ })
+ }
+
it should "survive System.exit" in {
val (out, err) = withActionContainer() { c =>
val jar = JarBuilder.mkBase64Jar(
[openwhisk-runtime-java] 03/12: Make javaactionloop to support array as input
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit 95bbf04623f4ff6cd2be14b1d5fb6a45e5a5eadc
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Tue Jul 5 11:22:43 2022 +0800
Make javaactionloop to support array as input
---
core/java8actionloop/lib/src/Launcher.java | 43 +++++++++++++++++++++---------
1 file changed, 31 insertions(+), 12 deletions(-)
diff --git a/core/java8actionloop/lib/src/Launcher.java b/core/java8actionloop/lib/src/Launcher.java
index a5cbf05..443ca4e 100644
--- a/core/java8actionloop/lib/src/Launcher.java
+++ b/core/java8actionloop/lib/src/Launcher.java
@@ -59,16 +59,9 @@ class Launcher {
}
mainClass = Class.forName(mainClassName);
- Method m = mainClass.getMethod(mainMethodName, new Class[] { JsonObject.class });
- m.setAccessible(true);
- int modifiers = m.getModifiers();
- if ((m.getReturnType() != JsonObject.class && m.getReturnType() != JsonArray.class) || !Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
- throw new NoSuchMethodException(mainMethodName);
- }
- mainMethod = m;
}
- private static Object invokeMain(JsonObject arg, Map<String, String> env) throws Exception {
+ private static Object invokeMain(JsonElement arg, Map<String, String> env) throws Exception {
augmentEnv(env);
return mainMethod.invoke(null, arg);
}
@@ -119,7 +112,9 @@ class Launcher {
new OutputStreamWriter(
new FileOutputStream("/dev/fd/3"), "UTF-8"));
JsonParser json = new JsonParser();
- JsonObject empty = json.parse("{}").getAsJsonObject();
+ JsonObject emptyForJsonObject = json.parse("{}").getAsJsonObject();
+ JsonArray emptyForJsonArray = json.parse("[]").getAsJsonArray();
+ Boolean isJsonObjectParam = true;
String input = "";
while (true) {
try {
@@ -127,14 +122,19 @@ class Launcher {
if (input == null)
break;
JsonElement element = json.parse(input);
- JsonObject payload = empty.deepCopy();
+ JsonObject payloadForJsonObject = emptyForJsonObject.deepCopy();
+ JsonArray payloadForJsonArray = emptyForJsonArray.deepCopy();
HashMap<String, String> env = new HashMap<String, String>();
if (element.isJsonObject()) {
// collect payload and environment
for (Map.Entry<String, JsonElement> entry : element.getAsJsonObject().entrySet()) {
if (entry.getKey().equals("value")) {
if (entry.getValue().isJsonObject())
- payload = entry.getValue().getAsJsonObject();
+ payloadForJsonObject = entry.getValue().getAsJsonObject();
+ else {
+ payloadForJsonArray = entry.getValue().getAsJsonArray();
+ isJsonObjectParam = false;
+ }
} else {
env.put(String.format("__OW_%s", entry.getKey().toUpperCase()),
entry.getValue().getAsString());
@@ -142,7 +142,26 @@ class Launcher {
}
augmentEnv(env);
}
- Object response = invokeMain(payload, env);
+
+ Method m = null;
+ if (isJsonObjectParam) {
+ m = mainClass.getMethod(mainMethodName, new Class[] { JsonObject.class });
+ } else {
+ m = mainClass.getMethod(mainMethodName, new Class[] { JsonArray.class });
+ }
+ m.setAccessible(true);
+ int modifiers = m.getModifiers();
+ if ((m.getReturnType() != JsonObject.class && m.getReturnType() != JsonArray.class) || !Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
+ throw new NoSuchMethodException(mainMethodName);
+ }
+ mainMethod = m;
+
+ Object response;
+ if (isJsonObjectParam) {
+ response = invokeMain(payloadForJsonObject, env);
+ } else {
+ response = invokeMain(payloadForJsonArray, env);
+ }
out.println(response.toString());
} catch(NullPointerException npe) {
System.out.println("the action returned null");
[openwhisk-runtime-java] 04/12: Fix test case error
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit 627426948d70d17be081dfd4bd43d6726f08164a
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Mon Jul 18 14:49:53 2022 +0800
Fix test case error
---
core/java8actionloop/lib/src/Launcher.java | 11 +++++++++++
.../scala/actionContainers/JavaActionContainerTests.scala | 4 +---
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/core/java8actionloop/lib/src/Launcher.java b/core/java8actionloop/lib/src/Launcher.java
index 443ca4e..f0659d2 100644
--- a/core/java8actionloop/lib/src/Launcher.java
+++ b/core/java8actionloop/lib/src/Launcher.java
@@ -59,6 +59,17 @@ class Launcher {
}
mainClass = Class.forName(mainClassName);
+ Method[] methods = mainClass.getDeclaredMethods();
+ Boolean existMain = false;
+ for(Method method: methods) {
+ if (method.getName().equals(mainMethodName)) {
+ existMain = true;
+ break;
+ }
+ }
+ if (!existMain) {
+ throw new NoSuchMethodException(mainMethodName);
+ }
}
private static Object invokeMain(JsonElement arg, Map<String, String> env) throws Exception {
diff --git a/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala b/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
index 357885e..17b0e5d 100644
--- a/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
+++ b/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
@@ -157,9 +157,7 @@ class JavaActionContainerTests extends BasicActionRunnerTests with WskActorSyste
val expected = m match {
case c if c == "x" || c == "!" => s"$errPrefix java.lang.ClassNotFoundException: example.HelloWhisk$c"
- case "#bogus" =>
- s"$errPrefix java.lang.NoSuchMethodException: example.HelloWhisk.bogus(com.google.gson.JsonObject)"
- case _ => s"$errPrefix java.lang.NoSuchMethodException: example.HelloWhisk.main(com.google.gson.JsonObject)"
+ case _ => s"$errPrefix java.lang.NoSuchMethodException"
}
val error = out.get.fields.get("error").get.toString()
[openwhisk-runtime-java] 09/12: Change depend on master branch
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit b99e99c5e83963b3fa5176073f888a5ed6959bda
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Mon Jul 25 15:43:15 2022 +0800
Change depend on master branch
---
core/java8actionloop/Dockerfile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/core/java8actionloop/Dockerfile b/core/java8actionloop/Dockerfile
index 172d403..415e07c 100644
--- a/core/java8actionloop/Dockerfile
+++ b/core/java8actionloop/Dockerfile
@@ -17,8 +17,8 @@
# build go proxy from source
FROM golang:1.18 AS builder_source
-ARG GO_PROXY_GITHUB_USER=ningyougang
-ARG GO_PROXY_GITHUB_BRANCH=support-array-result-include-sequence-action
+ARG GO_PROXY_GITHUB_USER=apache
+ARG GO_PROXY_GITHUB_BRANCH=master
RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \
https://github.com/${GO_PROXY_GITHUB_USER}/openwhisk-runtime-go /src ;\
cd /src ; env GO111MODULE=on CGO_ENABLED=0 go build main/proxy.go && \
[openwhisk-runtime-java] 12/12: Support sequence action for java8
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit 177e1229c430e6b3cf54ae57d460ee2e2ac0a60e
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Fri Aug 5 11:26:50 2022 +0800
Support sequence action for java8
Support json array for input param
---
.../openwhisk/runtime/java/action/JarLoader.java | 23 +++-----------
.../openwhisk/runtime/java/action/Proxy.java | 37 ++++++++++++++++++++--
2 files changed, 40 insertions(+), 20 deletions(-)
diff --git a/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/JarLoader.java b/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/JarLoader.java
index 29ec30f..1af3b98 100644
--- a/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/JarLoader.java
+++ b/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/JarLoader.java
@@ -37,8 +37,8 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
public class JarLoader extends URLClassLoader {
- private final Class<?> mainClass;
- private final Method mainMethod;
+ public final Class<?> mainClass;
+ public final String entrypointMethodName;
public static Path saveBase64EncodedFile(InputStream encoded) throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
@@ -55,31 +55,18 @@ public class JarLoader extends URLClassLoader {
}
public JarLoader(Path jarPath, String entrypoint)
- throws MalformedURLException, ClassNotFoundException, NoSuchMethodException, SecurityException {
+ throws MalformedURLException, ClassNotFoundException, SecurityException {
super(new URL[] { jarPath.toUri().toURL() });
final String[] splittedEntrypoint = entrypoint.split("#");
final String entrypointClassName = splittedEntrypoint[0];
- final String entrypointMethodName = splittedEntrypoint.length > 1 ? splittedEntrypoint[1] : "main";
+ this.entrypointMethodName = splittedEntrypoint.length > 1 ? splittedEntrypoint[1] : "main";
this.mainClass = loadClass(entrypointClassName);
-
- Method m = mainClass.getMethod(entrypointMethodName, new Class[] { JsonObject.class });
- m.setAccessible(true);
- int modifiers = m.getModifiers();
- if ((m.getReturnType() != JsonObject.class && m.getReturnType() != JsonArray.class) || !Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
- throw new NoSuchMethodException("main");
- }
- this.mainMethod = m;
- }
-
- public Object invokeMain(JsonObject arg, Map<String, String> env) throws Exception {
- augmentEnv(env);
- return mainMethod.invoke(null, arg);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
- private static void augmentEnv(Map<String, String> newEnv) {
+ public static void augmentEnv(Map<String, String> newEnv) {
try {
for (Class cl : Collections.class.getDeclaredClasses()) {
if ("java.util.Collections$UnmodifiableMap".equals(cl.getName())) {
diff --git a/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/Proxy.java b/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/Proxy.java
index 27fb175..b8519ec 100644
--- a/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/Proxy.java
+++ b/core/java8/proxy/src/main/java/org/apache/openwhisk/runtime/java/action/Proxy.java
@@ -24,6 +24,8 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
@@ -31,6 +33,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@@ -139,7 +142,17 @@ public class Proxy {
InputStream is = t.getRequestBody();
JsonParser parser = new JsonParser();
JsonObject body = parser.parse(new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))).getAsJsonObject();
- JsonObject inputObject = body.getAsJsonObject("value");
+ JsonParser json = new JsonParser();
+ JsonObject payloadForJsonObject = json.parse("{}").getAsJsonObject();
+ JsonArray payloadForJsonArray = json.parse("[]").getAsJsonArray();
+ Boolean isJsonObjectParam = true;
+ JsonElement inputJsonElement = body.get("value");
+ if (inputJsonElement.isJsonObject()) {
+ payloadForJsonObject = inputJsonElement.getAsJsonObject();
+ } else {
+ payloadForJsonArray = inputJsonElement.getAsJsonArray();
+ isJsonObjectParam = false;
+ }
HashMap<String, String> env = new HashMap<String, String>();
Set<Map.Entry<String, JsonElement>> entrySet = body.entrySet();
@@ -153,8 +166,28 @@ public class Proxy {
Thread.currentThread().setContextClassLoader(loader);
System.setSecurityManager(new WhiskSecurityManager());
+ Method mainMethod = null;
+ String mainMethodName = loader.entrypointMethodName;
+ if (isJsonObjectParam) {
+ mainMethod = loader.mainClass.getMethod(mainMethodName, new Class[] { JsonObject.class });
+ } else {
+ mainMethod = loader.mainClass.getMethod(mainMethodName, new Class[] { JsonArray.class });
+ }
+ mainMethod.setAccessible(true);
+ int modifiers = mainMethod.getModifiers();
+ if ((mainMethod.getReturnType() != JsonObject.class && mainMethod.getReturnType() != JsonArray.class) || !Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
+ throw new NoSuchMethodException(mainMethodName);
+ }
+
// User code starts running here. the return object supports JsonObject and JsonArray both.
- Object output = loader.invokeMain(inputObject, env);
+ Object output;
+ if (isJsonObjectParam) {
+ loader.augmentEnv(env);
+ output = mainMethod.invoke(null, payloadForJsonObject);
+ } else {
+ loader.augmentEnv(env);
+ output = mainMethod.invoke(null, payloadForJsonArray);
+ }
// User code finished running here.
if (output == null) {
[openwhisk-runtime-java] 07/12: Optimize test case
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch support-array-result-include-sequence-action
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-java.git
commit d1076596132277533f098b6f86e5d04cbcae44ff
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Mon Jul 25 15:28:36 2022 +0800
Optimize test case
---
tests/src/test/scala/actionContainers/JavaActionContainerTests.scala | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala b/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
index 8396404..4981086 100644
--- a/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
+++ b/tests/src/test/scala/actionContainers/JavaActionContainerTests.scala
@@ -322,7 +322,7 @@ class JavaActionContainerTests extends BasicActionRunnerTests with WskActorSyste
val (runCode, runRes) = c.runForJsArray(JsObject())
runCode should be(200)
- runRes.get.elements shouldBe Vector(JsString("a"), JsString("b"))
+ runRes shouldBe Some(JsArray(JsString("a"), JsString("b")))
}
checkStreams(out, err, {