This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch jp in repository https://gitbox.apache.org/repos/asf/camel.git
commit 525373c08edb29fc5dff6e938db28aac927a0b8f Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sun Nov 26 11:52:12 2023 +0100 camel-jbang - Prototype for transform message command. --- .../camel/cli/connector/LocalCliConnector.java | 120 ++++++++++----------- .../commands/action/TransformMessageAction.java | 19 +--- 2 files changed, 65 insertions(+), 74 deletions(-) diff --git a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java index f992d5a0235..641569e55b9 100644 --- a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java +++ b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java @@ -493,70 +493,70 @@ public class LocalCliConnector extends ServiceSupport implements CliConnector, C StopWatch watch = new StopWatch(); long timestamp = System.currentTimeMillis(); String language = root.getString("language"); - String expression = Jsoner.unescape(root.getStringOrDefault("expression", "")); - String body = root.getString("body"); + String template = Jsoner.unescape(root.getString("template")); + if (template.startsWith("file:")) { + template = "resource:" + template; + } + String body = Jsoner.unescape(root.getString("body")); + InputStream is = null; + Object b = body; + Map<String, Object> map = null; + if (body.startsWith("file:")) { + File file = new File(body.substring(5)); + is = new FileInputStream(file); + b = IOHelper.loadText(is); + } Collection<JsonObject> headers = root.getCollection("headers"); - if (body != null) { - InputStream is = null; - Object b = body; - Map<String, Object> map = null; - if (body.startsWith("file:")) { - File file = new File(body.substring(5)); - is = new FileInputStream(file); - b = IOHelper.loadText(is); - } - if (headers != null) { - map = new LinkedHashMap<>(); - for (JsonObject jo : headers) { - map.put(jo.getString("key"), jo.getString("value")); - } - } - final Object inputBody = b; - final Map<String, Object> inputHeaders = map; - - Exchange out = camelContext.getCamelContextExtension().getExchangeFactory().create(false); - try { - Language lan = camelContext.resolveLanguage(language); - Expression exp = lan.createExpression(expression); - exp.init(camelContext); - // create dummy exchange with - out.setPattern(ExchangePattern.InOut); - out.getMessage().setBody(inputBody); - if (inputHeaders != null) { - out.getMessage().setHeaders(inputHeaders); - } - String result = exp.evaluate(out, String.class); - out.getMessage().setBody(result); - IOHelper.close(is); - } catch (Exception e) { - out.setException(e); + if (headers != null) { + map = new LinkedHashMap<>(); + for (JsonObject jo : headers) { + map.put(jo.getString("key"), jo.getString("value")); } - LOG.trace("Updating output file: {}", outputFile); - if (out.getException() != null) { - JsonObject jo = new JsonObject(); - jo.put("language", language); - jo.put("exchangeId", out.getExchangeId()); - jo.put("timestamp", timestamp); - jo.put("elapsed", watch.taken()); - jo.put("status", "failed"); - // avoid double wrap - jo.put("exception", - MessageHelper.dumpExceptionAsJSonObject(out.getException()).getMap("exception")); - IOHelper.writeText(jo.toJson(), outputFile); - } else { - JsonObject jo = new JsonObject(); - jo.put("language", language); - jo.put("exchangeId", out.getExchangeId()); - jo.put("timestamp", timestamp); - jo.put("elapsed", watch.taken()); - jo.put("status", "success"); - // avoid double wrap - jo.put("message", MessageHelper.dumpAsJSonObject(out.getMessage(), true, true, true, true, true, - BODY_MAX_CHARS).getMap("message")); - IOHelper.writeText(jo.toJson(), outputFile); + } + final Object inputBody = b; + final Map<String, Object> inputHeaders = map; + Exchange out = camelContext.getCamelContextExtension().getExchangeFactory().create(false); + try { + Language lan = camelContext.resolveLanguage(language); + Expression exp = lan.createExpression(template); + exp.init(camelContext); + // create dummy exchange with + out.setPattern(ExchangePattern.InOut); + out.getMessage().setBody(inputBody); + if (inputHeaders != null) { + out.getMessage().setHeaders(inputHeaders); } - camelContext.getCamelContextExtension().getExchangeFactory().release(out); + String result = exp.evaluate(out, String.class); + out.getMessage().setBody(result); + IOHelper.close(is); + } catch (Exception e) { + out.setException(e); + } + LOG.trace("Updating output file: {}", outputFile); + if (out.getException() != null) { + JsonObject jo = new JsonObject(); + jo.put("language", language); + jo.put("exchangeId", out.getExchangeId()); + jo.put("timestamp", timestamp); + jo.put("elapsed", watch.taken()); + jo.put("status", "failed"); + // avoid double wrap + jo.put("exception", + MessageHelper.dumpExceptionAsJSonObject(out.getException()).getMap("exception")); + IOHelper.writeText(jo.toJson(), outputFile); + } else { + JsonObject jo = new JsonObject(); + jo.put("language", language); + jo.put("exchangeId", out.getExchangeId()); + jo.put("timestamp", timestamp); + jo.put("elapsed", watch.taken()); + jo.put("status", "success"); + // avoid double wrap + jo.put("message", MessageHelper.dumpAsJSonObject(out.getMessage(), true, true, true, true, true, + BODY_MAX_CHARS).getMap("message")); + IOHelper.writeText(jo.toJson(), outputFile); } + camelContext.getCamelContextExtension().getExchangeFactory().release(out); } // action done so delete file diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/TransformMessageAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/TransformMessageAction.java index d51c3247160..a5f76dbe074 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/TransformMessageAction.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/TransformMessageAction.java @@ -58,10 +58,10 @@ public class TransformMessageAction extends ActionWatchCommand { private String language; @CommandLine.Option(names = { - "--expression" }, + "--template" }, required = true, - description = "The expression (template) to use for message transformation") - private String expression; + description = "The template to use for message transformation (prefix with file: to refer to loading message body from file)") + private String template; @CommandLine.Option(names = { "--output" }, @@ -123,17 +123,8 @@ public class TransformMessageAction extends ActionWatchCommand { JsonObject root = new JsonObject(); root.put("action", "transform"); root.put("language", language); - String exp = expression; - if (expression.startsWith("file:")) { - File f = new File(expression.substring(5)); - if (!f.isFile() && !f.exists()) { - System.err.println("File " + f.getName() + " does not exists"); - return -1; - } - exp = IOHelper.loadText(new FileInputStream(f)); - } - root.put("expression", Jsoner.escape(exp)); - root.put("body", body); + root.put("template", Jsoner.escape(template)); + root.put("body", Jsoner.escape(body)); if (headers != null) { JsonArray arr = new JsonArray(); for (String h : headers) {