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:44 UTC
[openwhisk-runtime-java] 03/12: Make javaactionloop to support array as input
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");