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