From 2443238052497110c5d4c2f54433ff2e1fbfade5 Mon Sep 17 00:00:00 2001 From: o2null Date: Fri, 22 Mar 2024 20:01:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=84=9A=E6=9C=AC=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E4=B8=AD=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8=E8=B5=8B?= =?UTF-8?q?=E5=80=BC=E5=AF=B9=E8=B1=A1.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripting/GraalvmScriptingFactory.java | 22 ++++++++++++++++++- .../core/entity/content/Data.java | 7 ++++++ .../core/entity/TestClient.java | 21 ++++++++++++++++++ .../service/processing/Processing.java | 1 - .../processor/invoke/InvokeProcessor.java | 2 +- 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 o2server/x_processplatform_core_entity/src/test/java/test/com/x/processplatform/core/entity/TestClient.java diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/GraalvmScriptingFactory.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/GraalvmScriptingFactory.java index b32980b86d..d658a6025e 100755 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/GraalvmScriptingFactory.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/GraalvmScriptingFactory.java @@ -1,10 +1,13 @@ package com.x.base.core.project.scripting; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Optional; @@ -16,6 +19,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.commons.beanutils.MethodUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.graalvm.polyglot.Context; @@ -77,11 +81,27 @@ public class GraalvmScriptingFactory { try (Context context = Context.newBuilder().engine(ENGINE).allowHostClassLoading(true) .allowHostAccess(HostAccess.ALL).allowHostClassLookup(GraalvmScriptingFactory::allowClass).build()) { Value bind = context.getBindings(LANGUAGE_ID_JS); + Map> dataAssignDataEmbedDataClasses = new HashMap<>(); if (null != bindings) { + dataAssignDataEmbedDataClasses = Stream.of(BINDING_NAME_EMBEDDATA, BINDING_NAME_DATA) + .filter(bindings::containsKey).filter(o -> Objects.nonNull(bindings.get(o))) + .collect(Collectors.toMap(Function.identity(), o -> bindings.get(o).getClass())); bindings.entrySet().forEach(en -> bind.putMember(en.getKey(), en.getValue())); } context.eval(getcommonScriptSource()); - return promise(context, context.eval(source)); + Value value = context.eval(source); + if ((null != bindings) && (!dataAssignDataEmbedDataClasses.isEmpty())) { + dataAssignDataEmbedDataClasses.entrySet().forEach(o -> { + Value v = bind.getMember(o.getKey().substring(o.getKey().indexOf("_") + 1)); + try { + MethodUtils.invokeExactMethod(bindings.get(o.getKey()), "replaceContent", + bind.getMember("JSON").invokeMember("stringify", v).asString()); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + LOGGER.error(e); + } + }); + } + return promise(context, value); } } diff --git a/o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/Data.java b/o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/Data.java index cf67746ea7..386a6266df 100755 --- a/o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/Data.java +++ b/o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/Data.java @@ -4,6 +4,7 @@ import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Objects; import org.apache.commons.beanutils.PropertyUtils; @@ -491,6 +492,12 @@ public class Data extends ListOrderedMap { .count() == 0; } + @SuppressWarnings("unchecked") + public void replaceContent(String json) { + this.clear(); + this.putAll(XGsonBuilder.instance().fromJson(json, Map.class)); + } + @Override /* 需要重载,前端toString需要这个方法. */ public String toString() { diff --git a/o2server/x_processplatform_core_entity/src/test/java/test/com/x/processplatform/core/entity/TestClient.java b/o2server/x_processplatform_core_entity/src/test/java/test/com/x/processplatform/core/entity/TestClient.java new file mode 100644 index 0000000000..50423ccd7f --- /dev/null +++ b/o2server/x_processplatform_core_entity/src/test/java/test/com/x/processplatform/core/entity/TestClient.java @@ -0,0 +1,21 @@ +package test.com.x.processplatform.core.entity; + +import java.util.Arrays; + +import com.x.base.core.project.gson.XGsonBuilder; +import com.x.processplatform.core.entity.content.Data; + +public class TestClient { + public static void main(String[] args) { + + Data data = new Data(); + + data.put("a", Arrays.asList("bb", "c")); + + System.out.println(XGsonBuilder.toJson(data)); + + data.replaceContent("{\"d\":\"aaa\"}"); + System.out.println(XGsonBuilder.toJson(data)); + } + +} diff --git a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/Processing.java b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/Processing.java index aa726e30f5..3bd3d35664 100755 --- a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/Processing.java +++ b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/Processing.java @@ -9,7 +9,6 @@ import org.apache.commons.lang3.StringUtils; import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.factory.EntityManagerContainerFactory; -import com.x.base.core.project.gson.XGsonBuilder; import com.x.base.core.project.tools.ListTools; import com.x.processplatform.core.entity.content.Work; import com.x.processplatform.core.express.ProcessingAttributes; diff --git a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/InvokeProcessor.java b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/InvokeProcessor.java index 5143211e12..e05508b7c7 100755 --- a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/InvokeProcessor.java +++ b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/InvokeProcessor.java @@ -480,7 +480,7 @@ public class InvokeProcessor extends AbstractInvokeProcessor { GraalvmScriptingFactory.Bindings bindings = aeiObjects.bindings() .putMember(GraalvmScriptingFactory.BINDING_NAME_JAXRSBODY, jaxrsBody); GraalvmScriptingFactory.eval(source, bindings, jsonElement -> { - if (!jsonElement.isJsonNull()) { + if (Objects.nonNull(jsonElement) && (!jsonElement.isJsonNull())) { jaxrsBody.set(gson.toJson(jsonElement)); } }); -- GitLab