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 <[email protected]> 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;
