From 856e49d961daa08604ca9389f93672d0c9c171e4 Mon Sep 17 00:00:00 2001 From: canonical Date: Fri, 17 Jan 2025 18:46:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3DslModelToXNodeTransformer?= =?UTF-8?q?=E5=AF=B9=E4=BA=8E=E5=A4=8D=E6=9D=82=E6=89=A9=E5=B1=95=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/nop/cli/commands/CliGenCommand.java | 2 +- .../src/test/java/io/nop/cli/TestNopCli.java | 17 ++++++++++++++++- .../xdsl/json/DslModelToXNodeTransformer.java | 11 +++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/nop-cli-core/src/main/java/io/nop/cli/commands/CliGenCommand.java b/nop-cli-core/src/main/java/io/nop/cli/commands/CliGenCommand.java index b4245da96..2077fe9ba 100644 --- a/nop-cli-core/src/main/java/io/nop/cli/commands/CliGenCommand.java +++ b/nop-cli-core/src/main/java/io/nop/cli/commands/CliGenCommand.java @@ -36,7 +36,7 @@ public class CliGenCommand implements Callable { static final Logger LOG = LoggerFactory.getLogger(CliGenCommand.class); - @CommandLine.Option(names = {"-t", "--template"}, + @CommandLine.Option(names = {"-t", "--template"}, required = true, description = "模板文件路径,至少需要指定一个模板。") String[] templates; diff --git a/nop-cli-core/src/test/java/io/nop/cli/TestNopCli.java b/nop-cli-core/src/test/java/io/nop/cli/TestNopCli.java index 82f27c3fe..10a78dc5b 100644 --- a/nop-cli-core/src/test/java/io/nop/cli/TestNopCli.java +++ b/nop-cli-core/src/test/java/io/nop/cli/TestNopCli.java @@ -109,7 +109,22 @@ public void testRunBatchDemo() { File devDir = new File(getModuleDir(), "../nop-cli/demo/"); System.setProperty(CoreConfigs.CFG_DEV_ROOT_PATH.getName(), devDir.getAbsolutePath()); System.setProperty(CoreConfigs.CFG_RESOURCE_DIR_OVERRIDE_VFS.getName(), file.getAbsolutePath()); - String[] args = new String[]{"run-task", "v:/batch/batch-demo.task.xml", "-i", "{bizDate:'2024-12-08'}"}; + String[] args = new String[]{"run-task", "v:/batch/batch-demo.task.xml", "-i", "{bizDate:'2024-12-08'}", + "-t","v:/worldline/temp"}; + NopCliApplication app = new NopCliApplication(); + app.setFactory(factory); + int ret = app.run(args); + assertEquals(0, ret); + System.getProperties().remove(CoreConfigs.CFG_RESOURCE_DIR_OVERRIDE_VFS.getName()); + } + + @Test + public void testApi() { + CoreInitialization.destroy(); + File file = new File("C:\\workspace\\cardlite-product\\codegen\\_vfs"); + System.setProperty(CoreConfigs.CFG_RESOURCE_DIR_OVERRIDE_VFS.getName(), file.getAbsolutePath()); + String[] args = new String[]{"gen", "file:/C:/workspace/cardlite-sinopac/codegen/model/api/CAS-delta.api.xml", + "-t=v:/worldline/templates/api","-o", "C:/workspace/cardlite-sinopac/codegen/gen/api"}; NopCliApplication app = new NopCliApplication(); app.setFactory(factory); int ret = app.run(args); diff --git a/nop-xlang/src/main/java/io/nop/xlang/xdsl/json/DslModelToXNodeTransformer.java b/nop-xlang/src/main/java/io/nop/xlang/xdsl/json/DslModelToXNodeTransformer.java index 1b821d033..bee333cbe 100644 --- a/nop-xlang/src/main/java/io/nop/xlang/xdsl/json/DslModelToXNodeTransformer.java +++ b/nop-xlang/src/main/java/io/nop/xlang/xdsl/json/DslModelToXNodeTransformer.java @@ -7,6 +7,7 @@ */ package io.nop.xlang.xdsl.json; +import io.nop.api.core.ApiConstants; import io.nop.api.core.beans.TreeBean; import io.nop.api.core.exceptions.NopException; import io.nop.api.core.util.ISourceLocationGetter; @@ -14,6 +15,7 @@ import io.nop.core.CoreConstants; import io.nop.core.lang.eval.DisabledEvalScope; import io.nop.core.lang.json.JObject; +import io.nop.core.lang.json.JsonEncodeString; import io.nop.core.lang.xml.IObjectToXNodeTransformer; import io.nop.core.lang.xml.XNode; import io.nop.core.lang.xml.XNodeValuePosition; @@ -164,8 +166,13 @@ protected void addToNode(IObjSchema schema, XNode node, Object map, String key, } else if (key.indexOf(':') > 0) { // 具有名字空间的属性 if (value instanceof Map) { - TreeBean bean = TreeBean.createFromJson((Map) value); - node.appendChild(XNode.fromTreeBean(bean)); + Map mapValue = (Map) value; + if(mapValue.get(ApiConstants.TREE_BEAN_PROP_TYPE) == null){ + node.setAttr(key, JsonEncodeString.of(null, value)); + }else { + TreeBean bean = TreeBean.createFromJson(mapValue); + node.appendChild(XNode.fromTreeBean(bean)); + } } else { node.setAttr(getLocation(map, key, value), key, value); }