From 22e057a83e7e1895893d6ac39e6a8d852fcdf3c5 Mon Sep 17 00:00:00 2001 From: Christoph Deppisch Date: Fri, 15 Sep 2023 20:32:44 +0200 Subject: [PATCH] Enhance insert-field-action.kamelet - Support simple language parsed value - Minor typo fix --- kamelets/insert-field-action.kamelet.yaml | 2 +- .../kamelets/utils/transform/InsertField.java | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/kamelets/insert-field-action.kamelet.yaml b/kamelets/insert-field-action.kamelet.yaml index 516a7319d..8d273014c 100644 --- a/kamelets/insert-field-action.kamelet.yaml +++ b/kamelets/insert-field-action.kamelet.yaml @@ -33,7 +33,7 @@ spec: description: |- Adds a custom field with a simple language parsed value to the message in transit. - The extract field action expected an application/json content type. + The insert field action expected an application/json content type. If for example you have an array like '{ "foo":"John", "bar":30 }' and your action has been configured with field as 'element' and value as 'hello', you'll get '{ "foo":"John", "bar":30, "element":"hello" }' required: diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/InsertField.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/InsertField.java index 20b250855..f7a491beb 100644 --- a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/InsertField.java +++ b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/InsertField.java @@ -22,6 +22,7 @@ import org.apache.camel.Exchange; import org.apache.camel.InvalidPayloadException; import org.apache.camel.Processor; +import org.apache.camel.support.LanguageSupport; public class InsertField implements Processor { @@ -51,15 +52,22 @@ public void process(Exchange ex) throws InvalidPayloadException { throw new InvalidPayloadException(ex, JsonNode.class); } + String resolvedValue; + if (LanguageSupport.hasSimpleFunction(value)) { + resolvedValue = ex.getContext().resolveLanguage("simple").createExpression(value).evaluate(ex, String.class); + } else { + resolvedValue = value; + } + switch (body.getNodeType()) { case ARRAY: - ((ArrayNode) body).add(value); + ((ArrayNode) body).add(resolvedValue); break; case OBJECT: - ((ObjectNode) body).put(field, value); + ((ObjectNode) body).put(field, resolvedValue); break; default: - ((ObjectNode) body).put(field, value); + ((ObjectNode) body).put(field, resolvedValue); break; }