This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new 63f6cabd205 CAMEL-21859: camel-xslt - add source option (#17763) 63f6cabd205 is described below commit 63f6cabd20507de8c2aedaeefb2b5d5437354c8a Author: Anirudh Prakash <100948748+anirudh...@users.noreply.github.com> AuthorDate: Wed Apr 16 10:55:25 2025 +0530 CAMEL-21859: camel-xslt - add source option (#17763) --- .../org/apache/camel/catalog/components/xj.json | 29 ++--- .../camel/catalog/components/xslt-saxon.json | 27 ++--- .../org/apache/camel/catalog/components/xslt.json | 21 ++-- .../camel/component/xj/XJEndpointUriFactory.java | 3 +- .../META-INF/org/apache/camel/component/xj/xj.json | 29 ++--- .../component/xj/JsonSourceHandlerFactoryImpl.java | 5 +- .../camel/component/xj/J2XInputStreamTest.java | 57 +++++++++ .../camel/component/xj/J2XOutputBytesTest.java | 51 ++++++++ .../camel/component/xj/J2XOutputFileTest.java | 54 +++++++++ .../camel/component/xj/J2XOutputIdentityTest.java | 60 ++++++++++ .../camel/component/xj/J2XOutputStringTest.java | 51 ++++++++ .../camel/component/xj/X2JInputStreamTest.java | 57 +++++++++ .../camel/component/xj/X2JOutputBytesTest.java | 51 ++++++++ .../camel/component/xj/X2JOutputFileTest.java | 54 +++++++++ .../camel/component/xj/X2JOutputIdentityTest.java | 51 ++++++++ .../camel/component/xj/X2JOutputStringTest.java | 51 ++++++++ .../xslt/saxon/XsltSaxonEndpointUriFactory.java | 3 +- .../camel/component/xslt/saxon/xslt-saxon.json | 27 ++--- .../component/xslt/saxon/XsltSaxonEndpoint.java | 2 + .../camel/component/xslt/saxon/XsltSaxonTest.java | 130 +++++++++++++++++++++ .../component/xslt/XsltEndpointConfigurer.java | 3 + .../component/xslt/XsltEndpointUriFactory.java | 3 +- .../org/apache/camel/component/xslt/xslt.json | 21 ++-- .../xslt/XmlSourceHandlerFactoryImpl.java | 5 +- .../apache/camel/component/xslt/XsltBuilder.java | 12 +- .../apache/camel/component/xslt/XsltEndpoint.java | 17 +++ .../endpoint/dsl/XJEndpointBuilderFactory.java | 17 +++ .../endpoint/dsl/XsltEndpointBuilderFactory.java | 17 +++ .../dsl/XsltSaxonEndpointBuilderFactory.java | 17 +++ 29 files changed, 843 insertions(+), 82 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xj.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xj.json index 6c2a1f09e88..f7eef9d266e 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xj.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xj.json @@ -50,19 +50,20 @@ "deleteOutputFile": { "index": 4, "kind": "parameter", "displayName": "Delete Output File", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If you have output=file then this option dictates whether or not the output file should be deleted when the Exchange is done processing. For example suppose the output file is a temporary file, then it ca [...] "failOnNullBody": { "index": 5, "kind": "parameter", "displayName": "Fail On Null Body", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not to throw an exception if the input body is null." }, "output": { "index": 6, "kind": "parameter", "displayName": "Output", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltOutput", "enum": [ "string", "bytes", "DOM", "file" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "string", "description": "Option to specify which output type to use. Possible values are: string, bytes, DOM, file. The first three options are all in memory based, whe [...] - "transformDirection": { "index": 7, "kind": "parameter", "displayName": "Transform Direction", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.xj.TransformDirection", "enum": [ "XML2JSON", "JSON2XML" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Transform direction. Either XML2JSON or JSON2XML" }, - "transformerCacheSize": { "index": 8, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, - "lazyStartProducer": { "index": 9, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] - "entityResolver": { "index": 10, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, - "errorListener": { "index": 11, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] - "resultHandlerFactory": { "index": 12, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, - "saxonConfiguration": { "index": 13, "kind": "parameter", "displayName": "Saxon Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "net.sf.saxon.Configuration", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Saxon configuration" }, - "saxonExtensionFunctions": { "index": 14, "kind": "parameter", "displayName": "Saxon Extension Functions", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separ [...] - "secureProcessing": { "index": 15, "kind": "parameter", "displayName": "Secure Processing", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Feature for XML secure processing (see javax.xml.XMLConstants). This is enabled by default. However, when using Saxon Professional you may need to turn this off to allow Saxon to be able to use Jav [...] - "transformerFactory": { "index": 16, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, - "transformerFactoryClass": { "index": 17, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, - "transformerFactoryConfigurationStrategy": { "index": 18, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, - "uriResolver": { "index": 19, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, - "xsltMessageLogger": { "index": 20, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } + "source": { "index": 7, "kind": "parameter", "displayName": "Source", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body." }, + "transformDirection": { "index": 8, "kind": "parameter", "displayName": "Transform Direction", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.xj.TransformDirection", "enum": [ "XML2JSON", "JSON2XML" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Transform direction. Either XML2JSON or JSON2XML" }, + "transformerCacheSize": { "index": 9, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, + "lazyStartProducer": { "index": 10, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produ [...] + "entityResolver": { "index": 11, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, + "errorListener": { "index": 12, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] + "resultHandlerFactory": { "index": 13, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, + "saxonConfiguration": { "index": 14, "kind": "parameter", "displayName": "Saxon Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "net.sf.saxon.Configuration", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Saxon configuration" }, + "saxonExtensionFunctions": { "index": 15, "kind": "parameter", "displayName": "Saxon Extension Functions", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separ [...] + "secureProcessing": { "index": 16, "kind": "parameter", "displayName": "Secure Processing", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Feature for XML secure processing (see javax.xml.XMLConstants). This is enabled by default. However, when using Saxon Professional you may need to turn this off to allow Saxon to be able to use Jav [...] + "transformerFactory": { "index": 17, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, + "transformerFactoryClass": { "index": 18, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, + "transformerFactoryConfigurationStrategy": { "index": 19, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, + "uriResolver": { "index": 20, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, + "xsltMessageLogger": { "index": 21, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } } } diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt-saxon.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt-saxon.json index 0f7a705f1a4..cf5f7c8bf64 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt-saxon.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt-saxon.json @@ -50,18 +50,19 @@ "deleteOutputFile": { "index": 4, "kind": "parameter", "displayName": "Delete Output File", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If you have output=file then this option dictates whether or not the output file should be deleted when the Exchange is done processing. For example suppose the output file is a temporary file, then it ca [...] "failOnNullBody": { "index": 5, "kind": "parameter", "displayName": "Fail On Null Body", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not to throw an exception if the input body is null." }, "output": { "index": 6, "kind": "parameter", "displayName": "Output", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltOutput", "enum": [ "string", "bytes", "DOM", "file" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "string", "description": "Option to specify which output type to use. Possible values are: string, bytes, DOM, file. The first three options are all in memory based, whe [...] - "transformerCacheSize": { "index": 7, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, - "lazyStartProducer": { "index": 8, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] - "entityResolver": { "index": 9, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, - "errorListener": { "index": 10, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] - "resultHandlerFactory": { "index": 11, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, - "saxonConfiguration": { "index": 12, "kind": "parameter", "displayName": "Saxon Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "net.sf.saxon.Configuration", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Saxon configuration" }, - "saxonExtensionFunctions": { "index": 13, "kind": "parameter", "displayName": "Saxon Extension Functions", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separ [...] - "secureProcessing": { "index": 14, "kind": "parameter", "displayName": "Secure Processing", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Feature for XML secure processing (see javax.xml.XMLConstants). This is enabled by default. However, when using Saxon Professional you may need to turn this off to allow Saxon to be able to use Jav [...] - "transformerFactory": { "index": 15, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, - "transformerFactoryClass": { "index": 16, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, - "transformerFactoryConfigurationStrategy": { "index": 17, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, - "uriResolver": { "index": 18, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, - "xsltMessageLogger": { "index": 19, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } + "source": { "index": 7, "kind": "parameter", "displayName": "Source", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body." }, + "transformerCacheSize": { "index": 8, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, + "lazyStartProducer": { "index": 9, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] + "entityResolver": { "index": 10, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, + "errorListener": { "index": 11, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] + "resultHandlerFactory": { "index": 12, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, + "saxonConfiguration": { "index": 13, "kind": "parameter", "displayName": "Saxon Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "net.sf.saxon.Configuration", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Saxon configuration" }, + "saxonExtensionFunctions": { "index": 14, "kind": "parameter", "displayName": "Saxon Extension Functions", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separ [...] + "secureProcessing": { "index": 15, "kind": "parameter", "displayName": "Secure Processing", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Feature for XML secure processing (see javax.xml.XMLConstants). This is enabled by default. However, when using Saxon Professional you may need to turn this off to allow Saxon to be able to use Jav [...] + "transformerFactory": { "index": 16, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, + "transformerFactoryClass": { "index": 17, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, + "transformerFactoryConfigurationStrategy": { "index": 18, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, + "uriResolver": { "index": 19, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, + "xsltMessageLogger": { "index": 20, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } } } diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt.json index f9740e43686..e5e09f23ebe 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt.json @@ -45,15 +45,16 @@ "deleteOutputFile": { "index": 3, "kind": "parameter", "displayName": "Delete Output File", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If you have output=file then this option dictates whether or not the output file should be deleted when the Exchange is done processing. For example suppose the output file is a temporary file, then it ca [...] "failOnNullBody": { "index": 4, "kind": "parameter", "displayName": "Fail On Null Body", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not to throw an exception if the input body is null." }, "output": { "index": 5, "kind": "parameter", "displayName": "Output", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltOutput", "enum": [ "string", "bytes", "DOM", "file" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "string", "description": "Option to specify which output type to use. Possible values are: string, bytes, DOM, file. The first three options are all in memory based, whe [...] - "transformerCacheSize": { "index": 6, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, - "lazyStartProducer": { "index": 7, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] - "entityResolver": { "index": 8, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, - "errorListener": { "index": 9, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exch [...] - "resultHandlerFactory": { "index": 10, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, - "transformerFactory": { "index": 11, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, - "transformerFactoryClass": { "index": 12, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, - "transformerFactoryConfigurationStrategy": { "index": 13, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, - "uriResolver": { "index": 14, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, - "xsltMessageLogger": { "index": 15, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } + "source": { "index": 6, "kind": "parameter", "displayName": "Source", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body." }, + "transformerCacheSize": { "index": 7, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, + "lazyStartProducer": { "index": 8, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] + "entityResolver": { "index": 9, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, + "errorListener": { "index": 10, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] + "resultHandlerFactory": { "index": 11, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, + "transformerFactory": { "index": 12, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, + "transformerFactoryClass": { "index": 13, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, + "transformerFactoryConfigurationStrategy": { "index": 14, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, + "uriResolver": { "index": 15, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, + "xsltMessageLogger": { "index": 16, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } } } diff --git a/components/camel-xj/src/generated/java/org/apache/camel/component/xj/XJEndpointUriFactory.java b/components/camel-xj/src/generated/java/org/apache/camel/component/xj/XJEndpointUriFactory.java index aafdfc40586..48de05f4484 100644 --- a/components/camel-xj/src/generated/java/org/apache/camel/component/xj/XJEndpointUriFactory.java +++ b/components/camel-xj/src/generated/java/org/apache/camel/component/xj/XJEndpointUriFactory.java @@ -23,7 +23,7 @@ public class XJEndpointUriFactory extends org.apache.camel.support.component.End private static final Set<String> SECRET_PROPERTY_NAMES; private static final Set<String> MULTI_VALUE_PREFIXES; static { - Set<String> props = new HashSet<>(21); + Set<String> props = new HashSet<>(22); props.add("allowStAX"); props.add("allowTemplateFromHeader"); props.add("contentCache"); @@ -38,6 +38,7 @@ public class XJEndpointUriFactory extends org.apache.camel.support.component.End props.add("saxonConfiguration"); props.add("saxonExtensionFunctions"); props.add("secureProcessing"); + props.add("source"); props.add("transformDirection"); props.add("transformerCacheSize"); props.add("transformerFactory"); diff --git a/components/camel-xj/src/generated/resources/META-INF/org/apache/camel/component/xj/xj.json b/components/camel-xj/src/generated/resources/META-INF/org/apache/camel/component/xj/xj.json index 6c2a1f09e88..f7eef9d266e 100644 --- a/components/camel-xj/src/generated/resources/META-INF/org/apache/camel/component/xj/xj.json +++ b/components/camel-xj/src/generated/resources/META-INF/org/apache/camel/component/xj/xj.json @@ -50,19 +50,20 @@ "deleteOutputFile": { "index": 4, "kind": "parameter", "displayName": "Delete Output File", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If you have output=file then this option dictates whether or not the output file should be deleted when the Exchange is done processing. For example suppose the output file is a temporary file, then it ca [...] "failOnNullBody": { "index": 5, "kind": "parameter", "displayName": "Fail On Null Body", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not to throw an exception if the input body is null." }, "output": { "index": 6, "kind": "parameter", "displayName": "Output", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltOutput", "enum": [ "string", "bytes", "DOM", "file" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "string", "description": "Option to specify which output type to use. Possible values are: string, bytes, DOM, file. The first three options are all in memory based, whe [...] - "transformDirection": { "index": 7, "kind": "parameter", "displayName": "Transform Direction", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.xj.TransformDirection", "enum": [ "XML2JSON", "JSON2XML" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Transform direction. Either XML2JSON or JSON2XML" }, - "transformerCacheSize": { "index": 8, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, - "lazyStartProducer": { "index": 9, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] - "entityResolver": { "index": 10, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, - "errorListener": { "index": 11, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] - "resultHandlerFactory": { "index": 12, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, - "saxonConfiguration": { "index": 13, "kind": "parameter", "displayName": "Saxon Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "net.sf.saxon.Configuration", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Saxon configuration" }, - "saxonExtensionFunctions": { "index": 14, "kind": "parameter", "displayName": "Saxon Extension Functions", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separ [...] - "secureProcessing": { "index": 15, "kind": "parameter", "displayName": "Secure Processing", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Feature for XML secure processing (see javax.xml.XMLConstants). This is enabled by default. However, when using Saxon Professional you may need to turn this off to allow Saxon to be able to use Jav [...] - "transformerFactory": { "index": 16, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, - "transformerFactoryClass": { "index": 17, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, - "transformerFactoryConfigurationStrategy": { "index": 18, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, - "uriResolver": { "index": 19, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, - "xsltMessageLogger": { "index": 20, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } + "source": { "index": 7, "kind": "parameter", "displayName": "Source", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body." }, + "transformDirection": { "index": 8, "kind": "parameter", "displayName": "Transform Direction", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.xj.TransformDirection", "enum": [ "XML2JSON", "JSON2XML" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Transform direction. Either XML2JSON or JSON2XML" }, + "transformerCacheSize": { "index": 9, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, + "lazyStartProducer": { "index": 10, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produ [...] + "entityResolver": { "index": 11, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, + "errorListener": { "index": 12, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] + "resultHandlerFactory": { "index": 13, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, + "saxonConfiguration": { "index": 14, "kind": "parameter", "displayName": "Saxon Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "net.sf.saxon.Configuration", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Saxon configuration" }, + "saxonExtensionFunctions": { "index": 15, "kind": "parameter", "displayName": "Saxon Extension Functions", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separ [...] + "secureProcessing": { "index": 16, "kind": "parameter", "displayName": "Secure Processing", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Feature for XML secure processing (see javax.xml.XMLConstants). This is enabled by default. However, when using Saxon Professional you may need to turn this off to allow Saxon to be able to use Jav [...] + "transformerFactory": { "index": 17, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, + "transformerFactoryClass": { "index": 18, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, + "transformerFactoryConfigurationStrategy": { "index": 19, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, + "uriResolver": { "index": 20, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, + "xsltMessageLogger": { "index": 21, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } } } diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonSourceHandlerFactoryImpl.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonSourceHandlerFactoryImpl.java index 07c03053b7b..2a8e3305e5c 100644 --- a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonSourceHandlerFactoryImpl.java +++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonSourceHandlerFactoryImpl.java @@ -28,6 +28,7 @@ import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonParser; import org.apache.camel.Exchange; import org.apache.camel.ExpectedBodyTypeException; +import org.apache.camel.Expression; import org.apache.camel.component.xslt.SourceHandlerFactory; /** @@ -65,8 +66,8 @@ public class JsonSourceHandlerFactoryImpl implements SourceHandlerFactory { * {@inheritDoc} */ @Override - public Source getSource(Exchange exchange) throws Exception { - Object body = exchange.getIn().getBody(); + public Source getSource(Exchange exchange, Expression source) throws Exception { + Object body = source != null ? source.evaluate(exchange, Object.class) : exchange.getMessage().getBody(); JsonParser jsonParser = null; if (body instanceof File) { diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XInputStreamTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XInputStreamTest.java index 7fee701f818..c388fe5c980 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XInputStreamTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XInputStreamTest.java @@ -38,6 +38,51 @@ public class J2XInputStreamTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(String.class); + + ByteArrayInputStream body = new ByteArrayInputStream("{\"hello\": \"world!\"}".getBytes(StandardCharsets.UTF_8)); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", body); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(String.class); + + ByteArrayInputStream body = new ByteArrayInputStream("{\"hello\": \"world!\"}".getBytes(StandardCharsets.UTF_8)); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", body); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(String.class); + + ByteArrayInputStream body = new ByteArrayInputStream("{\"hello\": \"world!\"}".getBytes(StandardCharsets.UTF_8)); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", body); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -46,6 +91,18 @@ public class J2XInputStreamTest extends CamelTestSupport { from("direct:start") .to("xj:hellojson2xml.xsl?transformDirection=JSON2XML") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:hellojson2xml.xsl?source=header:xmlSource&transformDirection=JSON2XML") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:hellojson2xml.xsl?source=variable:xmlSource&transformDirection=JSON2XML") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:hellojson2xml.xsl?source=property:xmlSource&transformDirection=JSON2XML") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputBytesTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputBytesTest.java index b2150b9d5de..0d5dc330f37 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputBytesTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputBytesTest.java @@ -35,6 +35,45 @@ public class J2XOutputBytesTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(byte[].class); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", "{\"hello\": \"world!\"}"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(byte[].class); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", "{\"hello\": \"world!\"}"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(byte[].class); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", "{\"hello\": \"world!\"}"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -43,6 +82,18 @@ public class J2XOutputBytesTest extends CamelTestSupport { from("direct:start") .to("xj:hellojson2xml.xsl?transformDirection=JSON2XML&output=bytes") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:hellojson2xml.xsl?source=header:xmlSource&transformDirection=JSON2XML&output=bytes") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:hellojson2xml.xsl?source=variable:xmlSource&transformDirection=JSON2XML&output=bytes") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:hellojson2xml.xsl?source=property:xmlSource&transformDirection=JSON2XML&output=bytes") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputFileTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputFileTest.java index 5e1706f13f4..171e1450bbd 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputFileTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputFileTest.java @@ -39,6 +39,48 @@ public class J2XOutputFileTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(File.class); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", "{\"hello\": \"world!\"}"); + exchange.getIn().setHeader(Exchange.XSLT_FILE_NAME, "target/J2XOutputFileTest.xml"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(File.class); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", "{\"hello\": \"world!\"}"); + exchange.getIn().setHeader(Exchange.XSLT_FILE_NAME, "target/J2XOutputFileTest.xml"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(File.class); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", "{\"hello\": \"world!\"}"); + exchange.getIn().setHeader(Exchange.XSLT_FILE_NAME, "target/J2XOutputFileTest.xml"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -47,6 +89,18 @@ public class J2XOutputFileTest extends CamelTestSupport { from("direct:start") .to("xj:hellojson2xml.xsl?transformDirection=JSON2XML&output=file") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:hellojson2xml.xsl?source=header:xmlSource&transformDirection=JSON2XML&output=file") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:hellojson2xml.xsl?source=variable:xmlSource&transformDirection=JSON2XML&output=file") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:hellojson2xml.xsl?source=property:xmlSource&transformDirection=JSON2XML&output=file") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputIdentityTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputIdentityTest.java index b00b93ed9f4..e21e5177737 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputIdentityTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputIdentityTest.java @@ -38,6 +38,54 @@ public class J2XOutputIdentityTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + + "<object xmlns:xj=\"http://camel.apache.org/component/xj\" xj:type=\"object\">" + + "<object xj:name=\"hello\" xj:type=\"string\">world!</object>" + + "</object>"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", "{\"hello\": \"world!\"}"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + + "<object xmlns:xj=\"http://camel.apache.org/component/xj\" xj:type=\"object\">" + + "<object xj:name=\"hello\" xj:type=\"string\">world!</object>" + + "</object>"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", "{\"hello\": \"world!\"}"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + + "<object xmlns:xj=\"http://camel.apache.org/component/xj\" xj:type=\"object\">" + + "<object xj:name=\"hello\" xj:type=\"string\">world!</object>" + + "</object>"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", "{\"hello\": \"world!\"}"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -46,6 +94,18 @@ public class J2XOutputIdentityTest extends CamelTestSupport { from("direct:start") .to("xj:identity?transformDirection=JSON2XML") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:identity?source=header:xmlSource&transformDirection=JSON2XML") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:identity?source=variable:xmlSource&transformDirection=JSON2XML") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:identity?source=property:xmlSource&transformDirection=JSON2XML") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputStringTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputStringTest.java index 2d36063ed0d..28242d9747f 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputStringTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputStringTest.java @@ -35,6 +35,45 @@ public class J2XOutputStringTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", "{\"hello\": \"world!\"}"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", "{\"hello\": \"world!\"}"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", "{\"hello\": \"world!\"}"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -43,6 +82,18 @@ public class J2XOutputStringTest extends CamelTestSupport { from("direct:start") .to("xj:hellojson2xml.xsl?transformDirection=JSON2XML&output=string") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:hellojson2xml.xsl?source=header:xmlSource&transformDirection=JSON2XML&output=string") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:hellojson2xml.xsl?source=variable:xmlSource&transformDirection=JSON2XML&output=string") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:hellojson2xml.xsl?source=property:xmlSource&transformDirection=JSON2XML&output=string") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JInputStreamTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JInputStreamTest.java index e7234ef481f..4667d93dcd0 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JInputStreamTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JInputStreamTest.java @@ -38,6 +38,51 @@ public class X2JInputStreamTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(String.class); + + ByteArrayInputStream body = new ByteArrayInputStream("<hello>world!</hello>".getBytes(StandardCharsets.UTF_8)); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", body); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(String.class); + + ByteArrayInputStream body = new ByteArrayInputStream("<hello>world!</hello>".getBytes(StandardCharsets.UTF_8)); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", body); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(String.class); + + ByteArrayInputStream body = new ByteArrayInputStream("<hello>world!</hello>".getBytes(StandardCharsets.UTF_8)); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", body); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -46,6 +91,18 @@ public class X2JInputStreamTest extends CamelTestSupport { from("direct:start") .to("xj:helloxml2json.xsl?transformDirection=XML2JSON") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:helloxml2json.xsl?source=header:xmlSource&transformDirection=XML2JSON") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:helloxml2json.xsl?source=variable:xmlSource&transformDirection=XML2JSON") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:helloxml2json.xsl?source=property:xmlSource&transformDirection=XML2JSON") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputBytesTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputBytesTest.java index 19afc7f08f6..aff6d801a11 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputBytesTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputBytesTest.java @@ -35,6 +35,45 @@ public class X2JOutputBytesTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(byte[].class); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", "<hello>world!</hello>"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(byte[].class); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", "<hello>world!</hello>"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(byte[].class); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", "<hello>world!</hello>"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -43,6 +82,18 @@ public class X2JOutputBytesTest extends CamelTestSupport { from("direct:start") .to("xj:helloxml2json.xsl?transformDirection=XML2JSON&output=bytes") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:helloxml2json.xsl?source=header:xmlSource&transformDirection=XML2JSON&output=bytes") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:helloxml2json.xsl?source=variable:xmlSource&transformDirection=XML2JSON&output=bytes") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:helloxml2json.xsl?source=property:xmlSource&transformDirection=XML2JSON&output=bytes") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputFileTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputFileTest.java index bac25492290..58f1b49949c 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputFileTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputFileTest.java @@ -39,6 +39,48 @@ public class X2JOutputFileTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(File.class); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", "<hello>world!</hello>"); + exchange.getIn().setHeader(Exchange.XSLT_FILE_NAME, "target/X2JOutputFileTest.json"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(File.class); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", "<hello>world!</hello>"); + exchange.getIn().setHeader(Exchange.XSLT_FILE_NAME, "target/X2JOutputFileTest.json"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(File.class); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", "<hello>world!</hello>"); + exchange.getIn().setHeader(Exchange.XSLT_FILE_NAME, "target/X2JOutputFileTest.json"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -47,6 +89,18 @@ public class X2JOutputFileTest extends CamelTestSupport { from("direct:start") .to("xj:helloxml2json.xsl?transformDirection=XML2JSON&output=file") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:helloxml2json.xsl?source=header:xmlSource&transformDirection=XML2JSON&output=file") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:helloxml2json.xsl?source=variable:xmlSource&transformDirection=XML2JSON&output=file") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:helloxml2json.xsl?source=property:xmlSource&transformDirection=XML2JSON&output=file") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputIdentityTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputIdentityTest.java index d97489c7836..5ea315b6173 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputIdentityTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputIdentityTest.java @@ -35,6 +35,45 @@ public class X2JOutputIdentityTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("{\"#text\":\"world!\"}"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", "<hello>world!</hello>"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("{\"#text\":\"world!\"}"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", "<hello>world!</hello>"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("{\"#text\":\"world!\"}"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", "<hello>world!</hello>"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -43,6 +82,18 @@ public class X2JOutputIdentityTest extends CamelTestSupport { from("direct:start") .to("xj:identity?transformDirection=XML2JSON") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:identity?source=header:xmlSource&transformDirection=XML2JSON") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:identity?source=variable:xmlSource&transformDirection=XML2JSON") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:identity?source=property:xmlSource&transformDirection=XML2JSON") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputStringTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputStringTest.java index 6a99964c25d..9eb8b6a5425 100644 --- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputStringTest.java +++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputStringTest.java @@ -35,6 +35,45 @@ public class X2JOutputStringTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); } + @Test + public void testOutputSourceHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceHeader"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", "<hello>world!</hello>"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceVariable() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceVariable"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", "<hello>world!</hello>"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + public void testOutputSourceProperty() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:sourceProperty"); + mock.expectedBodiesReceived("{\"hello\":\"world!\"}"); + mock.message(0).body().isInstanceOf(String.class); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", "<hello>world!</hello>"); + }); + + MockEndpoint.assertIsSatisfied(context); + } + @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { @@ -43,6 +82,18 @@ public class X2JOutputStringTest extends CamelTestSupport { from("direct:start") .to("xj:helloxml2json.xsl?transformDirection=XML2JSON&output=string") .to("mock:result"); + + from("direct:sourceHeader") + .to("xj:helloxml2json.xsl?source=header:xmlSource&transformDirection=XML2JSON&output=string") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xj:helloxml2json.xsl?source=variable:xmlSource&transformDirection=XML2JSON&output=string") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xj:helloxml2json.xsl?source=property:xmlSource&transformDirection=XML2JSON&output=string") + .to("mock:sourceProperty"); } }; } diff --git a/components/camel-xslt-saxon/src/generated/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpointUriFactory.java b/components/camel-xslt-saxon/src/generated/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpointUriFactory.java index 836f438dd65..a6c2fa90d6b 100644 --- a/components/camel-xslt-saxon/src/generated/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpointUriFactory.java +++ b/components/camel-xslt-saxon/src/generated/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpointUriFactory.java @@ -23,7 +23,7 @@ public class XsltSaxonEndpointUriFactory extends org.apache.camel.support.compon private static final Set<String> SECRET_PROPERTY_NAMES; private static final Set<String> MULTI_VALUE_PREFIXES; static { - Set<String> props = new HashSet<>(20); + Set<String> props = new HashSet<>(21); props.add("allowStAX"); props.add("allowTemplateFromHeader"); props.add("contentCache"); @@ -38,6 +38,7 @@ public class XsltSaxonEndpointUriFactory extends org.apache.camel.support.compon props.add("saxonConfiguration"); props.add("saxonExtensionFunctions"); props.add("secureProcessing"); + props.add("source"); props.add("transformerCacheSize"); props.add("transformerFactory"); props.add("transformerFactoryClass"); diff --git a/components/camel-xslt-saxon/src/generated/resources/META-INF/org/apache/camel/component/xslt/saxon/xslt-saxon.json b/components/camel-xslt-saxon/src/generated/resources/META-INF/org/apache/camel/component/xslt/saxon/xslt-saxon.json index 0f7a705f1a4..cf5f7c8bf64 100644 --- a/components/camel-xslt-saxon/src/generated/resources/META-INF/org/apache/camel/component/xslt/saxon/xslt-saxon.json +++ b/components/camel-xslt-saxon/src/generated/resources/META-INF/org/apache/camel/component/xslt/saxon/xslt-saxon.json @@ -50,18 +50,19 @@ "deleteOutputFile": { "index": 4, "kind": "parameter", "displayName": "Delete Output File", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If you have output=file then this option dictates whether or not the output file should be deleted when the Exchange is done processing. For example suppose the output file is a temporary file, then it ca [...] "failOnNullBody": { "index": 5, "kind": "parameter", "displayName": "Fail On Null Body", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not to throw an exception if the input body is null." }, "output": { "index": 6, "kind": "parameter", "displayName": "Output", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltOutput", "enum": [ "string", "bytes", "DOM", "file" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "string", "description": "Option to specify which output type to use. Possible values are: string, bytes, DOM, file. The first three options are all in memory based, whe [...] - "transformerCacheSize": { "index": 7, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, - "lazyStartProducer": { "index": 8, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] - "entityResolver": { "index": 9, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, - "errorListener": { "index": 10, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] - "resultHandlerFactory": { "index": 11, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, - "saxonConfiguration": { "index": 12, "kind": "parameter", "displayName": "Saxon Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "net.sf.saxon.Configuration", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Saxon configuration" }, - "saxonExtensionFunctions": { "index": 13, "kind": "parameter", "displayName": "Saxon Extension Functions", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separ [...] - "secureProcessing": { "index": 14, "kind": "parameter", "displayName": "Secure Processing", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Feature for XML secure processing (see javax.xml.XMLConstants). This is enabled by default. However, when using Saxon Professional you may need to turn this off to allow Saxon to be able to use Jav [...] - "transformerFactory": { "index": 15, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, - "transformerFactoryClass": { "index": 16, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, - "transformerFactoryConfigurationStrategy": { "index": 17, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, - "uriResolver": { "index": 18, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, - "xsltMessageLogger": { "index": 19, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } + "source": { "index": 7, "kind": "parameter", "displayName": "Source", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body." }, + "transformerCacheSize": { "index": 8, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, + "lazyStartProducer": { "index": 9, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] + "entityResolver": { "index": 10, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, + "errorListener": { "index": 11, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] + "resultHandlerFactory": { "index": 12, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, + "saxonConfiguration": { "index": 13, "kind": "parameter", "displayName": "Saxon Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "net.sf.saxon.Configuration", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Saxon configuration" }, + "saxonExtensionFunctions": { "index": 14, "kind": "parameter", "displayName": "Saxon Extension Functions", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry, where you can comma to separ [...] + "secureProcessing": { "index": 15, "kind": "parameter", "displayName": "Secure Processing", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Feature for XML secure processing (see javax.xml.XMLConstants). This is enabled by default. However, when using Saxon Professional you may need to turn this off to allow Saxon to be able to use Jav [...] + "transformerFactory": { "index": 16, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, + "transformerFactoryClass": { "index": 17, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, + "transformerFactoryConfigurationStrategy": { "index": 18, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, + "uriResolver": { "index": 19, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, + "xsltMessageLogger": { "index": 20, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } } } diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java index 5137e02f832..df9f3e8d2b8 100644 --- a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java +++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java @@ -52,6 +52,7 @@ import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.EndpointHelper; import org.apache.camel.support.ResourceHelper; +import org.apache.camel.support.builder.ExpressionBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -240,6 +241,7 @@ public class XsltSaxonEndpoint extends XsltEndpoint { xslt.setEntityResolver(getEntityResolver()); xslt.setAllowStAX(allowStAX); xslt.setDeleteOutputFile(isDeleteOutputFile()); + xslt.setSource(ExpressionBuilder.singleInputExpression(getSource())); if (getXsltMessageLogger() != null) { xslt.setXsltMessageLogger(getXsltMessageLogger()); diff --git a/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java index 416565361a1..cd027e37f32 100644 --- a/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java +++ b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java @@ -49,6 +49,57 @@ public class XsltSaxonTest extends CamelTestSupport { sendMessageAndHaveItTransformed(body); } + @Test + public void testSendStringMessageSourceHeader() throws Exception { + sendMessageAndHaveItTransformedFromHeader("<mail><subject>Hey</subject><body>Hello world!</body></mail>"); + } + + @Test + public void testSendBytesMessageSourceHeader() throws Exception { + sendMessageAndHaveItTransformedFromHeader("<mail><subject>Hey</subject><body>Hello world!</body></mail>".getBytes()); + } + + @Test + public void testSendDomMessageSourceHeader() throws Exception { + XmlConverter converter = new XmlConverter(); + Document body = converter.toDOMDocument("<mail><subject>Hey</subject><body>Hello world!</body></mail>", null); + sendMessageAndHaveItTransformedFromHeader(body); + } + + @Test + public void testSendStringMessageSourceVariable() throws Exception { + sendMessageAndHaveItTransformedFromVariable("<mail><subject>Hey</subject><body>Hello world!</body></mail>"); + } + + @Test + public void testSendBytesMessageSourceVariable() throws Exception { + sendMessageAndHaveItTransformedFromVariable("<mail><subject>Hey</subject><body>Hello world!</body></mail>".getBytes()); + } + + @Test + public void testSendDomMessageSourceVariable() throws Exception { + XmlConverter converter = new XmlConverter(); + Document body = converter.toDOMDocument("<mail><subject>Hey</subject><body>Hello world!</body></mail>", null); + sendMessageAndHaveItTransformedFromVariable(body); + } + + @Test + public void testSendStringMessageSourceProperty() throws Exception { + sendMessageAndHaveItTransformedFromProperty("<mail><subject>Hey</subject><body>Hello world!</body></mail>"); + } + + @Test + public void testSendBytesMessageSourceProperty() throws Exception { + sendMessageAndHaveItTransformedFromProperty("<mail><subject>Hey</subject><body>Hello world!</body></mail>".getBytes()); + } + + @Test + public void testSendDomMessageSourceProperty() throws Exception { + XmlConverter converter = new XmlConverter(); + Document body = converter.toDOMDocument("<mail><subject>Hey</subject><body>Hello world!</body></mail>", null); + sendMessageAndHaveItTransformedFromProperty(body); + } + private void sendMessageAndHaveItTransformed(Object body) throws Exception { MockEndpoint endpoint = getMockEndpoint("mock:result"); endpoint.expectedMessageCount(1); @@ -69,12 +120,91 @@ public class XsltSaxonTest extends CamelTestSupport { assertTrue(xml.indexOf("<body>Hello world!</body>") > -1); } + private void sendMessageAndHaveItTransformedFromHeader(Object body) throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:sourceHeader"); + endpoint.expectedMessageCount(1); + + template.send("direct:sourceHeader", exchange -> { + exchange.getIn().setHeader("xmlSource", body); + }); + + MockEndpoint.assertIsSatisfied(context); + + List<Exchange> list = endpoint.getReceivedExchanges(); + Exchange exchange = list.get(0); + String xml = exchange.getIn().getBody(String.class); + + assertNotNull("The transformed XML should not be null", xml); + assertTrue(xml.indexOf("transformed") > -1); + // the cheese tag is in the transform.xsl + assertTrue(xml.indexOf("cheese") > -1); + assertTrue(xml.indexOf("<subject>Hey</subject>") > -1); + assertTrue(xml.indexOf("<body>Hello world!</body>") > -1); + } + + private void sendMessageAndHaveItTransformedFromVariable(Object body) throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:sourceVariable"); + endpoint.expectedMessageCount(1); + + template.send("direct:sourceVariable", exchange -> { + exchange.setVariable("xmlSource", body); + }); + + MockEndpoint.assertIsSatisfied(context); + + List<Exchange> list = endpoint.getReceivedExchanges(); + Exchange exchange = list.get(0); + String xml = exchange.getIn().getBody(String.class); + + assertNotNull("The transformed XML should not be null", xml); + assertTrue(xml.indexOf("transformed") > -1); + // the cheese tag is in the transform.xsl + assertTrue(xml.indexOf("cheese") > -1); + assertTrue(xml.indexOf("<subject>Hey</subject>") > -1); + assertTrue(xml.indexOf("<body>Hello world!</body>") > -1); + } + + private void sendMessageAndHaveItTransformedFromProperty(Object body) throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:sourceProperty"); + endpoint.expectedMessageCount(1); + + template.send("direct:sourceProperty", exchange -> { + exchange.setProperty("xmlSource", body); + }); + + MockEndpoint.assertIsSatisfied(context); + + List<Exchange> list = endpoint.getReceivedExchanges(); + Exchange exchange = list.get(0); + String xml = exchange.getIn().getBody(String.class); + + assertNotNull("The transformed XML should not be null", xml); + assertTrue(xml.indexOf("transformed") > -1); + // the cheese tag is in the transform.xsl + assertTrue(xml.indexOf("cheese") > -1); + assertTrue(xml.indexOf("<subject>Hey</subject>") > -1); + assertTrue(xml.indexOf("<body>Hello world!</body>") > -1); + } + protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { from("direct:start") .to("xslt-saxon:xslt/transform.xsl") .to("mock:result"); + + from("direct:sourceHeader") + .to("xslt-saxon:xslt/transform.xsl?source=header:xmlSource") + .to("mock:sourceHeader"); + + from("direct:sourceVariable") + .to("xslt-saxon:classpath:xslt/transform.xsl?source=variable:xmlSource") + .to("mock:sourceVariable"); + + from("direct:sourceProperty") + .to("xslt-saxon:classpath:xslt/transform.xsl?source=property:xmlSource") + .to("mock:sourceProperty"); + } }; } diff --git a/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltEndpointConfigurer.java b/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltEndpointConfigurer.java index c9bcea53faf..9756ef50edb 100644 --- a/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltEndpointConfigurer.java +++ b/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltEndpointConfigurer.java @@ -40,6 +40,7 @@ public class XsltEndpointConfigurer extends PropertyConfigurerSupport implements case "output": target.setOutput(property(camelContext, org.apache.camel.component.xslt.XsltOutput.class, value)); return true; case "resulthandlerfactory": case "resultHandlerFactory": target.setResultHandlerFactory(property(camelContext, org.apache.camel.component.xslt.ResultHandlerFactory.class, value)); return true; + case "source": target.setSource(property(camelContext, java.lang.String.class, value)); return true; case "transformercachesize": case "transformerCacheSize": target.setTransformerCacheSize(property(camelContext, int.class, value)); return true; case "transformerfactory": @@ -76,6 +77,7 @@ public class XsltEndpointConfigurer extends PropertyConfigurerSupport implements case "output": return org.apache.camel.component.xslt.XsltOutput.class; case "resulthandlerfactory": case "resultHandlerFactory": return org.apache.camel.component.xslt.ResultHandlerFactory.class; + case "source": return java.lang.String.class; case "transformercachesize": case "transformerCacheSize": return int.class; case "transformerfactory": @@ -113,6 +115,7 @@ public class XsltEndpointConfigurer extends PropertyConfigurerSupport implements case "output": return target.getOutput(); case "resulthandlerfactory": case "resultHandlerFactory": return target.getResultHandlerFactory(); + case "source": return target.getSource(); case "transformercachesize": case "transformerCacheSize": return target.getTransformerCacheSize(); case "transformerfactory": diff --git a/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltEndpointUriFactory.java b/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltEndpointUriFactory.java index b81a5e6e25b..b235a972e27 100644 --- a/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltEndpointUriFactory.java +++ b/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltEndpointUriFactory.java @@ -23,7 +23,7 @@ public class XsltEndpointUriFactory extends org.apache.camel.support.component.E private static final Set<String> SECRET_PROPERTY_NAMES; private static final Set<String> MULTI_VALUE_PREFIXES; static { - Set<String> props = new HashSet<>(16); + Set<String> props = new HashSet<>(17); props.add("allowTemplateFromHeader"); props.add("contentCache"); props.add("deleteOutputFile"); @@ -34,6 +34,7 @@ public class XsltEndpointUriFactory extends org.apache.camel.support.component.E props.add("output"); props.add("resourceUri"); props.add("resultHandlerFactory"); + props.add("source"); props.add("transformerCacheSize"); props.add("transformerFactory"); props.add("transformerFactoryClass"); diff --git a/components/camel-xslt/src/generated/resources/META-INF/org/apache/camel/component/xslt/xslt.json b/components/camel-xslt/src/generated/resources/META-INF/org/apache/camel/component/xslt/xslt.json index f9740e43686..e5e09f23ebe 100644 --- a/components/camel-xslt/src/generated/resources/META-INF/org/apache/camel/component/xslt/xslt.json +++ b/components/camel-xslt/src/generated/resources/META-INF/org/apache/camel/component/xslt/xslt.json @@ -45,15 +45,16 @@ "deleteOutputFile": { "index": 3, "kind": "parameter", "displayName": "Delete Output File", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If you have output=file then this option dictates whether or not the output file should be deleted when the Exchange is done processing. For example suppose the output file is a temporary file, then it ca [...] "failOnNullBody": { "index": 4, "kind": "parameter", "displayName": "Fail On Null Body", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not to throw an exception if the input body is null." }, "output": { "index": 5, "kind": "parameter", "displayName": "Output", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltOutput", "enum": [ "string", "bytes", "DOM", "file" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "string", "description": "Option to specify which output type to use. Possible values are: string, bytes, DOM, file. The first three options are all in memory based, whe [...] - "transformerCacheSize": { "index": 6, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, - "lazyStartProducer": { "index": 7, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] - "entityResolver": { "index": 8, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, - "errorListener": { "index": 9, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exch [...] - "resultHandlerFactory": { "index": 10, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, - "transformerFactory": { "index": 11, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, - "transformerFactoryClass": { "index": 12, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, - "transformerFactoryConfigurationStrategy": { "index": 13, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, - "uriResolver": { "index": 14, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, - "xsltMessageLogger": { "index": 15, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } + "source": { "index": 6, "kind": "parameter", "displayName": "Source", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the message body." }, + "transformerCacheSize": { "index": 7, "kind": "parameter", "displayName": "Transformer Cache Size", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer()." }, + "lazyStartProducer": { "index": 8, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...] + "entityResolver": { "index": 9, "kind": "parameter", "displayName": "Entity Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.xml.sax.EntityResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource." }, + "errorListener": { "index": 10, "kind": "parameter", "displayName": "Error Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.ErrorListener", "deprecated": false, "autowired": false, "secret": false, "description": "Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exc [...] + "resultHandlerFactory": { "index": 11, "kind": "parameter", "displayName": "Result Handler Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.ResultHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types." }, + "transformerFactory": { "index": 12, "kind": "parameter", "displayName": "Transformer Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.TransformerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory" }, + "transformerFactoryClass": { "index": 13, "kind": "parameter", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, + "transformerFactoryConfigurationStrategy": { "index": 14, "kind": "parameter", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, + "uriResolver": { "index": 15, "kind": "parameter", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom javax.xml.transform.URIResolver" }, + "xsltMessageLogger": { "index": 16, "kind": "parameter", "displayName": "Xslt Message Logger", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltMessageLogger", "deprecated": false, "autowired": false, "secret": false, "description": "A consumer to messages generated during XSLT transformations." } } } diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XmlSourceHandlerFactoryImpl.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XmlSourceHandlerFactoryImpl.java index a8b1e228d11..636b9a908d8 100644 --- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XmlSourceHandlerFactoryImpl.java +++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XmlSourceHandlerFactoryImpl.java @@ -29,6 +29,7 @@ import org.w3c.dom.Node; import org.apache.camel.Exchange; import org.apache.camel.ExpectedBodyTypeException; +import org.apache.camel.Expression; import org.apache.camel.RuntimeTransformException; import org.apache.camel.TypeConverter; import org.apache.camel.support.builder.xml.XMLConverterHelper; @@ -56,13 +57,13 @@ public class XmlSourceHandlerFactoryImpl implements SourceHandlerFactory { } @Override - public Source getSource(Exchange exchange) throws Exception { + public Source getSource(Exchange exchange, Expression source) throws Exception { // only convert to input stream if really needed if (isInputStreamNeeded(exchange)) { InputStream is = exchange.getIn().getBody(InputStream.class); return getSource(exchange, is); } else { - Object body = exchange.getIn().getBody(); + Object body = source != null ? source.evaluate(exchange, Object.class) : exchange.getMessage().getBody(); return getSource(exchange, body); } } diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java index b765efdd7f6..41bbf1cefa4 100644 --- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java +++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java @@ -42,6 +42,7 @@ import javax.xml.transform.stream.StreamSource; import org.xml.sax.EntityResolver; import org.apache.camel.Exchange; +import org.apache.camel.Expression; import org.apache.camel.Message; import org.apache.camel.Processor; import org.apache.camel.support.ExchangeHelper; @@ -75,6 +76,7 @@ public class XsltBuilder implements Processor { private ErrorListener errorListener; private EntityResolver entityResolver; private XsltMessageLogger xsltMessageLogger; + private Expression source; private final XMLConverterHelper converter = new XMLConverterHelper(); private final Lock sourceHandlerFactoryLock = new ReentrantLock(); @@ -113,7 +115,7 @@ public class XsltBuilder implements Processor { // the underlying input stream, which we need to close to avoid locking files or other resources InputStream is = null; try { - Source source = getSourceHandlerFactory().getSource(exchange); + Source source = getSourceHandlerFactory().getSource(exchange, this.source); source = prepareSource(source); @@ -502,6 +504,14 @@ public class XsltBuilder implements Processor { } } + public Expression getSource() { + return source; + } + + public void setSource(Expression source) { + this.source = source; + } + private static final class XsltBuilderOnCompletion extends SynchronizationAdapter { private final String fileName; diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java index e2df947ec7f..f7f6b4f825d 100644 --- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java +++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java @@ -45,6 +45,7 @@ import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriPath; import org.apache.camel.support.ProcessorEndpoint; import org.apache.camel.support.ResourceHelper; +import org.apache.camel.support.builder.ExpressionBuilder; import org.apache.camel.support.service.ServiceHelper; import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; @@ -95,6 +96,8 @@ public class XsltEndpoint extends ProcessorEndpoint { private TransformerFactoryConfigurationStrategy transformerFactoryConfigurationStrategy; @UriParam(label = "advanced") private XsltMessageLogger xsltMessageLogger; + @UriParam + private String source; public XsltEndpoint(String endpointUri, Component component) { super(endpointUri, component); @@ -461,6 +464,7 @@ public class XsltEndpoint extends ProcessorEndpoint { xslt.setUriResolver(uriResolver); xslt.setEntityResolver(entityResolver); xslt.setDeleteOutputFile(deleteOutputFile); + xslt.setSource(ExpressionBuilder.singleInputExpression(getSource())); configureOutput(xslt, output.name()); @@ -499,6 +503,19 @@ public class XsltEndpoint extends ProcessorEndpoint { } } + public String getSource() { + return source; + } + + /** + * Source to use, instead of message body. You can prefix with variable:, header:, or property: to specify kind of + * source. Otherwise, the source is assumed to be a variable. Use empty or null to use default source, which is the + * message body. + */ + public void setSource(String source) { + this.source = source; + } + @Override protected void doStop() throws Exception { super.doStop(); diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XJEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XJEndpointBuilderFactory.java index 9ad0c2a2824..86e30cb746a 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XJEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XJEndpointBuilderFactory.java @@ -266,6 +266,23 @@ public interface XJEndpointBuilderFactory { doSetProperty("output", output); return this; } + /** + * Source to use, instead of message body. You can prefix with + * variable:, header:, or property: to specify kind of source. + * Otherwise, the source is assumed to be a variable. Use empty or null + * to use default source, which is the message body. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: producer + * + * @param source the value to set + * @return the dsl builder + */ + default XJEndpointBuilder source(String source) { + doSetProperty("source", source); + return this; + } /** * Transform direction. Either XML2JSON or JSON2XML. * diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java index fe9770c80eb..552ebf55676 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XsltEndpointBuilderFactory.java @@ -230,6 +230,23 @@ public interface XsltEndpointBuilderFactory { doSetProperty("output", output); return this; } + /** + * Source to use, instead of message body. You can prefix with + * variable:, header:, or property: to specify kind of source. + * Otherwise, the source is assumed to be a variable. Use empty or null + * to use default source, which is the message body. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: producer + * + * @param source the value to set + * @return the dsl builder + */ + default XsltEndpointBuilder source(String source) { + doSetProperty("source", source); + return this; + } /** * The number of javax.xml.transform.Transformer object that are cached * for reuse to avoid calls to Template.newTransformer(). diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java index 41ca97549c5..fd4e77357da 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/XsltSaxonEndpointBuilderFactory.java @@ -266,6 +266,23 @@ public interface XsltSaxonEndpointBuilderFactory { doSetProperty("output", output); return this; } + /** + * Source to use, instead of message body. You can prefix with + * variable:, header:, or property: to specify kind of source. + * Otherwise, the source is assumed to be a variable. Use empty or null + * to use default source, which is the message body. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: producer + * + * @param source the value to set + * @return the dsl builder + */ + default XsltSaxonEndpointBuilder source(String source) { + doSetProperty("source", source); + return this; + } /** * The number of javax.xml.transform.Transformer object that are cached * for reuse to avoid calls to Template.newTransformer().