This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch pret in repository https://gitbox.apache.org/repos/asf/camel.git
commit 153da570d4e66a699c4d1f524e338fcea2309ce9 Author: Claus Ibsen <[email protected]> AuthorDate: Mon Jan 12 21:27:20 2026 +0100 CAMEL-22844: camel-core - Add pretty option to simple language --- .../apache/camel/catalog/languages/csimple.json | 5 +- .../org/apache/camel/catalog/languages/file.json | 5 +- .../org/apache/camel/catalog/languages/simple.json | 5 +- .../org/apache/camel/catalog/models/csimple.json | 5 +- .../org/apache/camel/catalog/models/simple.json | 5 +- .../apache/camel/catalog/schemas/camel-spring.xsd | 24 ++++- .../apache/camel/catalog/schemas/camel-xml-io.xsd | 24 ++++- .../camel/spring/SpringSimplePrettyTest.java | 74 ++++++++++++++ .../apache/camel/spring/SpringSimplePrettyTest.xml | 51 ++++++++++ .../org/apache/camel/language/csimple/csimple.json | 5 +- .../org/apache/camel/language/simple/file.json | 5 +- .../org/apache/camel/language/simple/simple.json | 5 +- .../camel/language/csimple/CSimpleLanguage.java | 15 ++- .../camel/language/simple/SimpleLanguage.java | 8 +- .../org/apache/camel/model/language/csimple.json | 5 +- .../org/apache/camel/model/language/simple.json | 5 +- .../java/org/apache/camel/builder/Builder.java | 10 ++ .../org/apache/camel/builder/BuilderSupport.java | 18 +++- .../org/apache/camel/builder/ExpressionClause.java | 23 +++++ .../camel/builder/ExpressionClauseSupport.java | 30 ++++++ .../camel/model/language/CSimpleExpression.java | 36 +++++++ .../camel/model/language/SimpleExpression.java | 36 +++++++ .../reifier/language/CSimpleExpressionReifier.java | 9 ++ .../reifier/language/SimpleExpressionReifier.java | 3 +- .../camel/language/simple/SimplePrettyTest.java | 89 +++++++++++++++++ .../java/org/apache/camel/xml/in/ModelParser.java | 10 +- .../java/org/apache/camel/xml/out/ModelWriter.java | 2 + .../org/apache/camel/yaml/out/ModelWriter.java | 2 + .../dsl/yaml/deserializers/ModelDeserializers.java | 12 +++ .../generated/resources/schema/camelYamlDsl.json | 12 +++ .../apache/camel/dsl/yaml/SimplePrettyTest.groovy | 110 +++++++++++++++++++++ 31 files changed, 612 insertions(+), 36 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/csimple.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/csimple.json index ef9e98c9ff49..2bcb2fcecc13 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/csimple.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/csimple.json @@ -18,7 +18,8 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } } } diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/file.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/file.json index 889baa9102df..05ff5def68ba 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/file.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/file.json @@ -18,8 +18,9 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } }, "functions": { "file:name": { "index": 0, "kind": "function", "displayName": "File", "group": "function", "label": "function", "required": false, "javaType": "String", "prefix": "${", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The file name (relative from starting directory)", "ognl": false, "suffix": "}" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/simple.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/simple.json index dfb090c0713e..a05d2db62f8b 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/simple.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/languages/simple.json @@ -18,8 +18,9 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } }, "functions": { "body": { "index": 0, "kind": "function", "displayName": "Body", "group": "function", "label": "function", "required": false, "javaType": "Object", "prefix": "${", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message body", "ognl": true, "suffix": "}" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/csimple.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/csimple.json index e2f4425ae387..85242d03bee3 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/csimple.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/csimple.json @@ -15,7 +15,8 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } } } diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/simple.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/simple.json index 5bf25c834e4b..c96254a8d472 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/simple.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/simple.json @@ -15,7 +15,8 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } } } diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd index fa6796c0b9fa..a36684457940 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd @@ -17336,7 +17336,17 @@ Refers to a custom KeyGenerator to lookup from the register for KEM operations. </xs:complexType> <xs:complexType name="cSimpleExpression"> <xs:simpleContent> - <xs:extension base="tns:typedExpressionDefinition"/> + <xs:extension base="tns:typedExpressionDefinition"> + <xs:attribute name="pretty" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +To pretty format the output (only JSon or XML supported). Default value: false +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType abstract="true" name="typedExpressionDefinition"> @@ -17643,7 +17653,17 @@ Whether to validate the bean has the configured method. Default value: true </xs:complexType> <xs:complexType name="simpleExpression"> <xs:simpleContent> - <xs:extension base="tns:typedExpressionDefinition"/> + <xs:extension base="tns:typedExpressionDefinition"> + <xs:attribute name="pretty" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +To pretty format the output (only JSon or XML supported). Default value: false +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType name="spELExpression"> diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd index 03ac2e467303..20e6f8a99e64 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd @@ -16030,7 +16030,17 @@ Refers to a custom KeyGenerator to lookup from the register for KEM operations. </xs:complexType> <xs:complexType name="cSimpleExpression"> <xs:simpleContent> - <xs:extension base="tns:typedExpressionDefinition"/> + <xs:extension base="tns:typedExpressionDefinition"> + <xs:attribute name="pretty" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +To pretty format the output (only JSon or XML supported). Default value: false +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType abstract="true" name="typedExpressionDefinition"> @@ -16337,7 +16347,17 @@ Whether to validate the bean has the configured method. Default value: true </xs:complexType> <xs:complexType name="simpleExpression"> <xs:simpleContent> - <xs:extension base="tns:typedExpressionDefinition"/> + <xs:extension base="tns:typedExpressionDefinition"> + <xs:attribute name="pretty" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +To pretty format the output (only JSon or XML supported). Default value: false +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType name="spELExpression"> diff --git a/components/camel-spring-parent/camel-spring-xml/src/test/java/org/apache/camel/spring/SpringSimplePrettyTest.java b/components/camel-spring-parent/camel-spring-xml/src/test/java/org/apache/camel/spring/SpringSimplePrettyTest.java new file mode 100644 index 000000000000..27b8916c0234 --- /dev/null +++ b/components/camel-spring-parent/camel-spring-xml/src/test/java/org/apache/camel/spring/SpringSimplePrettyTest.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.spring; + +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.Test; +import org.springframework.context.support.AbstractXmlApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class SpringSimplePrettyTest extends SpringTestSupport { + + private static final String XML = """ + <person> + <name> + Jack + </name> + </person>"""; + + private static final String JSON = """ + { + "name": "Jack", + "age": 44 + } + """; + + @Override + protected AbstractXmlApplicationContext createApplicationContext() { + return new ClassPathXmlApplicationContext("org/apache/camel/spring/SpringSimplePrettyTest.xml"); + } + + @Test + public void testPrettyXml() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedBodiesReceived(XML); + + template.sendBody("direct:xml", "Hello World"); + + assertMockEndpointsSatisfied(); + } + + @Test + public void testPrettyJSon() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedBodiesReceived(JSON); + + template.sendBody("direct:json", "Hello World"); + + assertMockEndpointsSatisfied(); + } + + @Test + public void testPrettyText() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedBodiesReceived("Hello World"); + + template.sendBody("direct:text", "World"); + + assertMockEndpointsSatisfied(); + } +} diff --git a/components/camel-spring-parent/camel-spring-xml/src/test/resources/org/apache/camel/spring/SpringSimplePrettyTest.xml b/components/camel-spring-parent/camel-spring-xml/src/test/resources/org/apache/camel/spring/SpringSimplePrettyTest.xml new file mode 100644 index 000000000000..f7689f124ba5 --- /dev/null +++ b/components/camel-spring-parent/camel-spring-xml/src/test/resources/org/apache/camel/spring/SpringSimplePrettyTest.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd + "> + + <camelContext xmlns="http://camel.apache.org/schema/spring"> + <route> + <from uri="direct:xml"/> + <setBody> + <simple pretty="true"><person><name>Jack</name></person></simple> + </setBody> + <to uri="mock:result"/> + </route> + <route> + <from uri="direct:json"/> + <setBody> + <simple pretty="true">{ "name": "Jack", "age": 44 }</simple> + </setBody> + <to uri="mock:result"/> + </route> + <route> + <from uri="direct:text"/> + <setBody> + <simple pretty="true">Hello ${body}</simple> + </setBody> + <to uri="mock:result"/> + </route> + </camelContext> + +</beans> diff --git a/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/csimple/csimple.json b/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/csimple/csimple.json index ef9e98c9ff49..2bcb2fcecc13 100644 --- a/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/csimple/csimple.json +++ b/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/csimple/csimple.json @@ -18,7 +18,8 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } } } diff --git a/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/simple/file.json b/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/simple/file.json index 889baa9102df..05ff5def68ba 100644 --- a/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/simple/file.json +++ b/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/simple/file.json @@ -18,8 +18,9 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } }, "functions": { "file:name": { "index": 0, "kind": "function", "displayName": "File", "group": "function", "label": "function", "required": false, "javaType": "String", "prefix": "${", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The file name (relative from starting directory)", "ognl": false, "suffix": "}" }, diff --git a/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/simple/simple.json b/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/simple/simple.json index dfb090c0713e..a05d2db62f8b 100644 --- a/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/simple/simple.json +++ b/core/camel-core-languages/src/generated/resources/META-INF/org/apache/camel/language/simple/simple.json @@ -18,8 +18,9 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } }, "functions": { "body": { "index": 0, "kind": "function", "displayName": "Body", "group": "function", "label": "function", "required": false, "javaType": "Object", "prefix": "${", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message body", "ognl": true, "suffix": "}" }, diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java index 86b389e9c30c..30d349ef0f0f 100644 --- a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java +++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java @@ -148,15 +148,20 @@ public class CSimpleLanguage extends TypedLanguageSupport implements StaticServi @Override public Expression createExpression(String expression, Object[] properties) { Class<?> resultType = property(Class.class, properties, 0, null); + boolean pretty = property(boolean.class, properties, 2, false); if (Boolean.class == resultType || boolean.class == resultType) { // we want it compiled as a predicate return (Expression) createPredicate(expression); - } else if (resultType == null || resultType == Object.class) { - // No specific result type has been provided - return createExpression(expression); + } else { + Expression exp = createExpression(expression); + if (resultType != null) { + exp = ExpressionBuilder.convertToExpression(exp, resultType); + } + if (pretty) { + exp = ExpressionBuilder.prettyExpression(exp); + } + return exp; } - // A specific result type has been provided - return ExpressionBuilder.convertToExpression(createExpression(expression), resultType); } @Override diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java index 1681730fe86e..57428cb6bc09 100644 --- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java +++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java @@ -158,13 +158,14 @@ public class SimpleLanguage extends LanguageSupport implements StaticService { public Expression createExpression(String expression, Object[] properties) { Class<?> resultType = property(Class.class, properties, 0, null); boolean trim = property(boolean.class, properties, 1, true); + boolean pretty = property(boolean.class, properties, 2, false); if (trim && expression != null) { expression = expression.trim(); } if (expression == null) { expression = "${null}"; } - return createExpression(expression, resultType); + return createExpression(expression, resultType, pretty); } @Override @@ -202,7 +203,7 @@ public class SimpleLanguage extends LanguageSupport implements StaticService { return answer; } - public Expression createExpression(String expression, Class<?> resultType) { + public Expression createExpression(String expression, Class<?> resultType, boolean pretty) { if (resultType == Boolean.class || resultType == boolean.class) { // if its a boolean as result then its a predicate Predicate predicate = createPredicate(expression); @@ -212,6 +213,9 @@ public class SimpleLanguage extends LanguageSupport implements StaticService { if (resultType != null) { exp = ExpressionBuilder.convertToExpression(exp, resultType); } + if (pretty) { + exp = ExpressionBuilder.prettyExpression(exp); + } return exp; } } diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/language/csimple.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/language/csimple.json index e2f4425ae387..85242d03bee3 100644 --- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/language/csimple.json +++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/language/csimple.json @@ -15,7 +15,8 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } } } diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/language/simple.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/language/simple.json index 5bf25c834e4b..c96254a8d472 100644 --- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/language/simple.json +++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/language/simple.json @@ -15,7 +15,8 @@ "properties": { "id": { "index": 0, "kind": "attribute", "displayName": "Id", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the id of this node" }, "expression": { "index": 1, "kind": "value", "displayName": "Expression", "group": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" }, - "resultType": { "index": 2, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, - "trim": { "index": 3, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } + "pretty": { "index": 2, "kind": "attribute", "displayName": "Pretty", "group": "common", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "To pretty format the output (only JSon or XML supported)" }, + "resultType": { "index": 3, "kind": "attribute", "displayName": "Result Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the class of the result type (type from output)" }, + "trim": { "index": 4, "kind": "attribute", "displayName": "Trim", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" } } } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/Builder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/Builder.java index 9846d6807ec3..7b555323d024 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/builder/Builder.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/Builder.java @@ -180,6 +180,16 @@ public final class Builder { return new ValueBuilder(exp); } + /** + * Returns a simple expression + */ + public static ValueBuilder simple(String value, Class<?> resultType, boolean pretty) { + SimpleExpression exp = new SimpleExpression(value); + exp.setResultType(resultType); + exp.setPretty(Boolean.toString(pretty)); + return new ValueBuilder(exp); + } + /** * Returns a JOOR expression value builder */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java index 8b57e17d80f7..18ace272c0a5 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java @@ -232,14 +232,28 @@ public abstract class BuilderSupport implements CamelContextAware { * Returns a simple expression value builder */ public ValueBuilder simple(String value) { - return simple(value, null); + return simple(value, null, false); + } + + /** + * Returns a simple expression value builder + */ + public ValueBuilder simple(String value, boolean pretty) { + return simple(value, null, false); } /** * Returns a simple expression value builder */ public ValueBuilder simple(String value, Class<?> resultType) { - return Builder.simple(value, resultType); + return simple(value, resultType, false); + } + + /** + * Returns a simple expression value builder + */ + public ValueBuilder simple(String value, Class<?> resultType, boolean pretty) { + return Builder.simple(value, resultType, pretty); } /** diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/ExpressionClause.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/ExpressionClause.java index 1e35a2829c2a..73537c07890f 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/builder/ExpressionClause.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/ExpressionClause.java @@ -627,6 +627,17 @@ public class ExpressionClause<T> implements Expression, Predicate { return delegate.simple(text); } + /** + * Evaluates a <a href="http://camel.apache.org/simple.html">Simple expression</a> + * + * @param text the expression to be evaluated + * @param pretty format pretty (only XML or JSon output supported) + * @return the builder to continue processing the DSL + */ + public T simple(String text, boolean pretty) { + return delegate.simple(text, pretty); + } + /** * Evaluates a <a href="http://camel.apache.org/simple.html">Simple expression</a> * @@ -638,6 +649,18 @@ public class ExpressionClause<T> implements Expression, Predicate { return delegate.simple(text, resultType); } + /** + * Evaluates a <a href="http://camel.apache.org/simple.html">Simple expression</a> + * + * @param text the expression to be evaluated + * @param resultType the result type + * @param pretty format pretty (only XML or JSon output supported) + * @return the builder to continue processing the DSL + */ + public T simple(String text, Class<?> resultType, boolean pretty) { + return delegate.simple(text, resultType, pretty); + } + /** * Evaluates a token expression on the message body * diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java index 517ab16dd59b..82c302557776 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java @@ -767,6 +767,20 @@ public class ExpressionClauseSupport<T> implements ExpressionFactoryAware, Predi return expression(new SimpleExpression(text)); } + /** + * Evaluates a <a href="http://camel.apache.org/simple.html">Simple expression</a> + * + * @param text the expression to be evaluated + * @param pretty format pretty (only XML or JSon output supported) + * @return the builder to continue processing the DSL + */ + public T simple(String text, boolean pretty) { + SimpleExpression expression = new SimpleExpression(text); + expression.setPretty(Boolean.toString(pretty)); + expression(expression); + return result; + } + /** * Evaluates a <a href="http://camel.apache.org/simple.html">Simple expression</a> * @@ -781,6 +795,22 @@ public class ExpressionClauseSupport<T> implements ExpressionFactoryAware, Predi return result; } + /** + * Evaluates a <a href="http://camel.apache.org/simple.html">Simple expression</a> + * + * @param text the expression to be evaluated + * @param resultType the result type + * @param pretty format pretty (only XML or JSon output supported) + * @return the builder to continue processing the DSL + */ + public T simple(String text, Class<?> resultType, boolean pretty) { + SimpleExpression expression = new SimpleExpression(text); + expression.setResultType(resultType); + expression.setPretty(Boolean.toString(pretty)); + expression(expression); + return result; + } + /** * Evaluates an <a href="http://camel.apache.org/hl7.html">HL7 Terser expression</a> * diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/language/CSimpleExpression.java b/core/camel-core-model/src/main/java/org/apache/camel/model/language/CSimpleExpression.java index d929a3ea0e44..13a1b14b0cf6 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/language/CSimpleExpression.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/language/CSimpleExpression.java @@ -18,6 +18,7 @@ package org.apache.camel.model.language; import jakarta.xml.bind.annotation.XmlAccessType; import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.XmlTransient; @@ -31,11 +32,16 @@ import org.apache.camel.spi.Metadata; @XmlAccessorType(XmlAccessType.FIELD) public class CSimpleExpression extends TypedExpressionDefinition { + @XmlAttribute + @Metadata(defaultValue = "false", javaType = "java.lang.Boolean") + private String pretty; + public CSimpleExpression() { } protected CSimpleExpression(CSimpleExpression source) { super(source); + this.pretty = source.pretty; } public CSimpleExpression(String expression) { @@ -44,6 +50,7 @@ public class CSimpleExpression extends TypedExpressionDefinition { private CSimpleExpression(Builder builder) { super(builder); + this.pretty = builder.pretty; } @Override @@ -56,12 +63,41 @@ public class CSimpleExpression extends TypedExpressionDefinition { return "csimple"; } + public String getPretty() { + return pretty; + } + + /** + * To pretty format the output (only JSon or XML supported) + */ + public void setPretty(String pretty) { + this.pretty = pretty; + } + /** * {@code Builder} is a specific builder for {@link CSimpleExpression}. */ @XmlTransient public static class Builder extends AbstractBuilder<Builder, CSimpleExpression> { + private String pretty; + + /** + * To pretty format the output (only JSon or XML supported) + */ + public Builder pretty(String pretty) { + this.pretty = pretty; + return this; + } + + /** + * To pretty format the output (only JSon or XML supported) + */ + public Builder pretty(boolean pretty) { + this.pretty = Boolean.toString(pretty); + return this; + } + @Override public CSimpleExpression end() { return new CSimpleExpression(this); diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/language/SimpleExpression.java b/core/camel-core-model/src/main/java/org/apache/camel/model/language/SimpleExpression.java index f2f464ad73da..75f243052cd4 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/language/SimpleExpression.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/language/SimpleExpression.java @@ -18,6 +18,7 @@ package org.apache.camel.model.language; import jakarta.xml.bind.annotation.XmlAccessType; import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.XmlTransient; @@ -32,11 +33,16 @@ import org.apache.camel.spi.Metadata; @XmlAccessorType(XmlAccessType.FIELD) public class SimpleExpression extends TypedExpressionDefinition { + @XmlAttribute + @Metadata(defaultValue = "false", javaType = "java.lang.Boolean") + private String pretty; + public SimpleExpression() { } protected SimpleExpression(SimpleExpression source) { super(source); + this.pretty = source.pretty; } public SimpleExpression(String expression) { @@ -49,6 +55,7 @@ public class SimpleExpression extends TypedExpressionDefinition { private SimpleExpression(Builder builder) { super(builder); + this.pretty = builder.pretty; } @Override @@ -61,12 +68,41 @@ public class SimpleExpression extends TypedExpressionDefinition { return "simple"; } + public String getPretty() { + return pretty; + } + + /** + * To pretty format the output (only JSon or XML supported) + */ + public void setPretty(String pretty) { + this.pretty = pretty; + } + /** * {@code Builder} is a specific builder for {@link SimpleExpression}. */ @XmlTransient public static class Builder extends AbstractBuilder<Builder, SimpleExpression> { + private String pretty; + + /** + * To pretty format the output (only JSon or XML supported) + */ + public Builder pretty(String pretty) { + this.pretty = pretty; + return this; + } + + /** + * To pretty format the output (only JSon or XML supported) + */ + public Builder pretty(boolean pretty) { + this.pretty = Boolean.toString(pretty); + return this; + } + @Override public SimpleExpression end() { return new SimpleExpression(this); diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/CSimpleExpressionReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/CSimpleExpressionReifier.java index 68adfbff2bed..7cf64f4286f9 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/CSimpleExpressionReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/CSimpleExpressionReifier.java @@ -32,4 +32,13 @@ public class CSimpleExpressionReifier extends TypedExpressionReifier<CSimpleExpr return false; } + @Override + protected Object[] createProperties() { + Object[] properties = new Object[3]; + properties[0] = asResultType(); + properties[1] = parseBoolean(definition.getTrim()); + properties[2] = parseBoolean(definition.getPretty()); + return properties; + } + } diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java index ca066c4d382a..577b05c68ce0 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java @@ -34,9 +34,10 @@ public class SimpleExpressionReifier extends TypedExpressionReifier<SimpleExpres @Override protected Object[] createProperties() { - Object[] properties = new Object[2]; + Object[] properties = new Object[3]; properties[0] = asResultType(); properties[1] = parseBoolean(definition.getTrim()); + properties[2] = parseBoolean(definition.getPretty()); return properties; } diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimplePrettyTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimplePrettyTest.java new file mode 100644 index 000000000000..99851279aa6f --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimplePrettyTest.java @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.language.simple; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.Test; + +public class SimplePrettyTest extends ContextTestSupport { + + private static final String XML = """ + <person> + <name> + Jack + </name> + </person>"""; + + private static final String JSON = """ + { + "name": "Jack", + "age": 44 + } + """; + + @Test + public void testPrettyXml() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedBodiesReceived(XML); + + template.sendBody("direct:xml", "Hello World"); + + assertMockEndpointsSatisfied(); + } + + @Test + public void testPrettyJSon() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedBodiesReceived(JSON); + + template.sendBody("direct:json", "Hello World"); + + assertMockEndpointsSatisfied(); + } + + @Test + public void testPrettyText() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedBodiesReceived("Hello World"); + + template.sendBody("direct:text", "World"); + + assertMockEndpointsSatisfied(); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:xml") + .setBody().simple("<person><name>Jack</name></person>", true) + .to("mock:result"); + + from("direct:json") + .setBody().simple("{ \"name\": \"Jack\", \"age\": 44 }", true) + .to("mock:result"); + + from("direct:text") + .setBody().simple("Hello ${body}", true) + .to("mock:result"); + } + }; + } +} diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java index 0dab43edf902..798fa6f1c2a6 100644 --- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java +++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java @@ -2365,7 +2365,10 @@ public class ModelParser extends BaseParser { return doParse(new SpringTransactionErrorHandlerDefinition(), transactionErrorHandlerDefinitionAttributeHandler(), defaultErrorHandlerDefinitionElementHandler(), noValueHandler()); } protected CSimpleExpression doParseCSimpleExpression() throws IOException, XmlPullParserException { - return doParse(new CSimpleExpression(), typedExpressionDefinitionAttributeHandler(), noElementHandler(), expressionDefinitionValueHandler()); + return doParse(new CSimpleExpression(), (def, key, val) -> switch (key) { + case "pretty": def.setPretty(val); yield true; + default: yield typedExpressionDefinitionAttributeHandler().accept(def, key, val); + }, noElementHandler(), expressionDefinitionValueHandler()); } protected <T extends TypedExpressionDefinition> AttributeHandler<T> typedExpressionDefinitionAttributeHandler() { return (def, key, val) -> switch (key) { @@ -2461,7 +2464,10 @@ public class ModelParser extends BaseParser { return doParse(new RefExpression(), typedExpressionDefinitionAttributeHandler(), noElementHandler(), expressionDefinitionValueHandler()); } protected SimpleExpression doParseSimpleExpression() throws IOException, XmlPullParserException { - return doParse(new SimpleExpression(), typedExpressionDefinitionAttributeHandler(), noElementHandler(), expressionDefinitionValueHandler()); + return doParse(new SimpleExpression(), (def, key, val) -> switch (key) { + case "pretty": def.setPretty(val); yield true; + default: yield typedExpressionDefinitionAttributeHandler().accept(def, key, val); + }, noElementHandler(), expressionDefinitionValueHandler()); } protected SpELExpression doParseSpELExpression() throws IOException, XmlPullParserException { return doParse(new SpELExpression(), typedExpressionDefinitionAttributeHandler(), noElementHandler(), expressionDefinitionValueHandler()); diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java index 416a78326ecd..27b570663313 100644 --- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java +++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java @@ -3096,6 +3096,7 @@ public class ModelWriter extends BaseWriter { protected void doWriteCSimpleExpression(String name, CSimpleExpression def) throws IOException { startElement(name); doWriteTypedExpressionDefinitionAttributes(def); + doWriteAttribute("pretty", def.getPretty(), "false"); doWriteValue(def.getExpression()); endElement(name); } @@ -3242,6 +3243,7 @@ public class ModelWriter extends BaseWriter { protected void doWriteSimpleExpression(String name, SimpleExpression def) throws IOException { startElement(name); doWriteTypedExpressionDefinitionAttributes(def); + doWriteAttribute("pretty", def.getPretty(), "false"); doWriteValue(def.getExpression()); endElement(name); } diff --git a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java index 2addf34bb22d..022969a581da 100644 --- a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java +++ b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java @@ -3096,6 +3096,7 @@ public class ModelWriter extends BaseWriter { protected void doWriteCSimpleExpression(String name, CSimpleExpression def) throws IOException { startElement(name); doWriteTypedExpressionDefinitionAttributes(def); + doWriteAttribute("pretty", def.getPretty(), "false"); doWriteValue(def.getExpression()); endElement(name); } @@ -3242,6 +3243,7 @@ public class ModelWriter extends BaseWriter { protected void doWriteSimpleExpression(String name, SimpleExpression def) throws IOException { startElement(name); doWriteTypedExpressionDefinitionAttributes(def); + doWriteAttribute("pretty", def.getPretty(), "false"); doWriteValue(def.getExpression()); endElement(name); } diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java index fb3cf1a11ecc..55362f1523a5 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java @@ -1752,6 +1752,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { properties = { @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported)", displayName = "Pretty"), @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the value to remove leading and trailing whitespaces and line breaks", displayName = "Trim") } @@ -1786,6 +1787,11 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setId(val); break; } + case "pretty": { + String val = asText(node); + target.setPretty(val); + break; + } case "resultType": { String val = asText(node); target.setResultTypeName(val); @@ -17654,6 +17660,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { properties = { @YamlProperty(name = "expression", type = "string", required = true, description = "The expression value in your chosen language syntax", displayName = "Expression"), @YamlProperty(name = "id", type = "string", description = "Sets the id of this node", displayName = "Id"), + @YamlProperty(name = "pretty", type = "boolean", defaultValue = "false", description = "To pretty format the output (only JSon or XML supported)", displayName = "Pretty"), @YamlProperty(name = "resultType", type = "string", description = "Sets the class of the result type (type from output)", displayName = "Result Type"), @YamlProperty(name = "trim", type = "boolean", defaultValue = "true", description = "Whether to trim the value to remove leading and trailing whitespaces and line breaks", displayName = "Trim") } @@ -17688,6 +17695,11 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setId(val); break; } + case "pretty": { + String val = asText(node); + target.setPretty(val); + break; + } case "resultType": { String val = asText(node); target.setResultTypeName(val); diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json index 9cfed89b85a4..55547c75d209 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json @@ -13866,6 +13866,12 @@ "title" : "Id", "description" : "Sets the id of this node" }, + "pretty" : { + "type" : "boolean", + "title" : "Pretty", + "description" : "To pretty format the output (only JSon or XML supported)", + "default" : false + }, "resultType" : { "type" : "string", "title" : "Result Type", @@ -14820,6 +14826,12 @@ "title" : "Id", "description" : "Sets the id of this node" }, + "pretty" : { + "type" : "boolean", + "title" : "Pretty", + "description" : "To pretty format the output (only JSon or XML supported)", + "default" : false + }, "resultType" : { "type" : "string", "title" : "Result Type", diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/SimplePrettyTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/SimplePrettyTest.groovy new file mode 100644 index 000000000000..570f22ae3d0e --- /dev/null +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/SimplePrettyTest.groovy @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dsl.yaml + +import org.apache.camel.component.mock.MockEndpoint +import org.apache.camel.dsl.yaml.support.YamlTestSupport + +class SimplePrettyTest extends YamlTestSupport { + + def "prettyXML"() { + setup: + loadRoutes ''' + - route: + from: + uri: direct:xml + steps: + - setBody: + simple: + expression: "<person><name>Jack</name></person>" + pretty: true + - to: + uri: mock:result + ''' + withMock('mock:result') { + expectedMessageCount 1 + } + + when: + context.start() + + withTemplate { + to('direct:xml').withBody('Hello World').send() + } + + then: + MockEndpoint.assertIsSatisfied(context) + } + + def "prettyJSon"() { + setup: + loadRoutes ''' + - route: + from: + uri: direct:json + steps: + - setBody: + simple: + expression: '"name": "Jack", "age": 44 }' + pretty: true + - to: + uri: mock:result + ''' + withMock('mock:result') { + expectedMessageCount 1 + } + + when: + context.start() + + withTemplate { + to('direct:json').withBody('Hello World').send() + } + + then: + MockEndpoint.assertIsSatisfied(context) + } + + def "prettyText"() { + setup: + loadRoutes ''' + - route: + from: + uri: direct:text + steps: + - setBody: + simple: + expression: 'Hello ${body}' + pretty: true + - to: + uri: mock:result + ''' + withMock('mock:result') { + expectedBodiesReceived 'Hello World' + } + + when: + context.start() + + withTemplate { + to('direct:text').withBody('World').send() + } + + then: + MockEndpoint.assertIsSatisfied(context) + } +}
