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;

Reply via email to