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-spring-boot.git


The following commit(s) were added to refs/heads/main by this push:
     new cef3a4b42f9 [CAMEL-9627]to make spring-boot runtime happy (#586)
cef3a4b42f9 is described below

commit cef3a4b42f947369c9659752aa5566a3af0e1de8
Author: Freeman(Yue) Fang <[email protected]>
AuthorDate: Wed Jun 29 12:53:20 2022 -0400

    [CAMEL-9627]to make spring-boot runtime happy (#586)
---
 .../camel/springboot/catalog/components/cxf.json   |  10 +-
 .../camel/springboot/catalog/components/cxfrs.json |   2 +-
 .../pom.xml                                        |  21 ++-
 .../src/main/docs/cxf-rest.json                    |  63 ++++++++
 .../src/main/docs/cxf.json                         |   0
 .../CxfRsComponentAutoConfiguration.java           |   0
 .../springboot/CxfRsComponentConfiguration.java    |   0
 .../jaxrs/springboot/CxfRsComponentConverter.java  |   0
 .../src/main/resources/META-INF/LICENSE.txt        |   0
 .../src/main/resources/META-INF/NOTICE.txt         |   0
 .../src/main/resources/META-INF/spring.factories   |   2 -
 .../src/main/resources/META-INF/spring.provides    |   2 +-
 .../cxf/jaxrs/testbean/CustomException.java        |  27 ++++
 .../component/cxf/jaxrs/testbean/Customer.java     |  75 ++++++++++
 .../cxf/jaxrs/testbean/CustomerService.java        | 153 ++++++++++++++++++++
 .../testbean/CustomerServiceNoAnnotations.java     |  25 ++++
 .../jaxrs/testbean/CustomerServiceResource.java    |  51 +++++++
 .../component/cxf/jaxrs/testbean/EchoService.java  |  41 ++++++
 .../camel/component/cxf/jaxrs/testbean/Order.java  |  67 +++++++++
 .../component/cxf/jaxrs/testbean/Product.java      |  41 ++++++
 .../component/cxf/jaxrs/testbean/ServiceUtil.java  |  24 ++++
 .../rest/springboot/CxfRsConsumerWithBeanTest.java | 109 ++++++++++++++
 .../rest/springboot/CxfRsProducerSessionTest.java  | 126 ++++++++++++++++
 .../cxf/rest/springboot/CxfRsStreamCacheTest.java  | 160 +++++++++++++++++++++
 .../routes/CxfRsSpringProducerSession.xml          |  53 +++++++
 .../routes/CxfRsSpringProducerSessionRoute.xml     |  59 ++++++++
 .../pom.xml                                        |  46 +++++-
 .../src/main/docs/cxf-soap.json                    |  69 +++++++++
 .../src/main/docs/cxf.json                         |  58 +-------
 .../springboot/CxfComponentAutoConfiguration.java  |   4 +-
 .../springboot/CxfComponentConfiguration.java      |   2 +-
 .../jaxws}/springboot/CxfComponentConverter.java   |   2 +-
 .../src/main/resources/META-INF/LICENSE.txt        |   0
 .../src/main/resources/META-INF/NOTICE.txt         |   0
 .../src/main/resources/META-INF/spring.factories}  |   7 +-
 .../src/main/resources/META-INF/spring.provides    |   2 +-
 .../camel/component/cxf/jaxws/HelloService.java    |  34 +++++
 .../cxf/soap/springboot/CXFMultiPartTest.java      | 106 ++++++++++++++
 .../soap/springboot/CxfConsumerMessageTest.java    | 137 ++++++++++++++++++
 .../CxfConsumerPayLoadConverterTest.java           |  98 +++++++++++++
 .../soap/springboot/CxfConsumerPayloadTest.java    | 135 +++++++++++++++++
 .../soap/springboot/CxfConsumerProviderTest.java   | 129 +++++++++++++++++
 .../cxf/soap/springboot/MultiPartInvokeImpl.java   |  52 +++++++
 .../cxf/soap/springboot/ServiceProvider.java       |  34 +++++
 .../springboot/WriteXmlDeclarationInterceptor.java |  38 +++++
 .../src/test/resources/MultiPartTest.wsdl          |  56 ++++++++
 .../src/test/resources/routes/MultiPartTest.xml    |  53 +++++++
 .../src/test/resources/routes/multipartRoute.xml   |  27 ++++
 .../camel-cxf-transport-starter/pom.xml            |   2 +-
 components-starter/camel-soap-starter/pom.xml      |   8 +-
 components-starter/pom.xml                         |   3 +-
 tooling/camel-spring-boot-bom/pom.xml              |   7 +-
 tooling/camel-spring-boot-dependencies/pom.xml     |   7 +-
 53 files changed, 2146 insertions(+), 81 deletions(-)

diff --git 
a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/cxf.json
 
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/cxf.json
index 43a23b95b0c..9a641827625 100644
--- 
a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/cxf.json
+++ 
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/cxf.json
@@ -7,10 +7,10 @@
     "deprecated": false,
     "firstVersion": "1.0.0",
     "label": "soap,webservice",
-    "javaType": "org.apache.camel.component.cxf.CxfComponent",
+    "javaType": "org.apache.camel.component.cxf.jaxws.CxfComponent",
     "supportLevel": "Stable",
     "groupId": "org.apache.camel.springboot",
-    "artifactId": "camel-cxf-starter",
+    "artifactId": "camel-cxf-soap-starter",
     "version": "3.18.0-SNAPSHOT",
     "scheme": "cxf",
     "extendsScheme": "",
@@ -40,7 +40,7 @@
   "properties": {
     "beanId": { "kind": "path", "displayName": "Bean Id", "group": "common", 
"label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "To lookup an existing configured CxfEndpoint. Must used bean: 
as prefix." },
     "address": { "kind": "path", "displayName": "Address", "group": "service", 
"label": "service", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "The service publish address." },
-    "dataFormat": { "kind": "parameter", "displayName": "Data Format", 
"group": "common", "label": "", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.cxf.DataFormat", "enum": [ "PAYLOAD", 
"RAW", "MESSAGE", "CXF_MESSAGE", "POJO" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "POJO", "description": "The data type 
messages supported by the CXF endpoint." },
+    "dataFormat": { "kind": "parameter", "displayName": "Data Format", 
"group": "common", "label": "", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.cxf.common.DataFormat", "enum": [ 
"PAYLOAD", "RAW", "MESSAGE", "CXF_MESSAGE", "POJO" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "POJO", "description": 
"The data type messages supported by the CXF endpoint." },
     "wrappedStyle": { "kind": "parameter", "displayName": "Wrapped Style", 
"group": "common", "label": "", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "description": "The WSDL style that describes how parameters 
are represented in the SOAP body. If the value is false, CXF will chose the 
document-literal unwrapped style, If the value is true, CXF will chose the 
document-literal wrapped style" },
     "bridgeErrorHandler": { "kind": "parameter", "displayName": "Bridge Error 
Handler", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Allows for bridging the consumer to the Camel routing Error 
Handler, which mean any exceptions occurred while the consumer is trying to 
pickup incoming messages, or the likes, will now [...]
     "exceptionHandler": { "kind": "parameter", "displayName": "Exception 
Handler", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
let the consumer use a custom ExceptionHandler. Notice if the option 
bridgeErrorHandler is enabled then this option is not in use. By default the 
con [...]
@@ -56,8 +56,8 @@
     "allowStreaming": { "kind": "parameter", "displayName": "Allow Streaming", 
"group": "advanced", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "description": "This option controls whether the CXF 
component, when running in PAYLOAD mode, will DOM parse the incoming messages 
into DOM Elements or keep the payload as a javax.xml.transform.Source object 
that would allow streaming in some [...]
     "bus": { "kind": "parameter", "displayName": "Bus", "group": "advanced", 
"label": "advanced", "required": false, "type": "object", "javaType": 
"org.apache.cxf.Bus", "deprecated": false, "autowired": false, "secret": false, 
"description": "To use a custom configured CXF Bus." },
     "continuationTimeout": { "kind": "parameter", "displayName": "Continuation 
Timeout", "group": "advanced", "label": "advanced", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "30000", "description": "This option is used 
to set the CXF continuation timeout which could be used in CxfConsumer by 
default when the CXF server is using Jetty or Servlet transport." },
-    "cxfBinding": { "kind": "parameter", "displayName": "Cxf Binding", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.cxf.CxfBinding", "deprecated": false, 
"autowired": false, "secret": false, "description": "To use a custom CxfBinding 
to control the binding between Camel Message and CXF Message." },
-    "cxfConfigurer": { "kind": "parameter", "displayName": "Cxf Configurer", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.cxf.CxfConfigurer", "deprecated": 
false, "autowired": false, "secret": false, "description": "This option could 
apply the implementation of 
org.apache.camel.component.cxf.CxfEndpointConfigurer which supports to 
configure the CXF endpoint in programmatic way. User can configure the CXF 
server and [...]
+    "cxfBinding": { "kind": "parameter", "displayName": "Cxf Binding", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.cxf.common.CxfBinding", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
CxfBinding to control the binding between Camel Message and CXF Message." },
+    "cxfConfigurer": { "kind": "parameter", "displayName": "Cxf Configurer", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.cxf.jaxws.CxfConfigurer", "deprecated": 
false, "autowired": false, "secret": false, "description": "This option could 
apply the implementation of 
org.apache.camel.component.cxf.CxfEndpointConfigurer which supports to 
configure the CXF endpoint in programmatic way. User can configure the CXF serv 
[...]
     "defaultBus": { "kind": "parameter", "displayName": "Default Bus", 
"group": "advanced", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Will set the default bus when CXF 
endpoint create a bus by itself" },
     "headerFilterStrategy": { "kind": "parameter", "displayName": "Header 
Filter Strategy", "group": "advanced", "label": "advanced", "required": false, 
"type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom HeaderFilterStrategy to filter header to and from Camel message." 
},
     "mergeProtocolHeaders": { "kind": "parameter", "displayName": "Merge 
Protocol Headers", "group": "advanced", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Whether to merge 
protocol headers. If enabled then propagating headers between Camel and CXF 
becomes more consistent and similar. For more details see CAMEL-6393." },
diff --git 
a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/cxfrs.json
 
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/cxfrs.json
index 4f6b36c1444..79373a290b6 100644
--- 
a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/cxfrs.json
+++ 
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/cxfrs.json
@@ -10,7 +10,7 @@
     "javaType": "org.apache.camel.component.cxf.jaxrs.CxfRsComponent",
     "supportLevel": "Stable",
     "groupId": "org.apache.camel.springboot",
-    "artifactId": "camel-cxf-starter",
+    "artifactId": "camel-cxf-rest-starter",
     "version": "3.18.0-SNAPSHOT",
     "scheme": "cxfrs",
     "extendsScheme": "",
diff --git a/components-starter/camel-cxf-starter/pom.xml 
b/components-starter/camel-cxf-rest-starter/pom.xml
similarity index 75%
copy from components-starter/camel-cxf-starter/pom.xml
copy to components-starter/camel-cxf-rest-starter/pom.xml
index 17ded9eb7c2..c17cfcdeb4f 100644
--- a/components-starter/camel-cxf-starter/pom.xml
+++ b/components-starter/camel-cxf-rest-starter/pom.xml
@@ -24,7 +24,7 @@
     <artifactId>components-starter</artifactId>
     <version>3.18.0-SNAPSHOT</version>
   </parent>
-  <artifactId>camel-cxf-starter</artifactId>
+  <artifactId>camel-cxf-rest-starter</artifactId>
   <packaging>jar</packaging>
   <name>Camel SB Starters :: CXF</name>
   <description>Spring-Boot Starter for Camel CXF support</description>
@@ -36,9 +36,26 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
-      <artifactId>camel-cxf</artifactId>
+      <artifactId>camel-cxf-spring-rest</artifactId>
       <version>${camel-version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-transports-http-undertow</artifactId>
+      <version>${cxf-version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-http</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>cglib</groupId>
+      <artifactId>cglib-nodep</artifactId>
+      <version>${cglib-version}</version>
+      <scope>test</scope>
+    </dependency>
     <!--START OF GENERATED CODE-->
     <dependency>
       <groupId>org.apache.camel.springboot</groupId>
diff --git 
a/components-starter/camel-cxf-rest-starter/src/main/docs/cxf-rest.json 
b/components-starter/camel-cxf-rest-starter/src/main/docs/cxf-rest.json
new file mode 100644
index 00000000000..6a1481c233b
--- /dev/null
+++ b/components-starter/camel-cxf-rest-starter/src/main/docs/cxf-rest.json
@@ -0,0 +1,63 @@
+{
+  "groups": [
+    {
+      "name": "camel.component.cxfrs",
+      "type": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration"
+    },
+    {
+      "name": "camel.component.cxfrs.customizer",
+      "type": 
"org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon$CustomizerProperties",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
+      "sourceMethod": "getCustomizer()"
+    }
+  ],
+  "properties": [
+    {
+      "name": "camel.component.cxfrs.autowired-enabled",
+      "type": "java.lang.Boolean",
+      "description": "Whether autowiring is enabled. This is used for 
automatic autowiring options (the option must be marked as autowired) by 
looking up in the registry to find if there is a single instance of matching 
type, which then gets configured on the component. This can be used for 
automatic configuring JDBC data sources, JMS connection factories, AWS Clients, 
etc.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
+      "defaultValue": true
+    },
+    {
+      "name": "camel.component.cxfrs.bridge-error-handler",
+      "type": "java.lang.Boolean",
+      "description": "Allows for bridging the consumer to the Camel routing 
Error Handler, which mean any exceptions occurred while the consumer is trying 
to pickup incoming messages, or the likes, will now be processed as a message 
and handled by the routing Error Handler. By default the consumer will use the 
org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be 
logged at WARN or ERROR level and ignored.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
+      "defaultValue": false
+    },
+    {
+      "name": "camel.component.cxfrs.customizer.enabled",
+      "type": "java.lang.Boolean",
+      "sourceType": 
"org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon$CustomizerProperties"
+    },
+    {
+      "name": "camel.component.cxfrs.enabled",
+      "type": "java.lang.Boolean",
+      "description": "Whether to enable auto configuration of the cxfrs 
component. This is enabled by default.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration"
+    },
+    {
+      "name": "camel.component.cxfrs.header-filter-strategy",
+      "type": "org.apache.camel.spi.HeaderFilterStrategy",
+      "description": "To use a custom 
org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel 
message. The option is a org.apache.camel.spi.HeaderFilterStrategy type.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration"
+    },
+    {
+      "name": "camel.component.cxfrs.lazy-start-producer",
+      "type": "java.lang.Boolean",
+      "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 producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and starting the [...]
+      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
+      "defaultValue": false
+    },
+    {
+      "name": "camel.component.cxfrs.use-global-ssl-context-parameters",
+      "type": "java.lang.Boolean",
+      "description": "Enable usage of global SSL context parameters.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
+      "defaultValue": false
+    }
+  ],
+  "hints": []
+}
\ No newline at end of file
diff --git a/components-starter/camel-cxf-starter/src/main/docs/cxf.json 
b/components-starter/camel-cxf-rest-starter/src/main/docs/cxf.json
similarity index 100%
copy from components-starter/camel-cxf-starter/src/main/docs/cxf.json
copy to components-starter/camel-cxf-rest-starter/src/main/docs/cxf.json
diff --git 
a/components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentAutoConfiguration.java
 
b/components-starter/camel-cxf-rest-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentAutoConfiguration.java
similarity index 100%
rename from 
components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentAutoConfiguration.java
rename to 
components-starter/camel-cxf-rest-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentAutoConfiguration.java
diff --git 
a/components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentConfiguration.java
 
b/components-starter/camel-cxf-rest-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentConfiguration.java
similarity index 100%
rename from 
components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentConfiguration.java
rename to 
components-starter/camel-cxf-rest-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentConfiguration.java
diff --git 
a/components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentConverter.java
 
b/components-starter/camel-cxf-rest-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentConverter.java
similarity index 100%
rename from 
components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentConverter.java
rename to 
components-starter/camel-cxf-rest-starter/src/main/java/org/apache/camel/component/cxf/jaxrs/springboot/CxfRsComponentConverter.java
diff --git 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/LICENSE.txt 
b/components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/LICENSE.txt
similarity index 100%
copy from 
components-starter/camel-cxf-starter/src/main/resources/META-INF/LICENSE.txt
copy to 
components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/LICENSE.txt
diff --git 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/NOTICE.txt 
b/components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/NOTICE.txt
similarity index 100%
copy from 
components-starter/camel-cxf-starter/src/main/resources/META-INF/NOTICE.txt
copy to 
components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/NOTICE.txt
diff --git 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.factories
 
b/components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/spring.factories
similarity index 89%
rename from 
components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.factories
rename to 
components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/spring.factories
index 809d734871c..dc778af6688 100644
--- 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.factories
+++ 
b/components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/spring.factories
@@ -15,10 +15,8 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.camel.component.cxf.springboot.CxfComponentAutoConfiguration,\
 
org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentAutoConfiguration,\
 org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConverter,\
-org.apache.camel.component.cxf.springboot.CxfComponentConverter
 
 
 
diff --git 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.provides
 
b/components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/spring.provides
similarity index 97%
copy from 
components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.provides
copy to 
components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/spring.provides
index fbd6fbf20a1..67fb997b5e8 100644
--- 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.provides
+++ 
b/components-starter/camel-cxf-rest-starter/src/main/resources/META-INF/spring.provides
@@ -14,4 +14,4 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-provides: camel-cxf
+provides: camel-cxf-rest
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomException.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomException.java
new file mode 100644
index 00000000000..1b34d8d6bf5
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomException.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxrs.testbean;
+
+public class CustomException extends Exception {
+
+    private static final long serialVersionUID = 1L;
+
+    public CustomException(String message) {
+        super(message);
+    }
+
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/Customer.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/Customer.java
new file mode 100644
index 00000000000..e0b740c8761
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/Customer.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxrs.testbean;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.camel.util.ObjectHelper;
+
+@XmlRootElement(name = "Customer")
+public class Customer {
+    private long id;
+    private String name;
+
+    public Customer() {
+    }
+
+    public Customer(long id, String name) {
+        setId(id);
+        setName(name);
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (int) (id ^ (id >>> 32));
+        result = prime * result + ((name == null) ? 0 : name.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Customer)) {
+            return false;
+        }
+
+        if (this == obj) {
+            return true;
+        }
+
+        Customer other = (Customer) obj;
+        return id == other.id && ObjectHelper.equal(name, other.name);
+    }
+
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerService.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerService.java
new file mode 100644
index 00000000000..c30fd82dd79
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerService.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxrs.testbean;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Response;
+
+import org.apache.cxf.common.util.StringUtils;
+
+@Path("/customerservice/")
+public class CustomerService {
+    private final AtomicLong currentId = new AtomicLong(123L);
+    private final Map<Long, Customer> customers = new ConcurrentHashMap<>();
+    private final Map<Long, Order> orders = new ConcurrentHashMap<>();
+
+    public CustomerService() {
+        init();
+    }
+
+    @GET
+    @Path("/customers/{id}/")
+    public Customer getCustomer(@PathParam("id") String id) {
+        long idNumber = Long.parseLong(id);
+        Customer c = customers.get(idNumber);
+        return c;
+    }
+
+    @GET
+    @Path("/customers")
+    public Customer getCustomerByQueryParam(@QueryParam("id") String id) {
+        long idNumber = Long.parseLong(id);
+        Customer c = customers.get(idNumber);
+        return c;
+    }
+
+    @GET
+    @Path("/customers/")
+    @Produces("application/xml")
+    public List<Customer> getCustomers() {
+        List<Customer> list = new ArrayList<>(customers.values());
+        return list;
+    }
+
+    @PUT
+    @Path("/customers/")
+    public Response updateCustomer(Customer customer) {
+        Customer c = customers.get(customer.getId());
+        Response r;
+        if (c != null) {
+            customers.put(customer.getId(), customer);
+            r = Response.ok().build();
+        } else {
+            r = Response.status(406).entity("Cannot find the 
customer!").build();
+        }
+
+        return r;
+    }
+
+    @POST
+    @Path("/customers/")
+    public Response addCustomer(Customer customer) {
+        if (StringUtils.isEmpty(customer.getName())) {
+            return Response.status(422).build();
+        }
+
+        customer.setId(currentId.incrementAndGet());
+
+        customers.put(customer.getId(), customer);
+
+        return Response.ok(customer).build();
+    }
+
+    @POST
+    @Path("/customersUniqueResponseCode/")
+    public Response addCustomerUniqueResponseCode(Customer customer) {
+        customer.setId(currentId.incrementAndGet());
+
+        customers.put(customer.getId(), customer);
+
+        return Response.status(201).entity(customer).build();
+    }
+
+    @DELETE
+    @Path("/customers/{id}/")
+    public Response deleteCustomer(@PathParam("id") String id) {
+        long idNumber = Long.parseLong(id);
+        Customer c = customers.get(idNumber);
+
+        Response r;
+        if (c != null) {
+            r = Response.ok().build();
+            customers.remove(idNumber);
+        } else {
+            r = Response.notModified().build();
+        }
+        if (idNumber == currentId.get()) {
+            currentId.decrementAndGet();
+        }
+        return r;
+    }
+
+    @Path("/orders/{orderId}/")
+    public Order getOrder(@PathParam("orderId") String orderId) {
+        long idNumber = Long.parseLong(orderId);
+        Order c = orders.get(idNumber);
+        return c;
+    }
+
+    final void init() {
+        Customer c = new Customer();
+        c.setName("John");
+        c.setId(123);
+        customers.put(c.getId(), c);
+
+        c = new Customer();
+        c.setName("Dan");
+        c.setId(113);
+        customers.put(c.getId(), c);
+
+        Order o = new Order();
+        o.setDescription("order 223");
+        o.setId(223);
+        orders.put(o.getId(), o);
+    }
+
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceNoAnnotations.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceNoAnnotations.java
new file mode 100644
index 00000000000..fa9a395cb96
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceNoAnnotations.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxrs.testbean;
+
+// START SNIPPET: example
+public interface CustomerServiceNoAnnotations {
+
+    Customer getCustomer(String id);
+
+}
+// END SNIPPET: example
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java
new file mode 100644
index 00000000000..e36313746a1
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxrs.testbean;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+
+// START SNIPPET: example
+@Path("/customerservice/")
+public interface CustomerServiceResource {
+
+    @GET
+    @Path("/customers/{id}/")
+    Customer getCustomer(@PathParam("id") String id);
+
+    @PUT
+    @Path("/customers/")
+    Response updateCustomer(Customer customer);
+
+    @Path("/{id}")
+    @PUT()
+    @Consumes({
+            "application/xml", "text/plain",
+            "application/json" })
+    @Produces({
+            "application/xml", "text/plain",
+            "application/json" })
+    Object invoke(
+            @PathParam("id") String id,
+            String payload);
+}
+// END SNIPPET: example
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/EchoService.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/EchoService.java
new file mode 100644
index 00000000000..abba335cd10
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/EchoService.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxrs.testbean;
+
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Cookie;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.NewCookie;
+import javax.ws.rs.core.Response;
+
+@Path("/echoservice/")
+public class EchoService {
+    @Context
+    private HttpHeaders headers;
+
+    @POST
+    @Path("/echo/")
+    public Response echo(String string) {
+        Cookie fooCookie = headers.getCookies().get("foo");
+        if (fooCookie != null && "bar".equals(fooCookie.getValue())) {
+            return Response.ok("Old " + string).build();
+        }
+        return Response.ok("New " + string).cookie(new NewCookie("foo", "bar", 
"/", null, 1, null, -1, false)).build();
+    }
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/Order.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/Order.java
new file mode 100644
index 00000000000..0ac90a8e5bc
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/Order.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxrs.testbean;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "Order")
+public class Order {
+    private long id;
+    private String description;
+    private Map<Long, Product> products = new HashMap<>();
+
+    public Order() {
+        init();
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String d) {
+        this.description = d;
+    }
+
+    @GET
+    @Path("products/{productId}/")
+    public Product getProduct(@PathParam("productId") int productId) {
+        Product p = products.get(Long.valueOf(productId));
+        return p;
+    }
+
+    final void init() {
+        Product p = new Product();
+        p.setId(323);
+        p.setDescription("product 323");
+        products.put(p.getId(), p);
+    }
+
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/Product.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/Product.java
new file mode 100644
index 00000000000..d363af1055e
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/Product.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxrs.testbean;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "Product")
+public class Product {
+    private long id;
+    private String description;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String d) {
+        this.description = d;
+    }
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/ServiceUtil.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/ServiceUtil.java
new file mode 100644
index 00000000000..0e2a1b85f45
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/ServiceUtil.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxrs.testbean;
+
+public class ServiceUtil {
+    public String invoke(String id, String payload) {
+        return id + payload;
+    }
+
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/rest/springboot/CxfRsConsumerWithBeanTest.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/rest/springboot/CxfRsConsumerWithBeanTest.java
new file mode 100644
index 00000000000..58b63dc49f8
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/rest/springboot/CxfRsConsumerWithBeanTest.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.rest.springboot;
+
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.common.CXFTestSupport;
+import org.apache.camel.component.cxf.jaxrs.testbean.ServiceUtil;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.annotation.DirtiesContext;
+import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
+
+
+@DirtiesContext
+@CamelSpringBootTest
+@SpringBootTest(
+    classes = {
+        CamelAutoConfiguration.class,
+        CxfRsConsumerWithBeanTest.class,
+        CxfRsConsumerWithBeanTest.TestConfiguration.class
+    }
+)
+public class CxfRsConsumerWithBeanTest {
+
+    private static final String CXT = CXFTestSupport.getPort1() + 
"/CxfRsConsumerWithBeanTest";
+    private static final String CXF_RS_ENDPOINT_URI
+            = "cxfrs://http://localhost:"; + CXT
+              + 
"/rest?resourceClasses=org.apache.camel.component.cxf.jaxrs.testbean.CustomerServiceResource";
+    private static final String CXF_RS_ENDPOINT_URI_2
+            = "cxfrs://http://localhost:"; + CXT
+              + 
"/rest2?resourceClasses=org.apache.camel.component.cxf.jaxrs.testbean.CustomerServiceResource";
+
+    @Bean("service")
+    protected ServiceUtil bindToRegistry() {
+        return new ServiceUtil();
+    }
+    
+    @Test
+    public void testPutConsumer() throws Exception {
+        sendPutRequest("http://localhost:"; + CXT + 
"/rest/customerservice/c20");
+        sendPutRequest("http://localhost:"; + CXT + 
"/rest2/customerservice/c20");
+    }
+
+    private void sendPutRequest(String uri) throws Exception {
+        HttpPut put = new HttpPut(uri);
+        StringEntity entity = new StringEntity("string");
+        entity.setContentType("text/plain");
+        put.setEntity(entity);
+        CloseableHttpClient httpclient = HttpClientBuilder.create().build();
+
+        try {
+            HttpResponse response = httpclient.execute(put);
+            assertEquals(200, response.getStatusLine().getStatusCode());
+            assertEquals("c20string", 
EntityUtils.toString(response.getEntity()));
+        } finally {
+            httpclient.close();
+        }
+    }
+    
+    // *************************************
+    // Config
+    // *************************************
+
+    @Configuration
+    public class TestConfiguration {
+
+        @Bean
+        public RouteBuilder routeBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() {
+
+                    
from(CXF_RS_ENDPOINT_URI).to("bean://service?method=invoke(${body[0]}, 
${body[1]})");
+                    from(CXF_RS_ENDPOINT_URI_2).bean(ServiceUtil.class, 
"invoke(${body[0]}, ${body[1]})");
+                }
+            };
+        }
+    }
+    
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/rest/springboot/CxfRsProducerSessionTest.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/rest/springboot/CxfRsProducerSessionTest.java
new file mode 100644
index 00000000000..d44fcb7b514
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/rest/springboot/CxfRsProducerSessionTest.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.rest.springboot;
+
+
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.cxf.common.message.CxfConstants;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ImportResource;
+import org.springframework.test.annotation.DirtiesContext;
+import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
+
+@DirtiesContext
+@CamelSpringBootTest
+@SpringBootTest(classes = {
+                           CamelAutoConfiguration.class, 
+                           CxfRsProducerSessionTest.class
+    },
+    properties = {
+              
"camel.springboot.routes-include-pattern=file:src/test/resources/routes/CxfRsSpringProducerSessionRoute.xml"}
+)
+    
+@ImportResource({
+                 "classpath:routes/CxfRsSpringProducerSession.xml"
+})
+public class CxfRsProducerSessionTest {
+
+    private static int port1 = 12261;
+    private static int port2 = 12262;
+
+    public int getPort1() {
+        return port1;
+    }
+
+    public int getPort2() {
+        return port2;
+    }
+
+    @Test
+    public void testNoSessionProxy() {
+        String response = sendMessage("direct://proxy", "World", 
Boolean.FALSE).getMessage().getBody(String.class);
+        assertEquals("New New World", response);
+        response = sendMessage("direct://proxy", "World", 
Boolean.FALSE).getMessage().getBody(String.class);
+        assertEquals("New New World", response);
+    }
+
+    @Test
+    public void testExchangeSessionProxy() {
+        String response = sendMessage("direct://proxyexchange", "World", 
Boolean.FALSE).getMessage().getBody(String.class);
+        assertEquals("Old New World", response);
+        response = sendMessage("direct://proxyexchange", "World", 
Boolean.FALSE).getMessage().getBody(String.class);
+        assertEquals("Old New World", response);
+    }
+
+    @Test
+    public void testInstanceSession() {
+        String response = sendMessage("direct://proxyinstance", "World", 
Boolean.FALSE).getMessage().getBody(String.class);
+        assertEquals("Old New World", response);
+        response = sendMessage("direct://proxyinstance", "World", 
Boolean.FALSE).getMessage().getBody(String.class);
+        assertEquals("Old Old World", response);
+        // we do the instance tests for proxy and http in one test because 
order
+        // matters here
+        response = sendMessage("direct://httpinstance", "World", 
Boolean.TRUE).getMessage().getBody(String.class);
+        assertEquals("Old Old World", response);
+    }
+
+    @Test
+    public void testNoSessionHttp() {
+        String response = sendMessage("direct://http", "World", 
Boolean.TRUE).getMessage().getBody(String.class);
+        assertEquals("New New World", response);
+        response = sendMessage("direct://http", "World", 
Boolean.TRUE).getMessage().getBody(String.class);
+        assertEquals("New New World", response);
+    }
+
+    @Test
+    public void testExchangeSessionHttp() {
+        String response = sendMessage("direct://httpexchange", "World", 
Boolean.TRUE).getMessage().getBody(String.class);
+        assertEquals("Old New World", response);
+        response = sendMessage("direct://httpexchange", "World", 
Boolean.TRUE).getMessage().getBody(String.class);
+        assertEquals("Old New World", response);
+    }
+
+    @Autowired
+    ProducerTemplate template;
+    
+    private Exchange sendMessage(String endpoint, String body, Boolean 
httpApi) {
+        Exchange exchange = template.send(endpoint, new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                exchange.setPattern(ExchangePattern.InOut);
+                Message inMessage = exchange.getIn();
+                inMessage.setHeader(CxfConstants.OPERATION_NAME, "echo");
+                inMessage.setHeader(Exchange.HTTP_METHOD, "POST");
+                inMessage.setHeader(Exchange.HTTP_PATH, "/echoservice/echo");
+                inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, 
httpApi);
+                inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, 
String.class);
+                inMessage.setBody(body);
+            }
+        });
+        return exchange;
+    }
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/rest/springboot/CxfRsStreamCacheTest.java
 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/rest/springboot/CxfRsStreamCacheTest.java
new file mode 100644
index 00000000000..e6e6cbef15a
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/java/org/apache/camel/component/cxf/rest/springboot/CxfRsStreamCacheTest.java
@@ -0,0 +1,160 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.rest.springboot;
+
+
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedExchange;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.common.CXFTestSupport;
+import org.apache.camel.component.cxf.jaxrs.testbean.Customer;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.converter.stream.CachedOutputStream;
+import org.apache.camel.spi.Synchronization;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.annotation.DirtiesContext;
+import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
+
+
+@DirtiesContext
+@CamelSpringBootTest
+@SpringBootTest(
+    classes = {
+        CamelAutoConfiguration.class,
+        CxfRsStreamCacheTest.class,
+        CxfRsStreamCacheTest.TestConfiguration.class
+    }
+)
+public class CxfRsStreamCacheTest {
+
+    private static final String PUT_REQUEST = 
"<Customer><name>Mary</name><id>123</id></Customer>";
+    private static final String CONTEXT = "/CxfRsStreamCacheTest";
+    private static final String CXT = CXFTestSupport.getPort1() + CONTEXT;
+    private static final String RESPONSE = "<pong xmlns=\"test/service\"/>";
+
+    private String cxfRsEndpointUri = "cxfrs://http://localhost:"; + CXT + 
"/rest?synchronous=" + isSynchronous()
+                                      + 
"&dataFormat=PAYLOAD&resourceClasses=org.apache.camel.component.cxf.jaxrs.testbean.CustomerService";
+
+    @Autowired
+    ProducerTemplate template;
+    
+    @EndpointInject("mock:result")
+    MockEndpoint mock;
+    
+    @EndpointInject("mock:onComplete")
+    MockEndpoint onComplete;
+    
+    @Test
+    public void testPutConsumer() throws Exception {
+        
+        mock.expectedMessageCount(1);
+        mock.message(0).body().isInstanceOf(Customer.class);
+
+        
+        onComplete.expectedMessageCount(1);
+
+        HttpPut put = new HttpPut("http://localhost:"; + CXT + 
"/rest/customerservice/customers");
+        StringEntity entity = new StringEntity(PUT_REQUEST, "ISO-8859-1");
+        entity.setContentType("text/xml; charset=ISO-8859-1");
+        put.addHeader("test", "header1;header2");
+        put.setEntity(entity);
+        CloseableHttpClient httpclient = HttpClientBuilder.create().build();
+
+        try {
+            HttpResponse response = httpclient.execute(put);
+            assertEquals(200, response.getStatusLine().getStatusCode());
+            assertEquals(RESPONSE, EntityUtils.toString(response.getEntity()));
+        } finally {
+            httpclient.close();
+        }
+
+        mock.assertIsSatisfied();
+        onComplete.assertIsSatisfied();
+
+    }
+
+    protected boolean isSynchronous() {
+        return false;
+    }
+
+    
+    // *************************************
+    // Config
+    // *************************************
+
+    @Configuration
+    public class TestConfiguration {
+
+        @Bean
+        public RouteBuilder routeBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() {
+
+                    getContext().setStreamCaching(true);
+                    
getContext().getStreamCachingStrategy().setSpoolThreshold(1L);
+                    errorHandler(noErrorHandler());
+
+                    from(cxfRsEndpointUri)
+                            // should be able to convert to Customer
+                            .convertBodyTo(Customer.class)
+                            .to("mock:result")
+                            .process(exchange -> {
+                                // respond with OK
+                                CachedOutputStream cos = new 
CachedOutputStream(exchange);
+                                cos.write(RESPONSE.getBytes("UTF-8"));
+                                cos.close();
+                                
exchange.getMessage().setBody(cos.newStreamCache());
+
+                                
exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                                    @Override
+                                    public void onComplete(Exchange exchange) {
+                                        template.sendBody("mock:onComplete", 
"");
+                                    }
+
+                                    @Override
+                                    public void onFailure(Exchange exchange) {
+
+                                    }
+                                });
+                            });
+
+                }
+            };
+        }
+    }
+    
+}
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/resources/routes/CxfRsSpringProducerSession.xml
 
b/components-starter/camel-cxf-rest-starter/src/test/resources/routes/CxfRsSpringProducerSession.xml
new file mode 100644
index 00000000000..92c38fe974c
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/resources/routes/CxfRsSpringProducerSession.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:cxf="http://camel.apache.org/schema/cxf/jaxrs";
+       xmlns:jaxrs="http://cxf.apache.org/jaxrs";
+       xmlns:util="http://www.springframework.org/schema/util";
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.springframework.org/schema/util 
http://www.springframework.org/schema/util/spring-util.xsd
+       http://camel.apache.org/schema/cxf/jaxrs 
http://camel.apache.org/schema/cxf/jaxrs/camel-cxf.xsd
+       http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
+       http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd
+    ">
+  <bean 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
+
+  <jaxrs:server id="restService"
+                       
address="http://127.0.0.1:12261/CxfRsProducerSessionTest/"; 
+                       staticSubresourceResolution="true">
+    <jaxrs:serviceBeans>
+      <ref bean="echoService"/>
+    </jaxrs:serviceBeans>       
+  </jaxrs:server>
+  
+  <bean id="echoService" 
class="org.apache.camel.component.cxf.jaxrs.testbean.EchoService" />
+
+  <cxf:rsClient id="rsClientProxy" 
address="http://127.0.0.1:12261/CxfRsProducerSessionTest/";
+    serviceClass="org.apache.camel.component.cxf.jaxrs.testbean.EchoService"
+    loggingFeatureEnabled="true" />
+   
+  <cxf:rsClient id="rsClientHttp" 
address="http://127.0.0.1:12261/CxfRsProducerSessionTest/"/>
+
+
+  <bean id="instanceCookieHandler" 
class="org.apache.camel.http.base.cookie.InstanceCookieHandler"/>
+  <bean id="exchangeCookieHandler" 
class="org.apache.camel.http.base.cookie.ExchangeCookieHandler"/>
+</beans>
diff --git 
a/components-starter/camel-cxf-rest-starter/src/test/resources/routes/CxfRsSpringProducerSessionRoute.xml
 
b/components-starter/camel-cxf-rest-starter/src/test/resources/routes/CxfRsSpringProducerSessionRoute.xml
new file mode 100644
index 00000000000..76a87228f48
--- /dev/null
+++ 
b/components-starter/camel-cxf-rest-starter/src/test/resources/routes/CxfRsSpringProducerSessionRoute.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+
+    <!-- START SNIPPET: e1 -->
+  <routes id="camel" xmlns="http://camel.apache.org/schema/spring";>
+    <route>
+       <from uri="direct://proxy"/>
+       <to uri="cxfrs://bean://rsClientProxy?synchronous=true"/>
+       <convertBodyTo type="java.lang.String"/>
+       <to uri="cxfrs://bean://rsClientProxy?synchronous=true"/>
+    </route>
+    <route>
+       <from uri="direct://proxyinstance"/>
+       <to 
uri="cxfrs://bean://rsClientProxy?cookieHandler=#instanceCookieHandler&amp;synchronous=true"/>
+       <convertBodyTo type="java.lang.String"/>
+       <to 
uri="cxfrs://bean://rsClientProxy?cookieHandler=#instanceCookieHandler&amp;synchronous=true"/>
+    </route>
+    <route>
+       <from uri="direct://proxyexchange"/>
+       <to 
uri="cxfrs://bean://rsClientProxy?cookieHandler=#exchangeCookieHandler&amp;synchronous=true"/>
+       <convertBodyTo type="java.lang.String"/>
+       <to 
uri="cxfrs://bean://rsClientProxy?cookieHandler=#exchangeCookieHandler&amp;synchronous=true"/>
+    </route>
+    <route>
+       <from uri="direct://http"/>
+       <to uri="cxfrs://bean://rsClientHttp?synchronous=true"/>
+       <convertBodyTo type="java.lang.String"/>
+       <to uri="cxfrs://bean://rsClientHttp?synchronous=true"/>
+    </route>
+    <route>
+       <from uri="direct://httpinstance"/>
+       <to 
uri="cxfrs://bean://rsClientHttp?cookieHandler=#instanceCookieHandler&amp;synchronous=true"/>
+       <convertBodyTo type="java.lang.String"/>
+       <to 
uri="cxfrs://bean://rsClientHttp?cookieHandler=#instanceCookieHandler&amp;synchronous=true"/>
+    </route>
+    <route>
+       <from uri="direct://httpexchange"/>
+       <to 
uri="cxfrs://bean://rsClientHttp?cookieHandler=#exchangeCookieHandler&amp;synchronous=true"/>
+       <convertBodyTo type="java.lang.String"/>
+       <to 
uri="cxfrs://bean://rsClientHttp?cookieHandler=#exchangeCookieHandler&amp;synchronous=true"/>
+    </route>
+  </routes>
diff --git a/components-starter/camel-cxf-starter/pom.xml 
b/components-starter/camel-cxf-soap-starter/pom.xml
similarity index 56%
rename from components-starter/camel-cxf-starter/pom.xml
rename to components-starter/camel-cxf-soap-starter/pom.xml
index 17ded9eb7c2..b15c4ded1cb 100644
--- a/components-starter/camel-cxf-starter/pom.xml
+++ b/components-starter/camel-cxf-soap-starter/pom.xml
@@ -24,7 +24,7 @@
     <artifactId>components-starter</artifactId>
     <version>3.18.0-SNAPSHOT</version>
   </parent>
-  <artifactId>camel-cxf-starter</artifactId>
+  <artifactId>camel-cxf-soap-starter</artifactId>
   <packaging>jar</packaging>
   <name>Camel SB Starters :: CXF</name>
   <description>Spring-Boot Starter for Camel CXF support</description>
@@ -36,9 +36,20 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
-      <artifactId>camel-cxf</artifactId>
+      <artifactId>camel-cxf-spring-soap</artifactId>
       <version>${camel-version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-transports-http-undertow</artifactId>
+      <version>${cxf-version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-http</artifactId>
+      <scope>test</scope>
+    </dependency>
     <!--START OF GENERATED CODE-->
     <dependency>
       <groupId>org.apache.camel.springboot</groupId>
@@ -46,4 +57,35 @@
     </dependency>
     <!--END OF GENERATED CODE-->
   </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-codegen-plugin</artifactId>
+        <version>${cxf-version}</version>
+        <executions>
+          <execution>
+            <id>generate-sources</id>
+            <phase>generate-sources</phase>
+            <configuration>
+              <fork>${cxf.codegenplugin.forkmode}</fork>
+              <additionalJvmArgs>${cxf.codegen.jvmArgs}</additionalJvmArgs>
+              
<testSourceRoot>${basedir}/target/generated/src/test/java</testSourceRoot>
+              <defaultOptions>
+                <frontEnd>jaxws21</frontEnd>
+              </defaultOptions>
+              <wsdlOptions>
+                <wsdlOption>
+                  <wsdl>${basedir}/src/test/resources/MultiPartTest.wsdl</wsdl>
+                </wsdlOption>
+              </wsdlOptions>
+            </configuration>
+            <goals>
+              <goal>wsdl2java</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
 </project>
diff --git 
a/components-starter/camel-cxf-soap-starter/src/main/docs/cxf-soap.json 
b/components-starter/camel-cxf-soap-starter/src/main/docs/cxf-soap.json
new file mode 100644
index 00000000000..af3ebb0a3d1
--- /dev/null
+++ b/components-starter/camel-cxf-soap-starter/src/main/docs/cxf-soap.json
@@ -0,0 +1,69 @@
+{
+  "groups": [
+    {
+      "name": "camel.component.cxf",
+      "type": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration"
+    },
+    {
+      "name": "camel.component.cxf.customizer",
+      "type": 
"org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon$CustomizerProperties",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration",
+      "sourceMethod": "getCustomizer()"
+    }
+  ],
+  "properties": [
+    {
+      "name": "camel.component.cxf.allow-streaming",
+      "type": "java.lang.Boolean",
+      "description": "This option controls whether the CXF component, when 
running in PAYLOAD mode, will DOM parse the incoming messages into DOM Elements 
or keep the payload as a javax.xml.transform.Source object that would allow 
streaming in some cases.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration"
+    },
+    {
+      "name": "camel.component.cxf.autowired-enabled",
+      "type": "java.lang.Boolean",
+      "description": "Whether autowiring is enabled. This is used for 
automatic autowiring options (the option must be marked as autowired) by 
looking up in the registry to find if there is a single instance of matching 
type, which then gets configured on the component. This can be used for 
automatic configuring JDBC data sources, JMS connection factories, AWS Clients, 
etc.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration",
+      "defaultValue": true
+    },
+    {
+      "name": "camel.component.cxf.bridge-error-handler",
+      "type": "java.lang.Boolean",
+      "description": "Allows for bridging the consumer to the Camel routing 
Error Handler, which mean any exceptions occurred while the consumer is trying 
to pickup incoming messages, or the likes, will now be processed as a message 
and handled by the routing Error Handler. By default the consumer will use the 
org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be 
logged at WARN or ERROR level and ignored.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration",
+      "defaultValue": false
+    },
+    {
+      "name": "camel.component.cxf.customizer.enabled",
+      "type": "java.lang.Boolean",
+      "sourceType": 
"org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon$CustomizerProperties"
+    },
+    {
+      "name": "camel.component.cxf.enabled",
+      "type": "java.lang.Boolean",
+      "description": "Whether to enable auto configuration of the cxf 
component. This is enabled by default.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration"
+    },
+    {
+      "name": "camel.component.cxf.header-filter-strategy",
+      "type": "org.apache.camel.spi.HeaderFilterStrategy",
+      "description": "To use a custom 
org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel 
message. The option is a org.apache.camel.spi.HeaderFilterStrategy type.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration"
+    },
+    {
+      "name": "camel.component.cxf.lazy-start-producer",
+      "type": "java.lang.Boolean",
+      "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 producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and starting the [...]
+      "sourceType": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration",
+      "defaultValue": false
+    },
+    {
+      "name": "camel.component.cxf.use-global-ssl-context-parameters",
+      "type": "java.lang.Boolean",
+      "description": "Enable usage of global SSL context parameters.",
+      "sourceType": 
"org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConfiguration",
+      "defaultValue": false
+    }
+  ],
+  "hints": []
+}
\ No newline at end of file
diff --git a/components-starter/camel-cxf-starter/src/main/docs/cxf.json 
b/components-starter/camel-cxf-soap-starter/src/main/docs/cxf.json
similarity index 52%
rename from components-starter/camel-cxf-starter/src/main/docs/cxf.json
rename to components-starter/camel-cxf-soap-starter/src/main/docs/cxf.json
index fc6a3a0330d..30dd2efb94b 100644
--- a/components-starter/camel-cxf-starter/src/main/docs/cxf.json
+++ b/components-starter/camel-cxf-soap-starter/src/main/docs/cxf.json
@@ -10,17 +10,6 @@
       "type": 
"org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon$CustomizerProperties",
       "sourceType": 
"org.apache.camel.component.cxf.springboot.CxfComponentConfiguration",
       "sourceMethod": "getCustomizer()"
-    },
-    {
-      "name": "camel.component.cxfrs",
-      "type": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
-      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration"
-    },
-    {
-      "name": "camel.component.cxfrs.customizer",
-      "type": 
"org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon$CustomizerProperties",
-      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
-      "sourceMethod": "getCustomizer()"
     }
   ],
   "properties": [
@@ -74,52 +63,7 @@
       "description": "Enable usage of global SSL context parameters.",
       "sourceType": 
"org.apache.camel.component.cxf.springboot.CxfComponentConfiguration",
       "defaultValue": false
-    },
-    {
-      "name": "camel.component.cxfrs.autowired-enabled",
-      "type": "java.lang.Boolean",
-      "description": "Whether autowiring is enabled. This is used for 
automatic autowiring options (the option must be marked as autowired) by 
looking up in the registry to find if there is a single instance of matching 
type, which then gets configured on the component. This can be used for 
automatic configuring JDBC data sources, JMS connection factories, AWS Clients, 
etc.",
-      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
-      "defaultValue": true
-    },
-    {
-      "name": "camel.component.cxfrs.bridge-error-handler",
-      "type": "java.lang.Boolean",
-      "description": "Allows for bridging the consumer to the Camel routing 
Error Handler, which mean any exceptions occurred while the consumer is trying 
to pickup incoming messages, or the likes, will now be processed as a message 
and handled by the routing Error Handler. By default the consumer will use the 
org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be 
logged at WARN or ERROR level and ignored.",
-      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
-      "defaultValue": false
-    },
-    {
-      "name": "camel.component.cxfrs.customizer.enabled",
-      "type": "java.lang.Boolean",
-      "sourceType": 
"org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon$CustomizerProperties"
-    },
-    {
-      "name": "camel.component.cxfrs.enabled",
-      "type": "java.lang.Boolean",
-      "description": "Whether to enable auto configuration of the cxfrs 
component. This is enabled by default.",
-      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration"
-    },
-    {
-      "name": "camel.component.cxfrs.header-filter-strategy",
-      "type": "org.apache.camel.spi.HeaderFilterStrategy",
-      "description": "To use a custom 
org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel 
message. The option is a org.apache.camel.spi.HeaderFilterStrategy type.",
-      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration"
-    },
-    {
-      "name": "camel.component.cxfrs.lazy-start-producer",
-      "type": "java.lang.Boolean",
-      "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 producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and starting the [...]
-      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
-      "defaultValue": false
-    },
-    {
-      "name": "camel.component.cxfrs.use-global-ssl-context-parameters",
-      "type": "java.lang.Boolean",
-      "description": "Enable usage of global SSL context parameters.",
-      "sourceType": 
"org.apache.camel.component.cxf.jaxrs.springboot.CxfRsComponentConfiguration",
-      "defaultValue": false
     }
   ],
   "hints": []
-}
\ No newline at end of file
+}
diff --git 
a/components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/springboot/CxfComponentAutoConfiguration.java
 
b/components-starter/camel-cxf-soap-starter/src/main/java/org/apache/camel/component/cxf/jaxws/springboot/CxfComponentAutoConfiguration.java
similarity index 96%
rename from 
components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/springboot/CxfComponentAutoConfiguration.java
rename to 
components-starter/camel-cxf-soap-starter/src/main/java/org/apache/camel/component/cxf/jaxws/springboot/CxfComponentAutoConfiguration.java
index 50da779966b..5018d3bc2e4 100644
--- 
a/components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/springboot/CxfComponentAutoConfiguration.java
+++ 
b/components-starter/camel-cxf-soap-starter/src/main/java/org/apache/camel/component/cxf/jaxws/springboot/CxfComponentAutoConfiguration.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.cxf.springboot;
+package org.apache.camel.component.cxf.jaxws.springboot;
 
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
-import org.apache.camel.component.cxf.CxfComponent;
+import org.apache.camel.component.cxf.jaxws.CxfComponent;
 import org.apache.camel.spi.ComponentCustomizer;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
 import org.apache.camel.spring.boot.ComponentConfigurationProperties;
diff --git 
a/components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/springboot/CxfComponentConfiguration.java
 
b/components-starter/camel-cxf-soap-starter/src/main/java/org/apache/camel/component/cxf/jaxws/springboot/CxfComponentConfiguration.java
similarity index 98%
rename from 
components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/springboot/CxfComponentConfiguration.java
rename to 
components-starter/camel-cxf-soap-starter/src/main/java/org/apache/camel/component/cxf/jaxws/springboot/CxfComponentConfiguration.java
index a933b0b15de..6f3ea59204f 100644
--- 
a/components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/springboot/CxfComponentConfiguration.java
+++ 
b/components-starter/camel-cxf-soap-starter/src/main/java/org/apache/camel/component/cxf/jaxws/springboot/CxfComponentConfiguration.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.cxf.springboot;
+package org.apache.camel.component.cxf.jaxws.springboot;
 
 import javax.annotation.Generated;
 import org.apache.camel.spi.HeaderFilterStrategy;
diff --git 
a/components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/springboot/CxfComponentConverter.java
 
b/components-starter/camel-cxf-soap-starter/src/main/java/org/apache/camel/component/cxf/jaxws/springboot/CxfComponentConverter.java
similarity index 97%
rename from 
components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/springboot/CxfComponentConverter.java
rename to 
components-starter/camel-cxf-soap-starter/src/main/java/org/apache/camel/component/cxf/jaxws/springboot/CxfComponentConverter.java
index be143876911..63046f43640 100644
--- 
a/components-starter/camel-cxf-starter/src/main/java/org/apache/camel/component/cxf/springboot/CxfComponentConverter.java
+++ 
b/components-starter/camel-cxf-soap-starter/src/main/java/org/apache/camel/component/cxf/jaxws/springboot/CxfComponentConverter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.cxf.springboot;
+package org.apache.camel.component.cxf.jaxws.springboot;
 
 import java.util.LinkedHashSet;
 import java.util.Set;
diff --git 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/LICENSE.txt 
b/components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/LICENSE.txt
similarity index 100%
rename from 
components-starter/camel-cxf-starter/src/main/resources/META-INF/LICENSE.txt
rename to 
components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/LICENSE.txt
diff --git 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/NOTICE.txt 
b/components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/NOTICE.txt
similarity index 100%
rename from 
components-starter/camel-cxf-starter/src/main/resources/META-INF/NOTICE.txt
rename to 
components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/NOTICE.txt
diff --git 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.provides
 
b/components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/spring.factories
similarity index 81%
copy from 
components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.provides
copy to 
components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/spring.factories
index fbd6fbf20a1..e1ec9c35d43 100644
--- 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.provides
+++ 
b/components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/spring.factories
@@ -14,4 +14,9 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-provides: camel-cxf
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.apache.camel.component.cxf.jaxws.springboot.CxfComponentAutoConfiguration,\
+org.apache.camel.component.cxf.jaxws.springboot.CxfComponentConverter
+
+
+
diff --git 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.provides
 
b/components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/spring.provides
similarity index 97%
rename from 
components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.provides
rename to 
components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/spring.provides
index fbd6fbf20a1..13f37ba793e 100644
--- 
a/components-starter/camel-cxf-starter/src/main/resources/META-INF/spring.provides
+++ 
b/components-starter/camel-cxf-soap-starter/src/main/resources/META-INF/spring.provides
@@ -14,4 +14,4 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-provides: camel-cxf
+provides: camel-cxf-soap
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/jaxws/HelloService.java
 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/jaxws/HelloService.java
new file mode 100644
index 00000000000..2b75b4d1d66
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/jaxws/HelloService.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.jaxws;
+
+import java.util.List;
+
+public interface HelloService {
+    String sayHello();
+
+    void ping();
+
+    int getInvocationCount();
+
+    String echo(String text) throws Exception;
+
+    Boolean echoBoolean(Boolean bool);
+
+    String complexParameters(List<String> par1, List<String> par2);
+
+}
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CXFMultiPartTest.java
 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CXFMultiPartTest.java
new file mode 100644
index 00000000000..1b1cd9fed49
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CXFMultiPartTest.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.soap.springboot;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Endpoint;
+import javax.xml.ws.Service;
+
+import org.apache.camel.cxf.multipart.MultiPartInvoke;
+import org.apache.camel.cxf.multipart.types.InE;
+import org.apache.camel.cxf.multipart.types.ObjectFactory;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ImportResource;
+import org.springframework.test.annotation.DirtiesContext;
+import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
+
+@DirtiesContext
+@CamelSpringBootTest
+@SpringBootTest(classes = {
+                           CamelAutoConfiguration.class, 
+                           CXFMultiPartTest.class
+    },
+    properties = {
+              
"camel.springboot.routes-include-pattern=file:src/test/resources/routes/multipartRoute.xml"}
+)
+    
+@ImportResource({
+                 "classpath:routes/MultiPartTest.xml"
+})
+public class CXFMultiPartTest {
+
+    public static final QName SERVICE_NAME = new 
QName("http://camel.apache.org/cxf/multipart";,
+                                                       
"MultiPartInvokeService");
+
+    public static final QName ROUTE_PORT_NAME = new 
QName("http://camel.apache.org/cxf/multipart";,
+                                                          
"MultiPartInvokePort");
+    protected static Endpoint endpoint;
+
+    
+    public void startService() {
+        Object implementor = new MultiPartInvokeImpl();
+        String address = "http://localhost:16231";
+                         + "/CXFMultiPartTest/SoapContext/SoapPort";
+        endpoint = Endpoint.publish(address, implementor);
+
+    }
+
+    
+    public void stopService() {
+        if (endpoint != null) {
+            endpoint.stop();
+        }
+    }
+
+    @Test
+    public void testInvokingServiceFromCXFClient() throws Exception {
+        startService();
+        String reply = invokeMultiPartService("http://localhost:16233";
+                                              + 
"/CXFMultiPartTest/CamelContext/RouterPort", "in0", "in1");
+        assertNotNull(reply, "No response received from service");
+        assertEquals("in0 in1", reply);
+
+        assertNotNull(reply, "No response received from service");
+        assertEquals("in0 in1", reply);
+        stopService();
+    }
+
+    private String invokeMultiPartService(String address, String in0, String 
in1) {
+
+        Service service = Service.create(SERVICE_NAME);
+        service.addPort(ROUTE_PORT_NAME, "http://schemas.xmlsoap.org/soap/";, 
address);
+        MultiPartInvoke multiPartClient = service.getPort(ROUTE_PORT_NAME, 
MultiPartInvoke.class);
+
+        InE e0 = new ObjectFactory().createInE();
+        InE e1 = new ObjectFactory().createInE();
+        e0.setV(in0);
+        e1.setV(in1);
+
+        javax.xml.ws.Holder<InE> h = new javax.xml.ws.Holder<>();
+        javax.xml.ws.Holder<InE> h1 = new javax.xml.ws.Holder<>();
+        multiPartClient.foo(e0, e1, h, h1);
+        return h.value.getV() + " " + h1.value.getV();
+    }
+
+}
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerMessageTest.java
 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerMessageTest.java
new file mode 100644
index 00000000000..45a423bad3e
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerMessageTest.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.soap.springboot;
+
+
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.common.CXFTestSupport;
+import org.apache.camel.component.cxf.jaxws.HelloService;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.annotation.DirtiesContext;
+import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.frontend.ClientFactoryBean;
+import org.apache.cxf.frontend.ClientProxyFactoryBean;
+
+
+@DirtiesContext
+@CamelSpringBootTest
+@SpringBootTest(
+    classes = {
+        CamelAutoConfiguration.class,
+        CxfConsumerMessageTest.class,
+        CxfConsumerMessageTest.TestConfiguration.class
+    }
+)
+public class CxfConsumerMessageTest {
+
+    private static final String TEST_MESSAGE = "Hello World!";
+
+    private static final String ECHO_METHOD = "ns1:echo 
xmlns:ns1=\"http://jaxws.cxf.component.camel.apache.org/\"";;
+
+    private static final String ECHO_RESPONSE = "<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>"
+                                                + 
"<soap:Body><ns1:echoResponse 
xmlns:ns1=\"http://jaxws.cxf.component.camel.apache.org/\";>"
+                                                + "<return 
xmlns=\"http://jaxws.cxf.component.camel.apache.org/\";>echo Hello 
World!</return>"
+                                                + 
"</ns1:echoResponse></soap:Body></soap:Envelope>";
+    private static final String ECHO_BOOLEAN_RESPONSE
+            = "<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>"
+              + "<soap:Body><ns1:echoBooleanResponse 
xmlns:ns1=\"http://jaxws.cxf.component.camel.apache.org/\";>"
+              + "<return 
xmlns=\"http://jaxws.cxf.component.camel.apache.org/\";>true</return>"
+              + "</ns1:echoBooleanResponse></soap:Body></soap:Envelope>";
+
+    protected final String simpleEndpointAddress = "http://localhost:";
+                                                   + CXFTestSupport.getPort1() 
+ "/" + getClass().getSimpleName() + "/test";
+    protected final String simpleEndpointURI = "cxf://" + simpleEndpointAddress
+                                               + 
"?serviceClass=org.apache.camel.component.cxf.jaxws.HelloService";
+
+
+    @Autowired
+    ProducerTemplate template;
+    
+    @Test
+    public void testInvokingServiceFromClient() throws Exception {
+        ClientProxyFactoryBean proxyFactory = new ClientProxyFactoryBean();
+        ClientFactoryBean clientBean = proxyFactory.getClientFactoryBean();
+        clientBean.setAddress(simpleEndpointAddress);
+        clientBean.setServiceClass(HelloService.class);
+        clientBean.setBus(BusFactory.getDefaultBus());
+
+        HelloService client = (HelloService) proxyFactory.create();
+
+        String result = client.echo(TEST_MESSAGE);
+        assertEquals(result, "echo " + TEST_MESSAGE, "We should get the echo 
string result from router");
+
+        Boolean bool = client.echoBoolean(Boolean.TRUE);
+        assertNotNull(bool, "The result should not be null");
+        assertEquals("true", bool.toString(), "We should get the echo boolean 
result from router");
+
+    }
+
+    
+    
+    // *************************************
+    // Config
+    // *************************************
+
+    @Configuration
+    public class TestConfiguration {
+
+        @Bean
+        public RouteBuilder routeBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() {
+                    from(simpleEndpointURI + "&dataFormat=RAW").process(new 
Processor() {
+                        public void process(final Exchange exchange) {
+                            Message in = exchange.getIn();
+                            // check the content-length header is filtered 
+                            Object value = in.getHeader("Content-Length");
+                            assertNull(value, "The Content-Length header 
should be removed");
+                            // Get the request message
+                            String request = in.getBody(String.class);
+                            // Send the response message back
+                            if (request.indexOf(ECHO_METHOD) > 0) {
+                                exchange.getMessage().setBody(ECHO_RESPONSE);
+                            } else { // echoBoolean call
+                                
exchange.getMessage().setBody(ECHO_BOOLEAN_RESPONSE);
+                            }
+
+                        }
+                    });
+                }
+            };
+        }
+    }
+    
+}
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerPayLoadConverterTest.java
 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerPayLoadConverterTest.java
new file mode 100644
index 00000000000..45eec68628d
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerPayLoadConverterTest.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.soap.springboot;
+
+
+import java.util.List;
+
+import javax.xml.transform.Source;
+
+import org.w3c.dom.Element;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.common.CxfPayload;
+import org.apache.camel.converter.jaxp.XmlConverter;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+
+
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.annotation.DirtiesContext;
+import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
+import org.apache.cxf.binding.soap.SoapHeader;
+
+
+@DirtiesContext
+@CamelSpringBootTest
+@SpringBootTest(
+    classes = {
+        CamelAutoConfiguration.class,
+        CxfConsumerPayLoadConverterTest.class,
+        CxfConsumerPayLoadConverterTest.TestConfiguration.class
+    }
+)
+public class CxfConsumerPayLoadConverterTest extends CxfConsumerPayloadTest {
+
+        
+    
+    // *************************************
+    // Config
+    // *************************************
+
+    @Configuration
+    public class TestConfiguration {
+
+        @Bean
+        public RouteBuilder routeBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() {
+                    from(simpleEndpointURI + 
"&dataFormat=PAYLOAD").to("log:info").process(new Processor() {
+                        @SuppressWarnings("unchecked")
+                        public void process(final Exchange exchange) throws 
Exception {
+                            CxfPayload<SoapHeader> requestPayload = 
exchange.getIn().getBody(CxfPayload.class);
+                            List<Source> inElements = 
requestPayload.getBodySources();
+                            // You can use a customer toStringConverter to 
turn a CxfPayLoad message into String as you want                        
+                            String request = 
exchange.getIn().getBody(String.class);
+                            String documentString = ECHO_RESPONSE;
+
+                            Element in = new 
XmlConverter().toDOMElement(inElements.get(0));
+                            // Just check the element namespace
+                            if 
(!in.getNamespaceURI().equals(ELEMENT_NAMESPACE)) {
+                                throw new IllegalArgumentException("Wrong 
element namespace");
+                            }
+                            if (in.getLocalName().equals("echoBoolean")) {
+                                documentString = ECHO_BOOLEAN_RESPONSE;
+                                checkRequest("ECHO_BOOLEAN_REQUEST", request);
+                            } else {
+                                documentString = ECHO_RESPONSE;
+                                checkRequest("ECHO_REQUEST", request);
+                            }
+                            // just set the documentString into to the message 
body
+                            exchange.getMessage().setBody(documentString);
+                        }
+                    });
+                }
+            };
+        }
+    }
+    
+    
+}
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerPayloadTest.java
 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerPayloadTest.java
new file mode 100644
index 00000000000..5cd4405947b
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerPayloadTest.java
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.soap.springboot;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.dom.DOMSource;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.common.CxfPayload;
+import org.apache.camel.converter.jaxp.XmlConverter;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.annotation.DirtiesContext;
+import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
+import org.apache.cxf.binding.soap.SoapHeader;
+
+
+@DirtiesContext
+@CamelSpringBootTest
+@SpringBootTest(
+    classes = {
+        CamelAutoConfiguration.class,
+        CxfConsumerPayloadTest.class,
+        CxfConsumerPayloadTest.TestConfiguration.class
+    }
+)
+public class CxfConsumerPayloadTest extends CxfConsumerMessageTest{
+
+    protected static final String ECHO_RESPONSE = "<ns1:echoResponse 
xmlns:ns1=\"http://jaxws.cxf.component.camel.apache.org/\";>"
+        + "<return xmlns=\"http://jaxws.cxf.component.camel.apache.org/\";>echo 
Hello World!</return>"
+        + "</ns1:echoResponse>";
+protected static final String ECHO_BOOLEAN_RESPONSE
+= "<ns1:echoBooleanResponse 
xmlns:ns1=\"http://jaxws.cxf.component.camel.apache.org/\";>"
++ "<return 
xmlns=\"http://jaxws.cxf.component.camel.apache.org/\";>true</return>"
++ "</ns1:echoBooleanResponse>";
+protected static final String ECHO_REQUEST = "<ns1:echo 
xmlns:ns1=\"http://jaxws.cxf.component.camel.apache.org/\";>"
+       + "<arg0 xmlns=\"http://jaxws.cxf.component.camel.apache.org/\";>Hello 
World!</arg0></ns1:echo>";
+protected static final String ECHO_BOOLEAN_REQUEST
+= "<ns1:echoBoolean 
xmlns:ns1=\"http://jaxws.cxf.component.camel.apache.org/\";>"
++ "<arg0 
xmlns=\"http://jaxws.cxf.component.camel.apache.org/\";>true</arg0></ns1:echoBoolean>";
+
+protected static final String ELEMENT_NAMESPACE = 
"http://jaxws.cxf.component.camel.apache.org/";;
+
+protected void checkRequest(String expect, String request) {
+//REVIST use a more reliable comparison to tolerate some namespaces being 
added to the root element
+if (expect.equals("ECHO_REQUEST")) {
+assertTrue(request.startsWith(ECHO_REQUEST.substring(0, 66))
+&& request.endsWith(ECHO_REQUEST.substring(67)), "Get a wrong request");
+} else {
+assertTrue(request.startsWith(ECHO_BOOLEAN_REQUEST.substring(0, 73))
+&& request.endsWith(ECHO_BOOLEAN_REQUEST.substring(74)), "Get a wrong 
request");
+}
+}
+
+    
+    
+    
+    // *************************************
+    // Config
+    // *************************************
+
+    @Configuration
+    public class TestConfiguration {
+
+        @Bean
+        public RouteBuilder routeBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() {
+                    from(simpleEndpointURI + 
"&dataFormat=PAYLOAD").to("log:info").process(new Processor() {
+                        @SuppressWarnings("unchecked")
+                        public void process(final Exchange exchange) throws 
Exception {
+                            CxfPayload<SoapHeader> requestPayload = 
exchange.getIn().getBody(CxfPayload.class);
+                            List<Source> inElements = 
requestPayload.getBodySources();
+                            List<Source> outElements = new ArrayList<>();
+                            // You can use a customer toStringConverter to 
turn a CxfPayLoad message into String as you want                        
+                            String request = 
exchange.getIn().getBody(String.class);
+                            XmlConverter converter = new XmlConverter();
+                            String documentString = ECHO_RESPONSE;
+
+                            Element in = new 
XmlConverter().toDOMElement(inElements.get(0));
+                            // Just check the element namespace
+                            if 
(!in.getNamespaceURI().equals(ELEMENT_NAMESPACE)) {
+                                throw new IllegalArgumentException("Wrong 
element namespace");
+                            }
+                            if (in.getLocalName().equals("echoBoolean")) {
+                                documentString = ECHO_BOOLEAN_RESPONSE;
+                                checkRequest("ECHO_BOOLEAN_REQUEST", request);
+                            } else {
+                                documentString = ECHO_RESPONSE;
+                                checkRequest("ECHO_REQUEST", request);
+                            }
+                            Document outDocument = 
converter.toDOMDocument(documentString, exchange);
+                            outElements.add(new 
DOMSource(outDocument.getDocumentElement()));
+                            // set the payload header with null
+                            CxfPayload<SoapHeader> responsePayload = new 
CxfPayload<>(null, outElements, null);
+                            exchange.getMessage().setBody(responsePayload);
+                        }
+                    });
+                }
+            };
+        }
+    }
+    
+    
+}
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerProviderTest.java
 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerProviderTest.java
new file mode 100644
index 00000000000..0a98efffa4f
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/CxfConsumerProviderTest.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.soap.springboot;
+
+
+import org.w3c.dom.Node;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.common.CXFTestSupport;
+import org.apache.camel.converter.jaxp.XmlConverter;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.annotation.DirtiesContext;
+import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
+
+
+@DirtiesContext
+@CamelSpringBootTest
+@SpringBootTest(
+    classes = {
+        CamelAutoConfiguration.class,
+        CxfConsumerProviderTest.class,
+        CxfConsumerProviderTest.TestConfiguration.class
+    }
+)
+public class CxfConsumerProviderTest {
+
+    protected static final String REQUEST_MESSAGE
+        = "<soapenv:Envelope 
xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"; 
xmlns:ser=\"test/service\">"
+            + 
"<soapenv:Header/><soapenv:Body><ser:ping/></soapenv:Body></soapenv:Envelope>";
+
+    protected static final String RESPONSE_MESSAGE_BEGINE
+        = "<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>"
+            + "<soap:Body><pong xmlns=\"test/service\"";
+    protected static final String RESPONSE_MESSAGE_END = 
"/></soap:Body></soap:Envelope>";
+
+    protected static final String RESPONSE = "<pong xmlns=\"test/service\"/>";
+
+    protected final String simpleEndpointAddress = "http://localhost:";
+                                           + CXFTestSupport.getPort1() + "/" + 
getClass().getSimpleName() + "/test";
+    protected final String simpleEndpointURI = "cxf://" + simpleEndpointAddress
+                                       + 
"?serviceClass=org.apache.camel.component.cxf.soap.springboot.ServiceProvider";
+
+
+    @Autowired
+    ProducerTemplate template;
+    
+    @Test
+    public void testInvokingServiceFromHttpCompnent() throws Exception {
+        // call the service with right post message
+
+        String response = template.requestBody(simpleEndpointAddress, 
REQUEST_MESSAGE, String.class);
+        assertTrue(response.startsWith(RESPONSE_MESSAGE_BEGINE), "Get a wrong 
response");
+        assertTrue(response.endsWith(RESPONSE_MESSAGE_END), "Get a wrong 
response");
+        try {
+            template.requestBody(simpleEndpointAddress, null, String.class);
+            fail("Excpetion to get exception here");
+        } catch (Exception ex) {
+            // do nothing here
+        }
+
+        response = template.requestBody(simpleEndpointAddress, 
REQUEST_MESSAGE, String.class);
+        assertTrue(response.startsWith(RESPONSE_MESSAGE_BEGINE), "Get a wrong 
response");
+        assertTrue(response.endsWith(RESPONSE_MESSAGE_END), "Get a wrong 
response");
+    }
+
+    
+    
+    // *************************************
+    // Config
+    // *************************************
+
+    @Configuration
+    public class TestConfiguration {
+
+        @Bean
+        public RouteBuilder routeBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() {
+                    errorHandler(noErrorHandler());
+                    from(getFromEndpointUri()).process(new Processor() {
+                        public void process(final Exchange exchange) {
+                            Message in = exchange.getIn();
+                            Node node = in.getBody(Node.class);
+                            assertNotNull(node);
+                            XmlConverter xmlConverter = new XmlConverter();
+                            // Put the result back
+                            
exchange.getMessage().setBody(xmlConverter.toSource(RESPONSE));
+                        }
+                    });
+                }
+            };
+        }
+    }
+    
+    protected String getFromEndpointUri() {
+        return simpleEndpointURI;
+    }
+
+}
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/MultiPartInvokeImpl.java
 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/MultiPartInvokeImpl.java
new file mode 100644
index 00000000000..d64a58c9c59
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/MultiPartInvokeImpl.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.soap.springboot;
+
+import javax.xml.ws.Holder;
+
+import org.apache.camel.cxf.multipart.MultiPartInvoke;
+import org.apache.camel.cxf.multipart.types.InE;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
[email protected](
+                      serviceName = "MultiPartInvokeService",
+                      portName = "MultiPartInvokePort",
+                      targetNamespace = "http://adapter.ti.tongtech.com/ws";,
+                      endpointInterface = 
"org.apache.camel.cxf.multipart.MultiPartInvoke")
+
+public class MultiPartInvokeImpl implements MultiPartInvoke {
+
+    private static final Logger LOG = 
LoggerFactory.getLogger(MultiPartInvokeImpl.class);
+
+    @Override
+    public void foo(InE in, InE in1, Holder<InE> out, Holder<InE> out1) {
+        LOG.info("Executing operation foo");
+        LOG.info("{}", in);
+        LOG.info("{}", in1);
+        try {
+            InE outValue = in;
+            out.value = outValue;
+            InE out1Value = in1;
+            out1.value = out1Value;
+        } catch (Exception ex) {
+            LOG.warn("I/O error: {}", ex.getMessage(), ex);
+            throw new RuntimeException(ex);
+        }
+    }
+
+}
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/ServiceProvider.java
 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/ServiceProvider.java
new file mode 100644
index 00000000000..897eaaf503c
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/ServiceProvider.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.soap.springboot;
+
+import javax.xml.transform.Source;
+import javax.xml.ws.Provider;
+import javax.xml.ws.Service.Mode;
+import javax.xml.ws.ServiceMode;
+import javax.xml.ws.WebServiceProvider;
+
+@WebServiceProvider
+@ServiceMode(Mode.PAYLOAD)
+public class ServiceProvider implements Provider<Source> {
+
+    @Override
+    public Source invoke(Source m) {
+        throw new UnsupportedOperationException("Place holder method");
+    }
+
+}
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/WriteXmlDeclarationInterceptor.java
 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/WriteXmlDeclarationInterceptor.java
new file mode 100644
index 00000000000..b166016bb8d
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/java/org/apache/camel/component/cxf/soap/springboot/WriteXmlDeclarationInterceptor.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.soap.springboot;
+
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.StaxOutInterceptor;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+//START SNIPPET: example
+public class WriteXmlDeclarationInterceptor extends 
AbstractPhaseInterceptor<SoapMessage> {
+    public WriteXmlDeclarationInterceptor() {
+        super(Phase.PRE_STREAM);
+        addBefore(StaxOutInterceptor.class.getName());
+    }
+
+    @Override
+    public void handleMessage(SoapMessage message) throws Fault {
+        message.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE);
+    }
+
+}
+//END SNIPPET: example
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/resources/MultiPartTest.wsdl
 
b/components-starter/camel-cxf-soap-starter/src/test/resources/MultiPartTest.wsdl
new file mode 100644
index 00000000000..3ff0b7d9f36
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/resources/MultiPartTest.wsdl
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
+       xmlns:tns="http://camel.apache.org/cxf/multipart"; 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
+       xmlns:xsd="http://www.w3.org/2001/XMLSchema"; name="flow"
+       xmlns:x1="http://camel.apache.org/cxf/multipart/types";
+       targetNamespace="http://camel.apache.org/cxf/multipart";>
+       <wsdl:types>
+        <schema targetNamespace="http://camel.apache.org/cxf/multipart/types"; 
+               xmlns="http://www.w3.org/2001/XMLSchema"; 
+               xmlns:x1="http://camel.apache.org/cxf/multipart/types"; 
+               elementFormDefault="qualified">
+            <element name="inE">
+                <complexType>
+                    <sequence>
+                        <element name="v" type="string"/>
+                    </sequence>
+                </complexType>
+            </element>
+        </schema>
+       </wsdl:types>
+       <wsdl:message name="inputRequest">
+               <wsdl:part name="in" element="x1:inE" />
+               <wsdl:part name="in1" element="x1:inE" />
+       </wsdl:message>
+       <wsdl:message name="inputResponse">
+               <wsdl:part name="out" element="x1:inE" />
+               <wsdl:part name="out1" element="x1:inE" />
+       </wsdl:message>
+       
+       <wsdl:portType name="MultiPartInvoke">
+               <wsdl:operation name="foo">
+                       <wsdl:input message="tns:inputRequest" />
+                       <wsdl:output message="tns:inputResponse" />
+               </wsdl:operation>
+       </wsdl:portType>
+       <wsdl:binding name="MultiPartInvokeSoapBinding" 
type="tns:MultiPartInvoke">
+               <soap:binding style="document"
+                       transport="http://schemas.xmlsoap.org/soap/http"; />
+               <wsdl:operation name="foo">
+                       <soap:operation 
soapAction="http://camel.apache.org/cxf/multipart/input"; />
+                       <wsdl:input>
+                               <soap:header use="literal" part="in" 
message="tns:inputRequest"/>
+                               <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output>
+                               <soap:header use="literal" part="out" 
message="tns:inputResponse"/>
+                               <soap:body use="literal" />
+                       </wsdl:output>
+               </wsdl:operation>
+       </wsdl:binding>
+       <wsdl:service name="MultiPartInvokeService">
+               <wsdl:port binding="tns:MultiPartInvokeSoapBinding" 
name="MultiPartInvokePort">
+                       <soap:address 
location="http://localhost:9000/SoapContext/SoapPort"/>
+               </wsdl:port>
+       </wsdl:service>
+</wsdl:definitions>
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/resources/routes/MultiPartTest.xml
 
b/components-starter/camel-cxf-soap-starter/src/test/resources/routes/MultiPartTest.xml
new file mode 100644
index 00000000000..0a712a16d3d
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/resources/routes/MultiPartTest.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:cxf="http://camel.apache.org/schema/cxf/jaxws";
+       xsi:schemaLocation="
+         http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
+         http://camel.apache.org/schema/cxf/jaxws 
http://camel.apache.org/schema/cxf/jaxws/camel-cxf.xsd
+         http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd
+      ">
+      
+    <bean 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
+    <import resource="classpath:META-INF/cxf/cxf.xml"/>
+  
+    <cxf:cxfEndpoint id="routerEndpoint"
+        
address="http://localhost:16233/CXFMultiPartTest/CamelContext/RouterPort"; 
+        wsdlURL="classpath:/MultiPartTest.wsdl"
+        endpointName="s:MultiPartInvokePort"
+        serviceName="s:MultiPartInvokeService"
+        xmlns:s="http://camel.apache.org/cxf/multipart";>
+
+        <cxf:outInterceptors>
+            <bean 
class="org.apache.camel.component.cxf.soap.springboot.WriteXmlDeclarationInterceptor"/>
+        </cxf:outInterceptors>
+   </cxf:cxfEndpoint>
+  
+    <cxf:cxfEndpoint id="serviceEndpoint" 
+        address="http://localhost:16231/CXFMultiPartTest/SoapContext/SoapPort";
+        wsdlURL="classpath:MultiPartTest.wsdl"
+        endpointName="s:MultiPartInvokePort"
+        serviceName="s:MultiPartInvokeService"
+        xmlns:s="http://camel.apache.org/cxf/multipart"; />
+
+    <bean id="noErrorHandler" 
class="org.apache.camel.builder.NoErrorHandlerBuilder"/>
+       
+</beans>
diff --git 
a/components-starter/camel-cxf-soap-starter/src/test/resources/routes/multipartRoute.xml
 
b/components-starter/camel-cxf-soap-starter/src/test/resources/routes/multipartRoute.xml
new file mode 100644
index 00000000000..d1f1ce13e12
--- /dev/null
+++ 
b/components-starter/camel-cxf-soap-starter/src/test/resources/routes/multipartRoute.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+
+    <!-- START SNIPPET: e1 -->
+    <routes id="camel" xmlns="http://camel.apache.org/schema/spring";>
+        <route errorHandlerRef="noErrorHandler">
+            <from uri="cxf:bean:routerEndpoint?dataFormat=PAYLOAD" />
+            <to uri="cxf:bean:serviceEndpoint?dataFormat=PAYLOAD" />
+        </route>
+    </routes>
diff --git a/components-starter/camel-cxf-transport-starter/pom.xml 
b/components-starter/camel-cxf-transport-starter/pom.xml
index b230950696a..1bceb4231d3 100644
--- a/components-starter/camel-cxf-transport-starter/pom.xml
+++ b/components-starter/camel-cxf-transport-starter/pom.xml
@@ -36,7 +36,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
-      <artifactId>camel-cxf-transport</artifactId>
+      <artifactId>camel-cxf-spring-transport</artifactId>
       <version>${camel-version}</version>
     </dependency>
     <!--START OF GENERATED CODE-->
diff --git a/components-starter/camel-soap-starter/pom.xml 
b/components-starter/camel-soap-starter/pom.xml
index 7cc4f4aa0b5..abd306695c4 100644
--- a/components-starter/camel-soap-starter/pom.xml
+++ b/components-starter/camel-soap-starter/pom.xml
@@ -47,7 +47,13 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
-      <artifactId>camel-cxf</artifactId>
+      <artifactId>camel-cxf-spring-transport</artifactId>
+      <version>${camel-version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-cxf-soap</artifactId>
       <version>${camel-version}</version>
       <scope>test</scope>
     </dependency>
diff --git a/components-starter/pom.xml b/components-starter/pom.xml
index fca45e3b17c..567b33bff2f 100644
--- a/components-starter/pom.xml
+++ b/components-starter/pom.xml
@@ -183,7 +183,8 @@
     <module>camel-crypto-starter</module>
     <module>camel-csimple-joor-starter</module>
     <module>camel-csv-starter</module>
-    <module>camel-cxf-starter</module>
+    <module>camel-cxf-soap-starter</module>
+    <module>camel-cxf-rest-starter</module>
     <module>camel-cxf-transport-starter</module>
     <module>camel-dataformat-starter</module>
     <module>camel-dataset-starter</module>
diff --git a/tooling/camel-spring-boot-bom/pom.xml 
b/tooling/camel-spring-boot-bom/pom.xml
index f7ed58a9c6b..a8529e04582 100644
--- a/tooling/camel-spring-boot-bom/pom.xml
+++ b/tooling/camel-spring-boot-bom/pom.xml
@@ -410,7 +410,12 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel.springboot</groupId>
-        <artifactId>camel-cxf-starter</artifactId>
+        <artifactId>camel-cxf-rest-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel.springboot</groupId>
+        <artifactId>camel-cxf-soap-starter</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
diff --git a/tooling/camel-spring-boot-dependencies/pom.xml 
b/tooling/camel-spring-boot-dependencies/pom.xml
index 531f98f9f0e..2761ac3d3c1 100644
--- a/tooling/camel-spring-boot-dependencies/pom.xml
+++ b/tooling/camel-spring-boot-dependencies/pom.xml
@@ -603,7 +603,12 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel.springboot</groupId>
-        <artifactId>camel-cxf-starter</artifactId>
+        <artifactId>camel-cxf-rest-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel.springboot</groupId>
+        <artifactId>camel-cxf-soap-starter</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>

Reply via email to