This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 60efaa1  Add additional SOAP extension test coverage
60efaa1 is described below

commit 60efaa1f82c0cef14cff38ac6dd3bb5b2dceb643
Author: James Netherton <[email protected]>
AuthorDate: Fri May 7 10:42:21 2021 +0100

    Add additional SOAP extension test coverage
    
    Fixes #2561
---
 .../component/soap/deployment/SoapProcessor.java   |  54 +++++
 extensions/soap/runtime/pom.xml                    |   8 +-
 integration-tests/soap/pom.xml                     |   4 +
 .../component/soap/it/SoapMultipartResource.java   |  56 +++++
 .../quarkus/component/soap/it/SoapResource.java    | 111 ++++++++-
 .../quarkus/component/soap/it/SoapRoutes.java      | 106 ++++++++-
 .../component/soap/it/example/ObjectFactory.java   |  65 ------
 .../Company.java}                                  |  36 ++-
 .../component/soap/it/multipart/CompanyType.java   |  22 +-
 .../component/soap/it/multipart/Customer.java      | 108 +++++++++
 .../component/soap/it/multipart/CustomerType.java  |  22 +-
 .../GetAllCustomersResponse.java}                  |  42 ++--
 .../{example => multipart}/GetCustomersByName.java |  21 +-
 .../GetCustomersByNameResponse.java}               |  42 ++--
 .../it/multipart/MultiPartCustomerService.java     |  58 +++++
 .../multipart/MultiPartCustomerServiceService.java |  57 +++++
 .../NoSuchCustomer.java}                           |  36 +--
 .../soap/it/multipart/NoSuchCustomerException.java |  52 +++++
 .../component/soap/it/multipart/ObjectFactory.java | 135 +++++++++++
 .../Product.java}                                  |  37 ++-
 .../SaveCustomer.java}                             |  36 +--
 .../component/soap/it/multipart/package-info.java  |  17 +-
 .../component/soap/it/service/Customer.java        | 108 +++++++++
 .../component/soap/it/service/CustomerService.java |  50 +++++
 .../soap/it/service/CustomerServiceService.java    |  57 +++++
 .../component/soap/it/service/CustomerType.java    |  22 +-
 .../GetAllAmericanCustomersResponse.java}          |  42 ++--
 .../GetAllCustomersResponse.java}                  |  42 ++--
 .../{example => service}/GetCustomersByName.java   |  21 +-
 .../GetCustomersByNameResponse.java}               |  42 ++--
 .../NoSuchCustomer.java}                           |  36 +--
 .../soap/it/service/NoSuchCustomerException.java   |  52 +++++
 .../component/soap/it/service/ObjectFactory.java   | 124 +++++++++++
 .../SaveCustomer.java}                             |  37 +--
 .../component/soap/it/service/package-info.java    |  17 +-
 .../soap/src/main/resources/application.properties |  18 ++
 .../src/main/resources/schema/CustomerService.xsd  |  88 ++++++++
 .../src/main/resources/wsdl/CustomerService.wsdl   | 198 +++++++++++++++++
 .../resources/wsdl/MultiPartCustomerService.wsdl   | 247 +++++++++++++++++++++
 .../camel/quarkus/component/soap/it/SoapTest.java  | 147 ++++++++----
 .../src/test/resources/getCustomersByName1.1.xml   |  26 +++
 .../src/test/resources/getCustomersByName1.2.xml   |  26 +++
 .../soap/src/test/resources/soapFault1.1.xml       |  32 +++
 .../soap/src/test/resources/soapFault1.2.xml       |  34 +++
 pom.xml                                            |   6 +-
 poms/bom-test/pom.xml                              |   5 +
 poms/bom/pom.xml                                   |  16 +-
 47 files changed, 2103 insertions(+), 515 deletions(-)

diff --git 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
 
b/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
index 839d62e..11846b7 100644
--- 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
+++ 
b/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
@@ -16,8 +16,17 @@
  */
 package org.apache.camel.quarkus.component.soap.deployment;
 
+import javax.xml.ws.WebFault;
+
+import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
+import 
io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.IndexView;
 
 class SoapProcessor {
 
@@ -28,4 +37,49 @@ class SoapProcessor {
         return new FeatureBuildItem(FEATURE);
     }
 
+    @BuildStep
+    NativeImageResourceBuildItem nativeImageResources() {
+        return new NativeImageResourceBuildItem("soap.xsd", "soap12.xsd", 
"xml.xsd");
+    }
+
+    @BuildStep
+    void serviceProviders(BuildProducer<ServiceProviderBuildItem> 
serviceProvider) {
+        String[] soapVersions = new String[] { "1_1", "1_2" };
+        for (String version : soapVersions) {
+            serviceProvider.produce(
+                    new ServiceProviderBuildItem(
+                            "javax.xml.soap.MessageFactory",
+                            "com.sun.xml.messaging.saaj.soap.ver" + version + 
".SOAPMessageFactory" + version + "Impl"));
+
+            serviceProvider.produce(
+                    new ServiceProviderBuildItem(
+                            "javax.xml.soap.SOAPFactory",
+                            "com.sun.xml.messaging.saaj.soap.ver" + version + 
".SOAPFactory" + version + "Impl"));
+        }
+
+        serviceProvider.produce(
+                new ServiceProviderBuildItem(
+                        "javax.xml.soap.SOAPConnectionFactory",
+                        
"com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory"));
+
+        serviceProvider.produce(
+                new ServiceProviderBuildItem(
+                        "javax.xml.soap.SAAJMetaFactory",
+                        
"com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl"));
+    }
+
+    @BuildStep
+    void registerForReflection(CombinedIndexBuildItem combinedIndex, 
BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
+        IndexView index = combinedIndex.getIndex();
+
+        // Required for SOAP fault marshal / unmarshal
+        index.getAnnotations(DotName.createSimple(WebFault.class.getName()))
+                .stream()
+                .map(annotationInstance -> 
annotationInstance.target().asClass())
+                .map(classInfo -> new ReflectiveClassBuildItem(true, false, 
classInfo.name().toString()))
+                .forEach(reflectiveClass::produce);
+
+        reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, 
Exception.class));
+    }
+
 }
diff --git a/extensions/soap/runtime/pom.xml b/extensions/soap/runtime/pom.xml
index 438bacb..57c2b19 100644
--- a/extensions/soap/runtime/pom.xml
+++ b/extensions/soap/runtime/pom.xml
@@ -62,8 +62,12 @@
             </exclusions>
         </dependency>
         <dependency>
-            <groupId>javax.xml.ws</groupId>
-            <artifactId>jaxws-api</artifactId>
+            <groupId>jakarta.xml.ws</groupId>
+            <artifactId>jakarta.xml.ws-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.messaging.saaj</groupId>
+            <artifactId>saaj-impl</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
diff --git a/integration-tests/soap/pom.xml b/integration-tests/soap/pom.xml
index 9db5186..7a09a0e 100644
--- a/integration-tests/soap/pom.xml
+++ b/integration-tests/soap/pom.xml
@@ -42,6 +42,10 @@
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy</artifactId>
         </dependency>
+        <dependency>
+            <groupId>jakarta.jws</groupId>
+            <artifactId>jakarta.jws-api</artifactId>
+        </dependency>
 
         <!-- test dependencies -->
         <dependency>
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapMultipartResource.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapMultipartResource.java
new file mode 100644
index 0000000..d9ab873
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapMultipartResource.java
@@ -0,0 +1,56 @@
+/*
+ * 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.quarkus.component.soap.it;
+
+import java.net.URI;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.quarkus.component.soap.it.multipart.GetCustomersByName;
+
+@Path("/soap")
+@ApplicationScoped
+public class SoapMultipartResource {
+
+    @Inject
+    ProducerTemplate producerTemplate;
+
+    @Path("/multipart")
+    @POST
+    @Consumes(MediaType.TEXT_PLAIN)
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response multipart(String message) throws Exception {
+        GetCustomersByName request = new GetCustomersByName();
+        request.setName(message);
+        final String xml = 
producerTemplate.requestBody("direct:marshalMultipart", request, String.class);
+
+        GetCustomersByName response = 
producerTemplate.requestBody("direct:unmarshalMultipart", xml, 
GetCustomersByName.class);
+
+        return Response
+                .created(new URI("https://camel.apache.org/";))
+                .entity(response.getName())
+                .build();
+    }
+}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapResource.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapResource.java
index fdf00d4..7d2295f 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapResource.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapResource.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.quarkus.component.soap.it;
 
-import java.awt.*;
 import java.net.URI;
 
 import javax.enterprise.context.ApplicationScoped;
@@ -28,9 +27,13 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import javax.xml.ws.soap.SOAPFaultException;
 
+import org.apache.camel.CamelExecutionException;
+import org.apache.camel.FluentProducerTemplate;
 import org.apache.camel.ProducerTemplate;
-import org.apache.camel.quarkus.component.soap.it.example.GetCustomersByName;
+import org.apache.camel.quarkus.component.soap.it.service.GetCustomersByName;
+import 
org.apache.camel.quarkus.component.soap.it.service.NoSuchCustomerException;
 import org.jboss.logging.Logger;
 
 @Path("/soap")
@@ -42,17 +45,41 @@ public class SoapResource {
     @Inject
     ProducerTemplate producerTemplate;
 
+    @Inject
+    FluentProducerTemplate fluentProducerTemplate;
+
     @Path("/marshal/{soapVersion}")
     @POST
     @Consumes(MediaType.TEXT_PLAIN)
     @Produces(MediaType.APPLICATION_XML)
-    public Response marshall(@PathParam("soapVersion") String soapVersion, 
String message) throws Exception {
+    public Response marshal(@PathParam("soapVersion") String soapVersion, 
String message) throws Exception {
         LOG.infof("Sending to soap: %s", message);
+
         GetCustomersByName request = new GetCustomersByName();
         request.setName(message);
 
-        final String endpointUri = "direct:marshal" + 
(soapVersion.equals("1.2") ? "-soap12" : "");
-        final String response = producerTemplate.requestBody(endpointUri, 
request, String.class);
+        final String response = 
fluentProducerTemplate.toF("direct:marshal-%s", "soap" + soapVersion)
+                .withBody(request)
+                .request(String.class);
+
+        return Response
+                .created(new URI("https://camel.apache.org/";))
+                .entity(response)
+                .build();
+    }
+
+    @Path("/marshal/fault/{soapVersion}")
+    @POST
+    @Consumes(MediaType.TEXT_PLAIN)
+    @Produces(MediaType.APPLICATION_XML)
+    public Response marshalFault(@PathParam("soapVersion") String soapVersion, 
String message) throws Exception {
+        LOG.infof("Sending to soap: %s", message);
+        GetCustomersByName request = new GetCustomersByName();
+        request.setName(message);
+
+        final String response = 
fluentProducerTemplate.toF("direct:marshal-fault-%s", "soap" + soapVersion)
+                .withBody(request)
+                .request(String.class);
 
         return Response
                 .created(new URI("https://camel.apache.org/";))
@@ -65,8 +92,9 @@ public class SoapResource {
     @Consumes(MediaType.APPLICATION_XML)
     @Produces(MediaType.TEXT_PLAIN)
     public Response unmarshal(@PathParam("soapVersion") String soapVersion, 
String message) throws Exception {
-        final String endpointUri = "direct:unmarshal" + 
(soapVersion.equals("1.2") ? "-soap12" : "");
-        final GetCustomersByName response = 
producerTemplate.requestBody(endpointUri, message, GetCustomersByName.class);
+        final GetCustomersByName response = 
fluentProducerTemplate.toF("direct:unmarshal-%s", "soap" + soapVersion)
+                .withBody(message)
+                .request(GetCustomersByName.class);
 
         return Response
                 .created(new URI("https://camel.apache.org/";))
@@ -74,18 +102,41 @@ public class SoapResource {
                 .build();
     }
 
-    @Path("/round")
+    @Path("/unmarshal/fault/{soapVersion}")
+    @POST
+    @Consumes(MediaType.APPLICATION_XML)
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response unmarshalFault(@PathParam("soapVersion") String 
soapVersion, String message) throws Exception {
+        try {
+            final NoSuchCustomerException response = fluentProducerTemplate
+                    .toF("direct:unmarshal-fault-%s", "soap" + soapVersion)
+                    .withBody(message)
+                    .request(NoSuchCustomerException.class);
+        } catch (CamelExecutionException e) {
+            Throwable cause = e.getCause();
+            if (cause instanceof SOAPFaultException) {
+                SOAPFaultException sfe = (SOAPFaultException) cause;
+                return Response
+                        .created(new URI("https://camel.apache.org/";))
+                        .entity(sfe.getMessage())
+                        .build();
+            }
+        }
+        return Response.serverError().entity("Expected SOAPFaultException was 
not thrown").build();
+    }
+
+    @Path("/marshal/unmarshal")
     @POST
     @Consumes(MediaType.TEXT_PLAIN)
     @Produces(MediaType.TEXT_PLAIN)
-    public Response round(String message) throws Exception {
+    public Response marshalUnmarshal(String message) throws Exception {
         LOG.infof("Sending to soap: %s", message);
         GetCustomersByName request = new GetCustomersByName();
         request.setName(message);
-        final String xml = producerTemplate.requestBody("direct:marshal", 
request, String.class);
+        final String xml = 
producerTemplate.requestBody("direct:marshal-soap1.2", request, String.class);
         LOG.infof("Got response from marshal: %s", xml);
 
-        GetCustomersByName response = 
producerTemplate.requestBody("direct:unmarshal", xml, GetCustomersByName.class);
+        GetCustomersByName response = 
producerTemplate.requestBody("direct:unmarshal-soap1.2", xml, 
GetCustomersByName.class);
         LOG.infof("Got response from unmarshal: %s", response);
 
         return Response
@@ -93,4 +144,42 @@ public class SoapResource {
                 .entity(response.getName())
                 .build();
     }
+
+    @Path("/qname/strategy")
+    @POST
+    @Consumes(MediaType.TEXT_PLAIN)
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response qnameStrategy(String message) throws Exception {
+        GetCustomersByName request = new GetCustomersByName();
+        request.setName(message);
+
+        final String xml = 
producerTemplate.requestBody("direct:marshalQnameStrategy", request, 
String.class);
+
+        GetCustomersByName response = 
producerTemplate.requestBody("direct:unmarshalQnameStrategy", xml,
+                GetCustomersByName.class);
+
+        return Response
+                .created(new URI("https://camel.apache.org/";))
+                .entity(response.getName())
+                .build();
+    }
+
+    @Path("/serviceinterface/strategy")
+    @POST
+    @Consumes(MediaType.TEXT_PLAIN)
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response serviceInterfaceStrategy(String message) throws Exception {
+        GetCustomersByName request = new GetCustomersByName();
+        request.setName(message);
+
+        final String xml = 
producerTemplate.requestBody("direct:marshalServiceInterfaceStrategy", request, 
String.class);
+
+        GetCustomersByName response = 
producerTemplate.requestBody("direct:unmarshalServiceInterfaceStrategy", xml,
+                GetCustomersByName.class);
+
+        return Response
+                .created(new URI("https://camel.apache.org/";))
+                .entity(response.getName())
+                .build();
+    }
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapRoutes.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapRoutes.java
index 571308c..fb8221d 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapRoutes.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/SoapRoutes.java
@@ -16,28 +16,112 @@
  */
 package org.apache.camel.quarkus.component.soap.it;
 
+import javax.inject.Named;
+import javax.xml.namespace.QName;
+
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.dataformat.soap.SoapJaxbDataFormat;
+import org.apache.camel.dataformat.soap.name.QNameStrategy;
+import org.apache.camel.dataformat.soap.name.ServiceInterfaceStrategy;
 import org.apache.camel.dataformat.soap.name.TypeNameStrategy;
-import org.apache.camel.quarkus.component.soap.it.example.GetCustomersByName;
+import 
org.apache.camel.quarkus.component.soap.it.multipart.MultiPartCustomerService;
+import org.apache.camel.quarkus.component.soap.it.service.CustomerService;
+import org.apache.camel.quarkus.component.soap.it.service.GetCustomersByName;
+import org.apache.camel.quarkus.component.soap.it.service.NoSuchCustomer;
+import 
org.apache.camel.quarkus.component.soap.it.service.NoSuchCustomerException;
 
 public class SoapRoutes extends RouteBuilder {
 
+    private static final String SERVICE_CUSTOMERS_BY_NAME_PACKAGE = 
GetCustomersByName.class.getPackage().getName();
+    private static final String MULTIPART_CUSTOMERS_BY_NAME_PACKAGE = 
org.apache.camel.quarkus.component.soap.it.multipart.GetCustomersByName.class
+            .getPackage().getName();
+
     @Override
     public void configure() {
-        final String soapPackage = 
GetCustomersByName.class.getPackage().getName();
-        SoapJaxbDataFormat soap = new SoapJaxbDataFormat(soapPackage, new 
TypeNameStrategy());
+        from("direct:marshal-soap1.1")
+                .marshal("soapDataFormat");
+
+        from("direct:unmarshal-soap1.1")
+                .unmarshal("soapDataFormat");
+
+        from("direct:marshal-fault-soap1.1")
+                .onException(Exception.class)
+                .handled(true)
+                .marshal("soapDataFormat")
+                .end()
+                .process(createSoapFaultProcessor());
+
+        from("direct:unmarshal-fault-soap1.1")
+                .unmarshal("soapDataFormat");
+
+        from("direct:unmarshalServiceInterfaceStrategy")
+                .unmarshal("soapDataFormatWithServiceInterfaceStrategy");
+
+        from("direct:marshalServiceInterfaceStrategy")
+                .marshal("soapDataFormatWithServiceInterfaceStrategy");
+
+        from("direct:marshalQnameStrategy")
+                .marshal("soapDataFormatWithQNameStrategy");
+
+        from("direct:unmarshalQnameStrategy")
+                .unmarshal("soapDataFormatWithQNameStrategy");
+
+        from("direct:marshal-soap1.2")
+                .marshal().soapjaxb12(SERVICE_CUSTOMERS_BY_NAME_PACKAGE);
+
+        from("direct:unmarshal-soap1.2")
+                .unmarshal().soapjaxb12(SERVICE_CUSTOMERS_BY_NAME_PACKAGE);
 
-        from("direct:marshal")
-                .marshal(soap);
+        from("direct:unmarshal-fault-soap1.2")
+                .unmarshal().soapjaxb12(SERVICE_CUSTOMERS_BY_NAME_PACKAGE);
 
-        from("direct:unmarshal")
-                .unmarshal(soap);
+        from("direct:marshal-fault-soap1.2")
+                .onException(Exception.class)
+                .handled(true)
+                .marshal().soapjaxb12(SERVICE_CUSTOMERS_BY_NAME_PACKAGE)
+                .end()
+                .process(createSoapFaultProcessor());
 
-        from("direct:marshal-soap12")
-                .marshal().soapjaxb12(soapPackage);
+        from("direct:marshalMultipart")
+                .marshal("soapJaxbDataFormatMultipart");
+
+        from("direct:unmarshalMultipart")
+                .unmarshal("soapJaxbDataFormatMultipart");
+    }
+
+    @Named("soapDataFormat")
+    public SoapJaxbDataFormat soapJaxbDataFormat() {
+        SoapJaxbDataFormat soapJaxbDataFormat = new 
SoapJaxbDataFormat(SERVICE_CUSTOMERS_BY_NAME_PACKAGE,
+                new TypeNameStrategy());
+        
soapJaxbDataFormat.setSchema("classpath:/schema/CustomerService.xsd,classpath:/soap.xsd");
+        return soapJaxbDataFormat;
+    }
+
+    @Named("soapDataFormatWithQNameStrategy")
+    public SoapJaxbDataFormat soapJaxbDataFormatQnameStrategy() {
+        QName qName = new 
QName("http://service.it.soap.component.quarkus.camel.apache.org/";, 
"getCustomersByName");
+        return new SoapJaxbDataFormat(SERVICE_CUSTOMERS_BY_NAME_PACKAGE, new 
QNameStrategy(qName));
+    }
+
+    @Named("soapDataFormatWithServiceInterfaceStrategy")
+    public SoapJaxbDataFormat soapJaxbDataFormatServiceInterfaceStrategy() {
+        return new SoapJaxbDataFormat(SERVICE_CUSTOMERS_BY_NAME_PACKAGE,
+                new ServiceInterfaceStrategy(CustomerService.class, true));
+    }
+
+    @Named("soapJaxbDataFormatMultipart")
+    public SoapJaxbDataFormat soapJaxbDataFormatMultipart() {
+        return new SoapJaxbDataFormat(MULTIPART_CUSTOMERS_BY_NAME_PACKAGE,
+                new ServiceInterfaceStrategy(MultiPartCustomerService.class, 
true));
+    }
 
-        from("direct:unmarshal-soap12")
-                .unmarshal().soapjaxb12(soapPackage);
+    private Processor createSoapFaultProcessor() {
+        return e -> {
+            GetCustomersByName request = 
e.getMessage().getBody(GetCustomersByName.class);
+            NoSuchCustomer nsc = new NoSuchCustomer();
+            nsc.setCustomerId(request.getName());
+            throw new NoSuchCustomerException("Specified customer was not 
found", nsc);
+        };
     }
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/ObjectFactory.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/ObjectFactory.java
deleted file mode 100644
index a26ffe7..0000000
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/ObjectFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.quarkus.component.soap.it.example;
-
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.annotation.XmlElementDecl;
-import javax.xml.bind.annotation.XmlRegistry;
-import javax.xml.namespace.QName;
-
-/**
- * This object contains factory methods for each
- * Java content interface and Java element interface
- * generated in the com.example.customerservice.multipart package.
- * <p>
- * An ObjectFactory allows you to programatically
- * construct new instances of the Java representation
- * for XML content. The Java representation of XML
- * content can consist of schema derived interfaces
- * and classes representing the binding of schema
- * type definitions, element declarations and model
- * groups. Factory methods for each of these are
- * provided in this class.
- *
- */
-@XmlRegistry
-public class ObjectFactory {
-
-    private final static QName _GetCustomersByName_QNAME = new QName(
-            "http://example.it.soap.component.quarkus.camel.apache.org/";,
-            "getCustomersByName");
-
-    /**
-     * Create a new ObjectFactory that can be used to create new instances of 
schema derived classes for package:
-     * com.example.customerservice
-     * .multipart
-     */
-    public ObjectFactory() {
-    }
-
-    /**
-     * Create an instance of {@link GetCustomersByName }
-     */
-    public GetCustomersByName createGetCustomersByName() {
-        return new GetCustomersByName();
-    }
-
-    @XmlElementDecl(namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, name = 
"getCustomersByName")
-    public JAXBElement<GetCustomersByName> 
createGetCustomersByName(GetCustomersByName value) {
-        return new JAXBElement<GetCustomersByName>(_GetCustomersByName_QNAME, 
GetCustomersByName.class, null, value);
-    }
-}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/Company.java
similarity index 67%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/Company.java
index 41b4e8e..59e4abd 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/Company.java
@@ -14,42 +14,38 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.multipart;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "company", propOrder = {
+        "name",
+        "president"
 })
-public class GetCustomersByName {
+public class Company {
 
+    @XmlElement(required = true)
     protected String name;
+    @XmlElement(required = true)
+    protected String president;
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
     public String getName() {
         return name;
     }
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
     public void setName(String value) {
         this.name = value;
     }
 
+    public String getPresident() {
+        return president;
+    }
+
+    public void setPresident(String value) {
+        this.president = value;
+    }
 }
diff --git 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/CompanyType.java
similarity index 68%
copy from 
extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/CompanyType.java
index 839d62e..8309c25 100644
--- 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/CompanyType.java
@@ -14,18 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.deployment;
+package org.apache.camel.quarkus.component.soap.it.multipart;
 
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlType;
 
-class SoapProcessor {
+@XmlType(name = "companyType")
+@XmlEnum
+public enum CompanyType {
 
-    private static final String FEATURE = "camel-soap";
+    PRIVATE,
+    PUBLIC;
 
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
+    public String value() {
+        return name();
+    }
+
+    public static CompanyType fromValue(String v) {
+        return valueOf(v);
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/Customer.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/Customer.java
new file mode 100644
index 0000000..a0c0a98
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/Customer.java
@@ -0,0 +1,108 @@
+/*
+ * 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.quarkus.component.soap.it.multipart;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "customer", propOrder = {
+        "name",
+        "address",
+        "numOrders",
+        "revenue",
+        "test",
+        "birthDate",
+        "type"
+})
+public class Customer {
+
+    protected String name;
+    @XmlElement(nillable = true)
+    protected List<String> address;
+    protected int numOrders;
+    protected double revenue;
+    protected BigDecimal test;
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar birthDate;
+    @XmlSchemaType(name = "string")
+    protected CustomerType type;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String value) {
+        this.name = value;
+    }
+
+    public List<String> getAddress() {
+        if (address == null) {
+            address = new ArrayList<>();
+        }
+        return this.address;
+    }
+
+    public int getNumOrders() {
+        return numOrders;
+    }
+
+    public void setNumOrders(int value) {
+        this.numOrders = value;
+    }
+
+    public double getRevenue() {
+        return revenue;
+    }
+
+    public void setRevenue(double value) {
+        this.revenue = value;
+    }
+
+    public BigDecimal getTest() {
+        return test;
+    }
+
+    public void setTest(BigDecimal value) {
+        this.test = value;
+    }
+
+    public XMLGregorianCalendar getBirthDate() {
+        return birthDate;
+    }
+
+    public void setBirthDate(XMLGregorianCalendar value) {
+        this.birthDate = value;
+    }
+
+    public CustomerType getType() {
+        return type;
+    }
+
+    public void setType(CustomerType value) {
+        this.type = value;
+    }
+
+}
diff --git 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/CustomerType.java
similarity index 68%
copy from 
extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/CustomerType.java
index 839d62e..fd6d635 100644
--- 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/CustomerType.java
@@ -14,18 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.deployment;
+package org.apache.camel.quarkus.component.soap.it.multipart;
 
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlType;
 
-class SoapProcessor {
+@XmlType(name = "customerType")
+@XmlEnum
+public enum CustomerType {
 
-    private static final String FEATURE = "camel-soap";
+    PRIVATE,
+    BUSINESS;
 
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
+    public String value() {
+        return name();
+    }
+
+    public static CustomerType fromValue(String v) {
+        return valueOf(v);
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/GetAllCustomersResponse.java
similarity index 58%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/GetAllCustomersResponse.java
index 41b4e8e..4950746 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/GetAllCustomersResponse.java
@@ -14,42 +14,30 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.multipart;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "getAllCustomersResponse", propOrder = {
+        "_return"
 })
-public class GetCustomersByName {
-
-    protected String name;
+public class GetAllCustomersResponse {
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
-    public String getName() {
-        return name;
-    }
+    @XmlElement(name = "return")
+    protected List<Customer> _return;
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
-    public void setName(String value) {
-        this.name = value;
+    public List<Customer> getReturn() {
+        if (_return == null) {
+            _return = new ArrayList<>();
+        }
+        return this._return;
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/GetCustomersByName.java
similarity index 70%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/GetCustomersByName.java
index 41b4e8e..ad6d2c2 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/GetCustomersByName.java
@@ -14,42 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.multipart;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
+@XmlType(name = "getCustomersByName", propOrder = {
         "name"
 })
 public class GetCustomersByName {
 
     protected String name;
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
     public String getName() {
         return name;
     }
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
     public void setName(String value) {
         this.name = value;
     }
-
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/GetCustomersByNameResponse.java
similarity index 58%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/GetCustomersByNameResponse.java
index 41b4e8e..27c5663 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/GetCustomersByNameResponse.java
@@ -14,42 +14,30 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.multipart;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "getCustomersByNameResponse", propOrder = {
+        "_return"
 })
-public class GetCustomersByName {
-
-    protected String name;
+public class GetCustomersByNameResponse {
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
-    public String getName() {
-        return name;
-    }
+    @XmlElement(name = "return")
+    protected List<Customer> _return;
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
-    public void setName(String value) {
-        this.name = value;
+    public List<Customer> getReturn() {
+        if (_return == null) {
+            _return = new ArrayList<Customer>();
+        }
+        return this._return;
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/MultiPartCustomerService.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/MultiPartCustomerService.java
new file mode 100644
index 0000000..2e77b24
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/MultiPartCustomerService.java
@@ -0,0 +1,58 @@
+/*
+ * 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.quarkus.component.soap.it.multipart;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+@WebService(targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"MultiPartCustomerService")
+@XmlSeeAlso({ ObjectFactory.class })
+@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+public interface MultiPartCustomerService {
+
+    @WebMethod(action = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/saveCustomerToo";)
+    public void saveCustomerToo(
+
+            @WebParam(partName = "parameters", name = "saveCustomerToo", 
targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";) SaveCustomer 
parameters,
+            @WebParam(partName = "product", name = "product", targetNamespace 
= "http://multipart.it.soap.component.quarkus.camel.apache.org/";, header = 
true) Product product,
+            @WebParam(partName = "company", mode = WebParam.Mode.INOUT, name = 
"company", targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, header = true) 
javax.xml.ws.Holder<Company> company);
+
+    @WebMethod(action = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/saveCustomer";)
+    public void saveCustomer(
+
+            @WebParam(partName = "parameters", name = "saveCustomer", 
targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";) SaveCustomer 
parameters,
+            @WebParam(partName = "product", name = "product", targetNamespace 
= "http://multipart.it.soap.component.quarkus.camel.apache.org/";, header = 
true) Product product,
+            @WebParam(partName = "company", mode = WebParam.Mode.INOUT, name = 
"company", targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, header = true) 
javax.xml.ws.Holder<Company> company);
+
+    @WebMethod(action = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/getCustomersByName";)
+    @WebResult(name = "getCustomersByNameResponse", targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, partName = 
"parameters")
+    public GetCustomersByNameResponse getCustomersByName(
+
+            @WebParam(partName = "parameters", name = "getCustomersByName", 
targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";) 
GetCustomersByName parameters,
+            @WebParam(partName = "product", name = "product", targetNamespace 
= "http://multipart.it.soap.component.quarkus.camel.apache.org/";, header = 
true) Product product)
+            throws NoSuchCustomerException;
+
+    @WebMethod(action = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/getAllCustomers";)
+    public void getAllCustomers(
+
+            @WebParam(partName = "parameters", mode = WebParam.Mode.OUT, name 
= "getAllCustomersResponse", targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";) 
javax.xml.ws.Holder<GetAllCustomersResponse> parameters,
+            @WebParam(partName = "companyType", mode = WebParam.Mode.OUT, name 
= "companyType", targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";) 
javax.xml.ws.Holder<CompanyType> companyType);
+}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/MultiPartCustomerServiceService.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/MultiPartCustomerServiceService.java
new file mode 100644
index 0000000..b959ee8
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/MultiPartCustomerServiceService.java
@@ -0,0 +1,57 @@
+/*
+ * 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.quarkus.component.soap.it.multipart;
+
+import java.net.URL;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+import javax.xml.ws.WebServiceFeature;
+
+@WebServiceClient(name = "MultiPartCustomerServiceService", targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";)
+public class MultiPartCustomerServiceService extends Service {
+
+    public final static QName SERVICE = new 
QName("http://multipart.it.soap.component.quarkus.camel.apache.org/";,
+            "MultiPartCustomerServiceService");
+    public final static QName MultiPartCustomerServicePort = new QName(
+            "http://multipart.it.soap.component.quarkus.camel.apache.org/";, 
"MultiPartCustomerServicePort");
+
+    public MultiPartCustomerServiceService(URL wsdlLocation) {
+        super(wsdlLocation, SERVICE);
+    }
+
+    public MultiPartCustomerServiceService(URL wsdlLocation, QName 
serviceName) {
+        super(wsdlLocation, serviceName);
+    }
+
+    public MultiPartCustomerServiceService() {
+        
super(Thread.currentThread().getContextClassLoader().getResource("/wsdl/MultiPartCustomerService.wsdl"),
 SERVICE);
+    }
+
+    @WebEndpoint(name = "MultiPartCustomerServicePort")
+    public MultiPartCustomerService getMultiPartCustomerServicePort() {
+        return super.getPort(MultiPartCustomerServicePort, 
MultiPartCustomerService.class);
+    }
+
+    @WebEndpoint(name = "MultiPartCustomerServicePort")
+    public MultiPartCustomerService 
getMultiPartCustomerServicePort(WebServiceFeature... features) {
+        return super.getPort(MultiPartCustomerServicePort, 
MultiPartCustomerService.class, features);
+    }
+
+}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/NoSuchCustomer.java
similarity index 58%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/NoSuchCustomer.java
index 41b4e8e..a7219de 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/NoSuchCustomer.java
@@ -14,42 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.multipart;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "NoSuchCustomer", propOrder = {
+        "customerId"
 })
-public class GetCustomersByName {
+public class NoSuchCustomer {
 
-    protected String name;
+    @XmlElement(required = true, nillable = true)
+    protected String customerId;
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
-    public String getName() {
-        return name;
+    public String getCustomerId() {
+        return customerId;
     }
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
-    public void setName(String value) {
-        this.name = value;
+    public void setCustomerId(String value) {
+        this.customerId = value;
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/NoSuchCustomerException.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/NoSuchCustomerException.java
new file mode 100644
index 0000000..9d1b494
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/NoSuchCustomerException.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.quarkus.component.soap.it.multipart;
+
+import javax.xml.ws.WebFault;
+
+@WebFault(name = "NoSuchCustomer", targetNamespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";)
+public class NoSuchCustomerException extends Exception {
+    public static final long serialVersionUID = 1L;
+
+    private NoSuchCustomer faultInfo;
+
+    public NoSuchCustomerException() {
+        super();
+    }
+
+    public NoSuchCustomerException(String message) {
+        super(message);
+    }
+
+    public NoSuchCustomerException(String message, java.lang.Throwable cause) {
+        super(message, cause);
+    }
+
+    public NoSuchCustomerException(String message, NoSuchCustomer 
noSuchCustomer) {
+        super(message);
+        this.faultInfo = noSuchCustomer;
+    }
+
+    public NoSuchCustomerException(String message, NoSuchCustomer 
noSuchCustomer, java.lang.Throwable cause) {
+        super(message, cause);
+        this.faultInfo = noSuchCustomer;
+    }
+
+    public NoSuchCustomer getFaultInfo() {
+        return this.faultInfo;
+    }
+}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/ObjectFactory.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/ObjectFactory.java
new file mode 100644
index 0000000..9757804
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/ObjectFactory.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.quarkus.component.soap.it.multipart;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+@XmlRegistry
+public class ObjectFactory {
+
+    private final static QName _GetCustomersByName_QNAME = new QName(
+            "http://multipart.it.soap.component.quarkus.camel.apache.org/";, 
"getCustomersByName");
+    private final static QName _GetCustomersByNameResponse_QNAME = new QName(
+            "http://multipart.it.soap.component.quarkus.camel.apache.org/";, 
"getCustomersByNameResponse");
+    private final static QName _NoSuchCustomer_QNAME = new 
QName("http://multipart.it.soap.component.quarkus.camel.apache.org/";,
+            "NoSuchCustomer");
+    private final static QName _GetAllCustomers_QNAME = new QName(
+            "http://multipart.it.soap.component.quarkus.camel.apache.org/";, 
"getAllCustomers");
+    private final static QName _GetAllCustomersResponse_QNAME = new QName(
+            "http://multipart.it.soap.component.quarkus.camel.apache.org/";, 
"getAllCustomersResponse");
+    private final static QName _SaveCustomer_QNAME = new 
QName("http://multipart.it.soap.component.quarkus.camel.apache.org/";,
+            "saveCustomer");
+    private final static QName _SaveCustomerToo_QNAME = new QName(
+            "http://multipart.it.soap.component.quarkus.camel.apache.org/";, 
"saveCustomerToo");
+    private final static QName _Company_QNAME = new 
QName("http://multipart.it.soap.component.quarkus.camel.apache.org/";,
+            "company");
+    private final static QName _CompanyType_QNAME = new 
QName("http://multipart.it.soap.component.quarkus.camel.apache.org/";,
+            "companyType");
+    private final static QName _Product_QNAME = new 
QName("http://multipart.it.soap.component.quarkus.camel.apache.org/";,
+            "product");
+
+    public ObjectFactory() {
+    }
+
+    public GetCustomersByName createGetCustomersByName() {
+        return new GetCustomersByName();
+    }
+
+    public GetCustomersByNameResponse createGetCustomersByNameResponse() {
+        return new GetCustomersByNameResponse();
+    }
+
+    public NoSuchCustomer createNoSuchCustomer() {
+        return new NoSuchCustomer();
+    }
+
+    public GetAllCustomersResponse createGetAllCustomersResponse() {
+        return new GetAllCustomersResponse();
+    }
+
+    public SaveCustomer createSaveCustomer() {
+        return new SaveCustomer();
+    }
+
+    public Company createCompany() {
+        return new Company();
+    }
+
+    public Product createProduct() {
+        return new Product();
+    }
+
+    public Customer createCustomer() {
+        return new Customer();
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"getCustomersByName")
+    public JAXBElement<GetCustomersByName> 
createGetCustomersByName(GetCustomersByName value) {
+        return new JAXBElement<GetCustomersByName>(_GetCustomersByName_QNAME, 
GetCustomersByName.class, null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"getCustomersByNameResponse")
+    public JAXBElement<GetCustomersByNameResponse> 
createGetCustomersByNameResponse(GetCustomersByNameResponse value) {
+        return new 
JAXBElement<GetCustomersByNameResponse>(_GetCustomersByNameResponse_QNAME, 
GetCustomersByNameResponse.class,
+                null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"NoSuchCustomer")
+    public JAXBElement<NoSuchCustomer> createNoSuchCustomer(NoSuchCustomer 
value) {
+        return new JAXBElement<NoSuchCustomer>(_NoSuchCustomer_QNAME, 
NoSuchCustomer.class, null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"getAllCustomers")
+    public JAXBElement<Object> createGetAllCustomers(Object value) {
+        return new JAXBElement<Object>(_GetAllCustomers_QNAME, Object.class, 
null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"getAllCustomersResponse")
+    public JAXBElement<GetAllCustomersResponse> 
createGetAllCustomersResponse(GetAllCustomersResponse value) {
+        return new 
JAXBElement<GetAllCustomersResponse>(_GetAllCustomersResponse_QNAME, 
GetAllCustomersResponse.class, null,
+                value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"saveCustomer")
+    public JAXBElement<SaveCustomer> createSaveCustomer(SaveCustomer value) {
+        return new JAXBElement<SaveCustomer>(_SaveCustomer_QNAME, 
SaveCustomer.class, null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"saveCustomerToo")
+    public JAXBElement<SaveCustomer> createSaveCustomerToo(SaveCustomer value) 
{
+        return new JAXBElement<SaveCustomer>(_SaveCustomerToo_QNAME, 
SaveCustomer.class, null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"company")
+    public JAXBElement<Company> createCompany(Company value) {
+        return new JAXBElement<Company>(_Company_QNAME, Company.class, null, 
value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"companyType")
+    public JAXBElement<CompanyType> createCompanyType(CompanyType value) {
+        return new JAXBElement<CompanyType>(_CompanyType_QNAME, 
CompanyType.class, null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";, name = 
"product")
+    public JAXBElement<Product> createProduct(Product value) {
+        return new JAXBElement<Product>(_Product_QNAME, Product.class, null, 
value);
+    }
+
+}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/Product.java
similarity index 67%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/Product.java
index 41b4e8e..9bc4c8f 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/Product.java
@@ -14,42 +14,39 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.multipart;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "product", propOrder = {
+        "name",
+        "description"
 })
-public class GetCustomersByName {
+public class Product {
 
+    @XmlElement(required = true)
     protected String name;
+    @XmlElement(required = true)
+    protected String description;
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
     public String getName() {
         return name;
     }
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
     public void setName(String value) {
         this.name = value;
     }
 
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String value) {
+        this.description = value;
+    }
+
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/SaveCustomer.java
similarity index 58%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/SaveCustomer.java
index 41b4e8e..300237f 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/SaveCustomer.java
@@ -14,42 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.multipart;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "saveCustomer", propOrder = {
+        "customer"
 })
-public class GetCustomersByName {
+public class SaveCustomer {
 
-    protected String name;
+    @XmlElement(required = true)
+    protected Customer customer;
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
-    public String getName() {
-        return name;
+    public Customer getCustomer() {
+        return customer;
     }
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
-    public void setName(String value) {
-        this.name = value;
+    public void setCustomer(Customer value) {
+        this.customer = value;
     }
 
 }
diff --git 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/package-info.java
similarity index 69%
copy from 
extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/package-info.java
index 839d62e..0d304a4 100644
--- 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/multipart/package-info.java
@@ -14,18 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.deployment;
-
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
-
-class SoapProcessor {
-
-    private static final String FEATURE = "camel-soap";
-
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
-
-}
[email protected](namespace = 
"http://multipart.it.soap.component.quarkus.camel.apache.org/";)
+package org.apache.camel.quarkus.component.soap.it.multipart;
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/Customer.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/Customer.java
new file mode 100644
index 0000000..c15e8ed
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/Customer.java
@@ -0,0 +1,108 @@
+/*
+ * 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.quarkus.component.soap.it.service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "customer", propOrder = {
+        "name",
+        "address",
+        "numOrders",
+        "revenue",
+        "test",
+        "birthDate",
+        "type"
+})
+public class Customer {
+
+    protected String name;
+    @XmlElement(nillable = true)
+    protected List<String> address;
+    protected int numOrders;
+    protected double revenue;
+    protected BigDecimal test;
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar birthDate;
+    @XmlSchemaType(name = "string")
+    protected CustomerType type;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String value) {
+        this.name = value;
+    }
+
+    public List<String> getAddress() {
+        if (address == null) {
+            address = new ArrayList<>();
+        }
+        return this.address;
+    }
+
+    public int getNumOrders() {
+        return numOrders;
+    }
+
+    public void setNumOrders(int value) {
+        this.numOrders = value;
+    }
+
+    public double getRevenue() {
+        return revenue;
+    }
+
+    public void setRevenue(double value) {
+        this.revenue = value;
+    }
+
+    public BigDecimal getTest() {
+        return test;
+    }
+
+    public void setTest(BigDecimal value) {
+        this.test = value;
+    }
+
+    public XMLGregorianCalendar getBirthDate() {
+        return birthDate;
+    }
+
+    public void setBirthDate(XMLGregorianCalendar value) {
+        this.birthDate = value;
+    }
+
+    public CustomerType getType() {
+        return type;
+    }
+
+    public void setType(CustomerType value) {
+        this.type = value;
+    }
+
+}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/CustomerService.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/CustomerService.java
new file mode 100644
index 0000000..01ac8a4
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/CustomerService.java
@@ -0,0 +1,50 @@
+/*
+ * 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.quarkus.component.soap.it.service;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+@WebService(targetNamespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, name = 
"CustomerService")
+@XmlSeeAlso({ ObjectFactory.class })
+@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+public interface CustomerService {
+
+    @WebMethod(action = 
"http://service.it.soap.component.quarkus.camel.apache.org/getAllAmericanCustomers";)
+    @WebResult(name = "getAllAmericanCustomersResponse", targetNamespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, partName = 
"parameters")
+    public GetAllAmericanCustomersResponse getAllAmericanCustomers();
+
+    @WebMethod(action = 
"http://service.it.soap.component.quarkus.camel.apache.org/saveCustomer";)
+    public void saveCustomer(
+
+            @WebParam(partName = "parameters", name = "saveCustomer", 
targetNamespace = "http://service.it.soap.component.quarkus.camel.apache.org/";) 
SaveCustomer parameters);
+
+    @WebMethod(action = 
"http://service.it.soap.component.quarkus.camel.apache.org/getCustomersByName";)
+    @WebResult(name = "getCustomersByNameResponse", targetNamespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, partName = 
"parameters")
+    public GetCustomersByNameResponse getCustomersByName(
+
+            @WebParam(partName = "parameters", name = "getCustomersByName", 
targetNamespace = "http://service.it.soap.component.quarkus.camel.apache.org/";) 
GetCustomersByName parameters)
+            throws NoSuchCustomerException;
+
+    @WebMethod(action = 
"http://service.it.soap.component.quarkus.camel.apache.org/getAllCustomers";)
+    @WebResult(name = "getAllCustomersResponse", targetNamespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, partName = 
"parameters")
+    public GetAllCustomersResponse getAllCustomers();
+}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/CustomerServiceService.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/CustomerServiceService.java
new file mode 100644
index 0000000..e34f5e0
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/CustomerServiceService.java
@@ -0,0 +1,57 @@
+/*
+ * 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.quarkus.component.soap.it.service;
+
+import java.net.URL;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+import javax.xml.ws.WebServiceFeature;
+
+@WebServiceClient(name = "CustomerServiceService", targetNamespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";)
+public class CustomerServiceService extends Service {
+
+    public final static QName SERVICE = new 
QName("http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "CustomerServiceService");
+    public final static QName CustomerServicePort = new 
QName("http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "CustomerServicePort");
+
+    public CustomerServiceService(URL wsdlLocation) {
+        super(wsdlLocation, SERVICE);
+    }
+
+    public CustomerServiceService(URL wsdlLocation, QName serviceName) {
+        super(wsdlLocation, serviceName);
+    }
+
+    public CustomerServiceService() {
+        
super(Thread.currentThread().getContextClassLoader().getResource("/wsdl/CustomerService.wsdl"),
 SERVICE);
+    }
+
+    @WebEndpoint(name = "CustomerServicePort")
+    public CustomerService getCustomerServicePort() {
+        return super.getPort(CustomerServicePort, CustomerService.class);
+    }
+
+    @WebEndpoint(name = "CustomerServicePort")
+    public CustomerService getCustomerServicePort(WebServiceFeature... 
features) {
+        return super.getPort(CustomerServicePort, CustomerService.class, 
features);
+    }
+
+}
diff --git 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/CustomerType.java
similarity index 68%
copy from 
extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/CustomerType.java
index 839d62e..bc1baab 100644
--- 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/CustomerType.java
@@ -14,18 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.deployment;
+package org.apache.camel.quarkus.component.soap.it.service;
 
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlType;
 
-class SoapProcessor {
+@XmlType(name = "customerType")
+@XmlEnum
+public enum CustomerType {
 
-    private static final String FEATURE = "camel-soap";
+    PRIVATE,
+    BUSINESS;
 
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
+    public String value() {
+        return name();
+    }
+
+    public static CustomerType fromValue(String v) {
+        return valueOf(v);
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetAllAmericanCustomersResponse.java
similarity index 58%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetAllAmericanCustomersResponse.java
index 41b4e8e..ab00feb 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetAllAmericanCustomersResponse.java
@@ -14,42 +14,30 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.service;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "getAllAmericanCustomersResponse", propOrder = {
+        "_return"
 })
-public class GetCustomersByName {
-
-    protected String name;
+public class GetAllAmericanCustomersResponse {
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
-    public String getName() {
-        return name;
-    }
+    @XmlElement(name = "return")
+    protected List<Customer> _return;
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
-    public void setName(String value) {
-        this.name = value;
+    public List<Customer> getReturn() {
+        if (_return == null) {
+            _return = new ArrayList<>();
+        }
+        return this._return;
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetAllCustomersResponse.java
similarity index 58%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetAllCustomersResponse.java
index 41b4e8e..3cfb302 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetAllCustomersResponse.java
@@ -14,42 +14,30 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.service;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "getAllCustomersResponse", propOrder = {
+        "_return"
 })
-public class GetCustomersByName {
-
-    protected String name;
+public class GetAllCustomersResponse {
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
-    public String getName() {
-        return name;
-    }
+    @XmlElement(name = "return")
+    protected List<Customer> _return;
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
-    public void setName(String value) {
-        this.name = value;
+    public List<Customer> getReturn() {
+        if (_return == null) {
+            _return = new ArrayList<>();
+        }
+        return this._return;
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetCustomersByName.java
similarity index 73%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetCustomersByName.java
index 41b4e8e..b91c675 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetCustomersByName.java
@@ -14,42 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.service;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
+@XmlType(name = "getCustomersByName", namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
         "name"
 })
 public class GetCustomersByName {
 
     protected String name;
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
     public String getName() {
         return name;
     }
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
     public void setName(String value) {
         this.name = value;
     }
-
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetCustomersByNameResponse.java
similarity index 58%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetCustomersByNameResponse.java
index 41b4e8e..105eea7 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/GetCustomersByNameResponse.java
@@ -14,42 +14,30 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.service;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "getCustomersByNameResponse", propOrder = {
+        "_return"
 })
-public class GetCustomersByName {
-
-    protected String name;
+public class GetCustomersByNameResponse {
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
-    public String getName() {
-        return name;
-    }
+    @XmlElement(name = "return")
+    protected List<Customer> _return;
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
-    public void setName(String value) {
-        this.name = value;
+    public List<Customer> getReturn() {
+        if (_return == null) {
+            _return = new ArrayList<>();
+        }
+        return this._return;
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/NoSuchCustomer.java
similarity index 58%
copy from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/NoSuchCustomer.java
index 41b4e8e..8422dc9 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/NoSuchCustomer.java
@@ -14,42 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.service;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "NoSuchCustomer", propOrder = {
+        "customerId"
 })
-public class GetCustomersByName {
+public class NoSuchCustomer {
 
-    protected String name;
+    @XmlElement(required = true, nillable = true)
+    protected String customerId;
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
-    public String getName() {
-        return name;
+    public String getCustomerId() {
+        return customerId;
     }
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
-    public void setName(String value) {
-        this.name = value;
+    public void setCustomerId(String value) {
+        this.customerId = value;
     }
 
 }
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/NoSuchCustomerException.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/NoSuchCustomerException.java
new file mode 100644
index 0000000..921d462
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/NoSuchCustomerException.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.quarkus.component.soap.it.service;
+
+import javax.xml.ws.WebFault;
+
+@WebFault(name = "NoSuchCustomer", targetNamespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";)
+public class NoSuchCustomerException extends Exception {
+    public static final long serialVersionUID = 1L;
+
+    private NoSuchCustomer faultInfo;
+
+    public NoSuchCustomerException() {
+        super();
+    }
+
+    public NoSuchCustomerException(String message) {
+        super(message);
+    }
+
+    public NoSuchCustomerException(String message, java.lang.Throwable cause) {
+        super(message, cause);
+    }
+
+    public NoSuchCustomerException(String message, NoSuchCustomer 
noSuchCustomer) {
+        super(message);
+        this.faultInfo = noSuchCustomer;
+    }
+
+    public NoSuchCustomerException(String message, NoSuchCustomer 
noSuchCustomer, java.lang.Throwable cause) {
+        super(message, cause);
+        this.faultInfo = noSuchCustomer;
+    }
+
+    public NoSuchCustomer getFaultInfo() {
+        return this.faultInfo;
+    }
+}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/ObjectFactory.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/ObjectFactory.java
new file mode 100644
index 0000000..72741b5
--- /dev/null
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/ObjectFactory.java
@@ -0,0 +1,124 @@
+/*
+ * 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.quarkus.component.soap.it.service;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+@XmlRegistry
+public class ObjectFactory {
+
+    private final static QName _GetCustomersByName_QNAME = new QName(
+            "http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "getCustomersByName");
+    private final static QName _GetCustomersByNameResponse_QNAME = new QName(
+            "http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "getCustomersByNameResponse");
+    private final static QName _NoSuchCustomer_QNAME = new 
QName("http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "NoSuchCustomer");
+    private final static QName _GetAllCustomers_QNAME = new 
QName("http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "getAllCustomers");
+    private final static QName _GetAllCustomersResponse_QNAME = new QName(
+            "http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "getAllCustomersResponse");
+    private final static QName _GetAllAmericanCustomers_QNAME = new QName(
+            "http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "getAllAmericanCustomers");
+    private final static QName _GetAllAmericanCustomersResponse_QNAME = new 
QName(
+            "http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "getAllAmericanCustomersResponse");
+    private final static QName _SaveCustomer_QNAME = new 
QName("http://service.it.soap.component.quarkus.camel.apache.org/";,
+            "saveCustomer");
+
+    public ObjectFactory() {
+    }
+
+    public GetCustomersByName createGetCustomersByName() {
+        return new GetCustomersByName();
+    }
+
+    public GetCustomersByNameResponse createGetCustomersByNameResponse() {
+        return new GetCustomersByNameResponse();
+    }
+
+    public NoSuchCustomer createNoSuchCustomer() {
+        return new NoSuchCustomer();
+    }
+
+    public GetAllCustomersResponse createGetAllCustomersResponse() {
+        return new GetAllCustomersResponse();
+    }
+
+    public GetAllAmericanCustomersResponse 
createGetAllAmericanCustomersResponse() {
+        return new GetAllAmericanCustomersResponse();
+    }
+
+    public SaveCustomer createSaveCustomer() {
+        return new SaveCustomer();
+    }
+
+    public Customer createCustomer() {
+        return new Customer();
+    }
+
+    @XmlElementDecl(namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, name = 
"getCustomersByName")
+    public JAXBElement<GetCustomersByName> 
createGetCustomersByName(GetCustomersByName value) {
+        return new JAXBElement<GetCustomersByName>(_GetCustomersByName_QNAME, 
GetCustomersByName.class, null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, name = 
"getCustomersByNameResponse")
+    public JAXBElement<GetCustomersByNameResponse> 
createGetCustomersByNameResponse(GetCustomersByNameResponse value) {
+        return new 
JAXBElement<GetCustomersByNameResponse>(_GetCustomersByNameResponse_QNAME, 
GetCustomersByNameResponse.class,
+                null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, name = 
"NoSuchCustomer")
+    public JAXBElement<NoSuchCustomer> createNoSuchCustomer(NoSuchCustomer 
value) {
+        return new JAXBElement<NoSuchCustomer>(_NoSuchCustomer_QNAME, 
NoSuchCustomer.class, null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, name = 
"getAllCustomers")
+    public JAXBElement<Object> createGetAllCustomers(Object value) {
+        return new JAXBElement<Object>(_GetAllCustomers_QNAME, Object.class, 
null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, name = 
"getAllCustomersResponse")
+    public JAXBElement<GetAllCustomersResponse> 
createGetAllCustomersResponse(GetAllCustomersResponse value) {
+        return new 
JAXBElement<GetAllCustomersResponse>(_GetAllCustomersResponse_QNAME, 
GetAllCustomersResponse.class, null,
+                value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, name = 
"getAllAmericanCustomers")
+    public JAXBElement<Object> createGetAllAmericanCustomers(Object value) {
+        return new JAXBElement<Object>(_GetAllAmericanCustomers_QNAME, 
Object.class, null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, name = 
"getAllAmericanCustomersResponse")
+    public JAXBElement<GetAllAmericanCustomersResponse> 
createGetAllAmericanCustomersResponse(
+            GetAllAmericanCustomersResponse value) {
+        return new 
JAXBElement<GetAllAmericanCustomersResponse>(_GetAllAmericanCustomersResponse_QNAME,
+                GetAllAmericanCustomersResponse.class, null, value);
+    }
+
+    @XmlElementDecl(namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";, name = 
"saveCustomer")
+    public JAXBElement<SaveCustomer> createSaveCustomer(SaveCustomer value) {
+        return new JAXBElement<SaveCustomer>(_SaveCustomer_QNAME, 
SaveCustomer.class, null, value);
+    }
+
+}
diff --git 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/SaveCustomer.java
similarity index 58%
rename from 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
rename to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/SaveCustomer.java
index 41b4e8e..88cebff 100644
--- 
a/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/example/GetCustomersByName.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/SaveCustomer.java
@@ -14,42 +14,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.it.example;
+package org.apache.camel.quarkus.component.soap.it.service;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "getCustomersByName", namespace = 
"http://example.it.soap.component.quarkus.camel.apache.org/";, propOrder = {
-        "name"
+@XmlType(name = "saveCustomer", propOrder = {
+        "customer"
 })
-public class GetCustomersByName {
+public class SaveCustomer {
 
-    protected String name;
+    @XmlElement(required = true)
+    protected Customer customer;
 
-    /**
-     * Gets the value of the name property.
-     *
-     * @return
-     *         possible object is
-     *         {@link String }
-     *
-     */
-    public String getName() {
-        return name;
+    public Customer getCustomer() {
+        return customer;
     }
 
-    /**
-     * Sets the value of the name property.
-     *
-     * @param value
-     *              allowed object is
-     *              {@link String }
-     *
-     */
-    public void setName(String value) {
-        this.name = value;
+    public void setCustomer(Customer value) {
+        this.customer = value;
     }
-
 }
diff --git 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/package-info.java
similarity index 69%
copy from 
extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
copy to 
integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/package-info.java
index 839d62e..aab1616 100644
--- 
a/extensions/soap/deployment/src/main/java/org/apache/camel/quarkus/component/soap/deployment/SoapProcessor.java
+++ 
b/integration-tests/soap/src/main/java/org/apache/camel/quarkus/component/soap/it/service/package-info.java
@@ -14,18 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.soap.deployment;
-
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
-
-class SoapProcessor {
-
-    private static final String FEATURE = "camel-soap";
-
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
-
-}
[email protected](namespace = 
"http://service.it.soap.component.quarkus.camel.apache.org/";)
+package org.apache.camel.quarkus.component.soap.it.service;
diff --git a/integration-tests/soap/src/main/resources/application.properties 
b/integration-tests/soap/src/main/resources/application.properties
new file mode 100644
index 0000000..972e7d7
--- /dev/null
+++ b/integration-tests/soap/src/main/resources/application.properties
@@ -0,0 +1,18 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+quarkus.camel.native.resources.include-patterns = schema/*,wsdl/*
diff --git 
a/integration-tests/soap/src/main/resources/schema/CustomerService.xsd 
b/integration-tests/soap/src/main/resources/schema/CustomerService.xsd
new file mode 100644
index 0000000..fed1977
--- /dev/null
+++ b/integration-tests/soap/src/main/resources/schema/CustomerService.xsd
@@ -0,0 +1,88 @@
+<?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.
+
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
+           
xmlns:tns="http://service.it.soap.component.quarkus.camel.apache.org/"; 
attributeFormDefault="unqualified"
+           elementFormDefault="unqualified" 
targetNamespace="http://service.it.soap.component.quarkus.camel.apache.org/";>
+    <xs:element name="getCustomersByName" type="tns:getCustomersByName"/>
+    <xs:element name="getCustomersByNameResponse" 
type="tns:getCustomersByNameResponse"/>
+    <xs:complexType name="getCustomersByName">
+        <xs:sequence>
+            <xs:element minOccurs="0" name="name" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="getCustomersByNameResponse">
+        <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="return" 
type="tns:customer"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="customer">
+        <xs:sequence>
+            <xs:element minOccurs="0" name="name" type="xs:string"/>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="address" 
nillable="true" type="xs:string"/>
+            <xs:element name="numOrders" type="xs:int"/>
+            <xs:element name="revenue" type="xs:double"/>
+            <xs:element minOccurs="0" name="test" type="xs:decimal"/>
+            <xs:element minOccurs="0" name="birthDate" type="xs:dateTime"/>
+            <xs:element minOccurs="0" name="type" type="tns:customerType"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:simpleType name="customerType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="PRIVATE"/>
+            <xs:enumeration value="BUSINESS"/>
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:element name="NoSuchCustomer" type="tns:NoSuchCustomer"/>
+    <xs:complexType name="NoSuchCustomer">
+        <xs:sequence>
+            <xs:element name="customerId" nillable="true" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:element name="getAllCustomers">
+    </xs:element>
+    <xs:element name="getAllCustomersResponse" 
type="tns:getAllCustomersResponse">
+    </xs:element>
+
+    <xs:complexType name="getAllCustomersResponse">
+        <xs:sequence>
+            <xs:element name="return" type="tns:customer" 
maxOccurs="unbounded" minOccurs="0"></xs:element>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:element name="getAllAmericanCustomers">
+    </xs:element>
+    <xs:element name="getAllAmericanCustomersResponse" 
type="tns:getAllAmericanCustomersResponse">
+    </xs:element>
+
+    <xs:complexType name="getAllAmericanCustomersResponse">
+        <xs:sequence>
+            <xs:element name="return" type="tns:customer" 
maxOccurs="unbounded" minOccurs="0"></xs:element>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:element name="saveCustomer" type="tns:saveCustomer">
+    </xs:element>
+    <xs:complexType name="saveCustomer">
+        <xs:sequence>
+            <xs:element name="customer" type="tns:customer"></xs:element>
+        </xs:sequence>
+    </xs:complexType>
+
+</xs:schema>
diff --git 
a/integration-tests/soap/src/main/resources/wsdl/CustomerService.wsdl 
b/integration-tests/soap/src/main/resources/wsdl/CustomerService.wsdl
new file mode 100644
index 0000000..fd63009
--- /dev/null
+++ b/integration-tests/soap/src/main/resources/wsdl/CustomerService.wsdl
@@ -0,0 +1,198 @@
+<?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.
+
+-->
+<wsdl:definitions name="CustomerServiceService"
+    targetNamespace="http://customerservice.example.com/"; 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
+    xmlns:tns="http://customerservice.example.com/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";>
+    <wsdl:types>
+        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
+            xmlns:tns="http://customerservice.example.com/"; 
attributeFormDefault="unqualified"
+            elementFormDefault="unqualified" 
targetNamespace="http://customerservice.example.com/";>
+            <xs:element name="getCustomersByName" 
type="tns:getCustomersByName" />
+            <xs:element name="getCustomersByNameResponse" 
type="tns:getCustomersByNameResponse" />
+            <xs:complexType name="getCustomersByName">
+                <xs:sequence>
+                    <xs:element minOccurs="0" name="name" type="xs:string" />
+                </xs:sequence>
+            </xs:complexType>
+            <xs:complexType name="getCustomersByNameResponse">
+                <xs:sequence>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="return"
+                        type="tns:customer" />
+                </xs:sequence>
+            </xs:complexType>
+            <xs:complexType name="customer">
+                <xs:sequence>
+                    <xs:element minOccurs="0" name="name" type="xs:string" />
+                    <xs:element maxOccurs="unbounded" minOccurs="0" 
name="address"
+                        nillable="true" type="xs:string" />
+                    <xs:element name="numOrders" type="xs:int" />
+                    <xs:element name="revenue" type="xs:double" />
+                    <xs:element minOccurs="0" name="test" type="xs:decimal" />
+                    <xs:element minOccurs="0" name="birthDate" 
type="xs:dateTime" />
+                    <xs:element minOccurs="0" name="type" 
type="tns:customerType" />
+                </xs:sequence>
+            </xs:complexType>
+            <xs:simpleType name="customerType">
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="PRIVATE" />
+                    <xs:enumeration value="BUSINESS" />
+                </xs:restriction>
+            </xs:simpleType>
+            <xs:element name="NoSuchCustomer" type="tns:NoSuchCustomer" />
+            <xs:complexType name="NoSuchCustomer">
+                <xs:sequence>
+                    <xs:element name="customerId" nillable="true" 
type="xs:string" />
+                </xs:sequence>
+            </xs:complexType>
+            <xs:element name="getAllCustomers">
+            </xs:element>
+            <xs:element name="getAllCustomersResponse" 
type="tns:getAllCustomersResponse">
+            </xs:element>
+
+            <xs:complexType name="getAllCustomersResponse">
+                <xs:sequence>
+                    <xs:element name="return" type="tns:customer" 
maxOccurs="unbounded"
+                        minOccurs="0"></xs:element>
+                </xs:sequence>
+            </xs:complexType>
+            
+            <xs:element name="getAllAmericanCustomers">
+            </xs:element>
+            <xs:element name="getAllAmericanCustomersResponse" 
type="tns:getAllAmericanCustomersResponse">
+            </xs:element>
+
+            <xs:complexType name="getAllAmericanCustomersResponse">
+                <xs:sequence>
+                    <xs:element name="return" type="tns:customer" 
maxOccurs="unbounded"
+                        minOccurs="0"></xs:element>
+                </xs:sequence>
+            </xs:complexType>
+
+            <xs:element name="saveCustomer" type="tns:saveCustomer">
+            </xs:element>
+            <xs:complexType name="saveCustomer">
+                <xs:sequence>
+                    <xs:element name="customer" 
type="tns:customer"></xs:element>
+                </xs:sequence>
+            </xs:complexType>
+
+        </xs:schema>
+    </wsdl:types>
+    <wsdl:message name="getCustomersByNameResponse">
+        <wsdl:part name="parameters" element="tns:getCustomersByNameResponse">
+        </wsdl:part>
+    </wsdl:message>
+    <wsdl:message name="getCustomersByName">
+        <wsdl:part name="parameters" element="tns:getCustomersByName">
+        </wsdl:part>
+    </wsdl:message>
+    <wsdl:message name="NoSuchCustomerException">
+        <wsdl:part name="NoSuchCustomerException" element="tns:NoSuchCustomer">
+        </wsdl:part>
+    </wsdl:message>
+    <wsdl:message name="getAllCustomers">
+    </wsdl:message>
+    <wsdl:message name="getAllCustomersResponse">
+        <wsdl:part name="parameters" 
element="tns:getAllCustomersResponse"></wsdl:part>
+    </wsdl:message>   
+       <wsdl:message name="getAllAmericanCustomers">
+    </wsdl:message>
+    <wsdl:message name="getAllAmericanCustomersResponse">
+        <wsdl:part name="parameters" 
element="tns:getAllAmericanCustomersResponse"></wsdl:part>
+    </wsdl:message>   
+    <wsdl:message name="saveCustomerRequest">
+        <wsdl:part name="parameters" element="tns:saveCustomer"></wsdl:part>
+    </wsdl:message>
+    <wsdl:message name="saveCustomerResponse">
+    </wsdl:message>
+    <wsdl:portType name="CustomerService">
+        <wsdl:operation name="getCustomersByName">
+            <wsdl:input name="getCustomersByName" 
message="tns:getCustomersByName">
+            </wsdl:input>
+            <wsdl:output name="getCustomersByNameResponse" 
message="tns:getCustomersByNameResponse">
+            </wsdl:output>
+            <wsdl:fault name="NoSuchCustomerException" 
message="tns:NoSuchCustomerException">
+            </wsdl:fault>
+        </wsdl:operation>
+        <wsdl:operation name="getAllCustomers">
+            <wsdl:input message="tns:getAllCustomers"></wsdl:input>
+            <wsdl:output message="tns:getAllCustomersResponse"></wsdl:output>
+        </wsdl:operation>
+        <wsdl:operation name="getAllAmericanCustomers">
+            <wsdl:input message="tns:getAllAmericanCustomers"></wsdl:input>
+            <wsdl:output 
message="tns:getAllAmericanCustomersResponse"></wsdl:output>
+        </wsdl:operation>
+        <wsdl:operation name="saveCustomer">
+            <wsdl:input message="tns:saveCustomerRequest"></wsdl:input>
+            <wsdl:output message="tns:saveCustomerResponse"></wsdl:output>
+        </wsdl:operation>
+    </wsdl:portType>
+    <wsdl:binding name="CustomerServiceServiceSoapBinding"
+        type="tns:CustomerService">
+
+        <soap:binding style="document"
+            transport="http://schemas.xmlsoap.org/soap/http"; />
+        <wsdl:operation name="getCustomersByName">
+
+            <soap:operation
+                
soapAction="http://customerservice.example.com/getCustomersByName"; />
+            <wsdl:input name="getCustomersByName">
+
+                <soap:body use="literal" />
+            </wsdl:input>
+            <wsdl:output name="getCustomersByNameResponse">
+
+                <soap:body use="literal" />
+            </wsdl:output>
+            <wsdl:fault name="NoSuchCustomerException">
+
+                <soap:fault use="literal" name="NoSuchCustomerException" />
+            </wsdl:fault>
+        </wsdl:operation>
+        <wsdl:operation name="getAllCustomers">
+            <soap:operation 
soapAction="http://customerservice.example.com/getAllCustomers"; />
+            <wsdl:output>
+                <soap:body use="literal" />
+            </wsdl:output>
+        </wsdl:operation>
+        <wsdl:operation name="getAllAmericanCustomers">
+            <soap:operation 
soapAction="http://customerservice.example.com/getAllAmericanCustomers"; />
+            <wsdl:output>
+                <soap:body use="literal" />
+            </wsdl:output>
+        </wsdl:operation>
+        <wsdl:operation name="saveCustomer">
+            <soap:operation 
soapAction="http://customerservice.example.com/saveCustomer"; />
+            <wsdl:input>
+                <soap:body use="literal" />
+            </wsdl:input>
+            <wsdl:output>
+                <soap:body use="literal" />
+            </wsdl:output>
+        </wsdl:operation>
+    </wsdl:binding>
+    <wsdl:service name="CustomerServiceService">
+        <wsdl:port name="CustomerServicePort" 
binding="tns:CustomerServiceServiceSoapBinding">
+            <soap:address location="http://localhost:9090/CustomerServicePort"; 
/>
+        </wsdl:port>
+    </wsdl:service>
+</wsdl:definitions>
+
diff --git 
a/integration-tests/soap/src/main/resources/wsdl/MultiPartCustomerService.wsdl 
b/integration-tests/soap/src/main/resources/wsdl/MultiPartCustomerService.wsdl
new file mode 100644
index 0000000..5759b5b
--- /dev/null
+++ 
b/integration-tests/soap/src/main/resources/wsdl/MultiPartCustomerService.wsdl
@@ -0,0 +1,247 @@
+<?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.
+
+-->
+<wsdl:definitions name="CustomerServiceMultiPart"
+    targetNamespace="http://multipart.customerservice.example.com/"; 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
+    xmlns:tns="http://multipart.customerservice.example.com/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+    xmlns:typens="http://multipart.customerservice.example.com/";
+    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";>
+
+       <wsdl:types>
+
+        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
+            xmlns:tns="http://multipart.customerservice.example.com/"; 
attributeFormDefault="unqualified"
+            elementFormDefault="unqualified" 
targetNamespace="http://multipart.customerservice.example.com/";>
+            
+                       <xs:element name="getCustomersByName" 
type="tns:getCustomersByName" />
+                       <xs:element name="getCustomersByNameResponse" 
type="tns:getCustomersByNameResponse" />
+                       <xs:complexType name="getCustomersByName">
+                               <xs:sequence>
+                                       <xs:element minOccurs="0" name="name" 
type="xs:string" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:complexType name="getCustomersByNameResponse">
+                               <xs:sequence>
+                                       <xs:element maxOccurs="unbounded" 
minOccurs="0" name="return"
+                                               type="tns:customer" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:complexType name="customer">
+                               <xs:sequence>
+                                       <xs:element minOccurs="0" name="name" 
type="xs:string" />
+                                       <xs:element maxOccurs="unbounded" 
minOccurs="0" name="address"
+                                               nillable="true" 
type="xs:string" />
+                                       <xs:element name="numOrders" 
type="xs:int" />
+                                       <xs:element name="revenue" 
type="xs:double" />
+                                       <xs:element minOccurs="0" name="test" 
type="xs:decimal" />
+                                       <xs:element minOccurs="0" 
name="birthDate" type="xs:dateTime" />
+                                       <xs:element minOccurs="0" name="type" 
type="tns:customerType" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:simpleType name="customerType">
+                               <xs:restriction base="xs:string">
+                                       <xs:enumeration value="PRIVATE" />
+                                       <xs:enumeration value="BUSINESS" />
+                               </xs:restriction>
+                       </xs:simpleType>
+                       <xs:element name="NoSuchCustomer" 
type="tns:NoSuchCustomer" />
+                       <xs:complexType name="NoSuchCustomer">
+                               <xs:sequence>
+                                       <xs:element name="customerId" 
nillable="true" type="xs:string" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:element name="getAllCustomers">
+                       </xs:element>
+                       <xs:element name="getAllCustomersResponse" 
type="tns:getAllCustomersResponse">
+                       </xs:element>
+
+                       <xs:complexType name="getAllCustomersResponse">
+                               <xs:sequence>
+                                       <xs:element name="return" 
type="tns:customer" maxOccurs="unbounded"
+                                               minOccurs="0"></xs:element>
+                               </xs:sequence>
+                       </xs:complexType>
+
+                       <xs:element name="saveCustomer" type="tns:saveCustomer">
+                       </xs:element>
+                       
+                       <!--  This element reuses the tns:SaveCustomer type, 
but applies a different element QName (than above) -->
+                       <xs:element name="saveCustomerToo" 
type="tns:saveCustomer">
+            </xs:element>
+                       <xs:complexType name="saveCustomer">
+                               <xs:sequence>
+                                       <xs:element name="customer" 
type="tns:customer"></xs:element>
+                               </xs:sequence>
+                       </xs:complexType>
+                       
+                       <xs:element name="company" 
type="tns:company"></xs:element>
+                       <xs:complexType name="company">
+                               <xs:sequence>
+                                       <xs:element name="name" 
type="xs:string" />
+                                       <xs:element name="president" 
type="xs:string" />
+                               </xs:sequence>
+                       </xs:complexType>
+
+                       <xs:element name="companyType" type="tns:companyType" />
+                       <xs:simpleType name="companyType">
+                               <xs:restriction base="xs:string">
+                                       <xs:enumeration value="PRIVATE" />
+                                       <xs:enumeration value="PUBLIC" />
+                               </xs:restriction>
+                       </xs:simpleType>
+
+                       <xs:element name="product" type="tns:product" />
+                       <xs:complexType name="product">
+                               <xs:sequence>
+                                       <xs:element name="name" 
type="xs:string" />
+                                       <xs:element name="description" 
type="xs:string" />
+                               </xs:sequence>
+                       </xs:complexType>
+               </xs:schema>
+
+       </wsdl:types>
+   
+
+    <!--  message with two parts -->
+    <wsdl:message name="getCustomersByName">
+        <wsdl:part name="parameters" element="typens:getCustomersByName"/>
+        <wsdl:part name="product" element="typens:product"/>
+    </wsdl:message>
+    <wsdl:message name="getCustomersByNameResponse">
+        <wsdl:part name="parameters" 
element="typens:getCustomersByNameResponse"/>
+    </wsdl:message>
+    
+    <wsdl:message name="NoSuchCustomerException">
+        <wsdl:part name="NoSuchCustomerException" 
element="typens:NoSuchCustomer"/>
+    </wsdl:message>
+     
+     <!--  message with an out part -->
+    <wsdl:message name="getAllCustomers">
+    </wsdl:message>
+    <wsdl:message name="getAllCustomersResponse">
+        <wsdl:part name="parameters" element="typens:getAllCustomersResponse"/>
+        <wsdl:part name="companyType" element="typens:companyType"/>
+    </wsdl:message> 
+        
+    <!--  multiple in parts and an inout -->  
+    <wsdl:message name="saveCustomer">
+        <wsdl:part name="parameters" element="typens:saveCustomer"/>
+        <wsdl:part name="product" element="typens:product"/>
+        <wsdl:part name="company" element="typens:company"/>          
+    </wsdl:message>    
+    <wsdl:message name="saveCustomerResponse">
+       <wsdl:part name="company" element="typens:company"/>
+    </wsdl:message>
+    
+    <wsdl:message name="saveCustomerToo">
+        <wsdl:part name="parameters" element="typens:saveCustomerToo"/>
+        <wsdl:part name="product" element="typens:product"/>
+        <wsdl:part name="company" element="typens:company"/>          
+    </wsdl:message>  
+    <wsdl:message name="saveCustomerResponseToo">
+       <wsdl:part name="company" element="typens:company"/>
+    </wsdl:message>
+    
+    <!--  message with an out part -->   
+    <wsdl:portType name="MultiPartCustomerService">
+        <wsdl:operation name="getCustomersByName">
+            <wsdl:input name="getCustomersByName" 
message="tns:getCustomersByName"/>
+            <wsdl:output name="getCustomersByNameResponse" 
message="tns:getCustomersByNameResponse"/>
+            <wsdl:fault name="NoSuchCustomerException" 
message="tns:NoSuchCustomerException"/>
+        </wsdl:operation>
+        <wsdl:operation name="getAllCustomers">
+            <wsdl:input message="tns:getAllCustomers"/>
+            <wsdl:output message="tns:getAllCustomersResponse"/>
+        </wsdl:operation>
+        <wsdl:operation name="saveCustomer">
+            <wsdl:input message="tns:saveCustomer"/>
+            <wsdl:output message="tns:saveCustomerResponse"/>
+        </wsdl:operation>
+        <wsdl:operation name="saveCustomerToo">
+            <wsdl:input message="tns:saveCustomerToo"/>
+            <wsdl:output name="saveCustomerResponseToo" 
message="tns:saveCustomerResponseToo"/>
+        </wsdl:operation>
+    </wsdl:portType>
+    
+    <wsdl:binding name="CustomerServiceMultiPart" 
type="tns:MultiPartCustomerService">
+    
+        <soap:binding style="document" 
transport="http://schemas.xmlsoap.org/soap/http"; />
+    
+        <!--  operation with a single header part in the request -->      
+        <wsdl:operation name="getCustomersByName">
+            <soap:operation 
soapAction="http://multipart.customerservice.example.com/getCustomersByName"; />
+            <wsdl:input>
+                <soap:header use="literal" part="product" 
message="tns:getCustomersByName" />
+                <soap:body use="literal" />
+            </wsdl:input>
+            <wsdl:output name="getCustomersByNameResponse">
+                <soap:body use="literal" />
+            </wsdl:output>
+            <wsdl:fault name="NoSuchCustomerException">
+                <soap:fault use="literal" name="NoSuchCustomerException" />
+            </wsdl:fault>
+        </wsdl:operation> 
+            
+        <!--  operation with a single header part in the response -->          
   
+        <wsdl:operation name="getAllCustomers">
+            <soap:operation 
soapAction="http://multipart.customerservice.example.com/getAllCustomers"; />
+            <wsdl:input></wsdl:input>
+            <wsdl:output>
+                <soap:header use="literal" part="company" 
message="tns:getAllCustomers" />
+                <soap:body use="literal" />      
+            </wsdl:output>
+        </wsdl:operation>
+              
+        <!--  operation with two header values in request - one is an inout -->
+        <wsdl:operation name="saveCustomer">
+            <soap:operation 
soapAction="http://multipart.customerservice.example.com/saveCustomer"; />
+            <wsdl:input>
+                <soap:header use="literal" part="product" 
message="tns:saveCustomer" />
+                <soap:header use="literal" part="company" 
message="tns:saveCustomer" />
+                <soap:body use="literal" />
+            </wsdl:input>
+            <wsdl:output name="saveCustomerResponse">
+                   <soap:header use="literal" part="company" 
message="tns:saveCustomer" />
+                <soap:body use="literal" />
+            </wsdl:output>
+        </wsdl:operation>
+        
+        <!--  operation to test reused parameters and a parameters that reuses 
a type but applies a new namespace -->
+        <wsdl:operation name="saveCustomerToo">
+            <soap:operation 
soapAction="http://multipart.customerservice.example.com/saveCustomerToo"; />
+            <wsdl:input>
+                <soap:header use="literal" part="product" 
message="tns:saveCustomerToo" />
+                <soap:header use="literal" part="company" 
message="tns:saveCustomerToo" />
+                <soap:body use="literal" />
+            </wsdl:input>
+            <wsdl:output name="saveCustomerResponseToo">
+                <soap:header use="literal" part="company" 
message="tns:saveCustomerToo" />
+                <soap:body use="literal" />
+            </wsdl:output>
+        </wsdl:operation>  
+              
+    </wsdl:binding>
+    
+    
+    <wsdl:service name="MultiPartCustomerServiceService">
+        <wsdl:port name="MultiPartCustomerServicePort" 
binding="tns:CustomerServiceMultiPart">
+            <soap:address 
location="http://localhost:9090/MultipartCustomerService"; />
+        </wsdl:port>
+    </wsdl:service>
+</wsdl:definitions>
diff --git 
a/integration-tests/soap/src/test/java/org/apache/camel/quarkus/component/soap/it/SoapTest.java
 
b/integration-tests/soap/src/test/java/org/apache/camel/quarkus/component/soap/it/SoapTest.java
index b693c93..58b5726 100644
--- 
a/integration-tests/soap/src/test/java/org/apache/camel/quarkus/component/soap/it/SoapTest.java
+++ 
b/integration-tests/soap/src/test/java/org/apache/camel/quarkus/component/soap/it/SoapTest.java
@@ -16,82 +16,133 @@
  */
 package org.apache.camel.quarkus.component.soap.it;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.UUID;
 
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
+import org.apache.commons.io.IOUtils;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.Matchers.equalTo;
 
 @QuarkusTest
 class SoapTest {
 
-    @Test
-    public void testMarshal() {
-        final String msg = UUID.randomUUID().toString().replace("-", "");
-        String resp = RestAssured.given()
-                
.contentType(ContentType.TEXT).body(msg).post("/soap/marshal/1.1") //
-                .then().statusCode(201)
-                .extract().body().asString();
-        assertThat(resp).contains("<ns3:getCustomersByName>");
-        assertThat(resp).contains("<name>" + msg + "</name>");
-        assertThat(resp).contains("<ns2:Envelope 
xmlns:ns2=\"http://schemas.xmlsoap.org/soap/envelope/\"";);
+    @ParameterizedTest
+    @ValueSource(strings = { "1.1", "1.2" })
+    public void testMarshal(String soapVersion) throws IOException {
+        RestAssured.given()
+                .contentType(ContentType.TEXT)
+                .body("Mr Camel Quarkus SOAP V" + soapVersion)
+                .pathParam("soapVersion", soapVersion)
+                .post("/soap/marshal/{soapVersion}")
+                .then()
+                .statusCode(201)
+                .body("Envelope.Body.getCustomersByName.name", equalTo("Mr 
Camel Quarkus SOAP V" + soapVersion));
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = { "1.1", "1.2" })
+    public void testMarshalFault(String soapVersion) {
+        String prefix = "Envelope.Body.Fault";
+        String xpath = prefix;
+        if (soapVersion.equals("1.1")) {
+            xpath += ".faultstring";
+        } else {
+            xpath += ".Reason.Text";
+        }
+
+        RestAssured.given()
+                .body("invalid customer")
+                .pathParam("soapVersion", soapVersion)
+                .post("/soap/marshal/fault/{soapVersion}")
+                .then()
+                .statusCode(201)
+                .body(xpath, equalTo("Specified customer was not found"));
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = { "1.1", "1.2" })
+    public void testUnmarshalSoap(String soapVersion) throws IOException {
+        RestAssured.given()
+                .contentType(ContentType.XML)
+                .body(readFile("/getCustomersByName" + soapVersion + ".xml"))
+                .pathParam("soapVersion", soapVersion)
+                .post("/soap/unmarshal/{soapVersion}")
+                .then()
+                .statusCode(201)
+                .body(equalTo("Mr Camel Quarkus SOAP V" + soapVersion));
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = { "1.1", "1.2" })
+    public void testUnmarshalSoapFault(String soapVersion) throws IOException {
+        RestAssured.given()
+                .contentType(ContentType.XML)
+                .body(readFile("/soapFault" + soapVersion + ".xml"))
+                .pathParam("soapVersion", soapVersion)
+                .post("/soap/unmarshal/fault/{soapVersion}")
+                .then()
+                .statusCode(201)
+                .body(equalTo("Customer not found"));
     }
 
     @Test
-    public void testMarshalSoap12() {
+    public void marshalUnmarshal() {
         final String msg = UUID.randomUUID().toString().replace("-", "");
-        // GetCustomersS
-        String resp = RestAssured.given()
-                
.contentType(ContentType.TEXT).body(msg).post("/soap/marshal/1.2") //
-                .then().statusCode(201).extract().body().asString();
-        assertThat(resp).contains("<ns3:getCustomersByName>");
-        assertThat(resp).contains("<name>" + msg + "</name>");
-        assertThat(resp).contains("<ns2:Envelope 
xmlns:ns2=\"http://www.w3.org/2003/05/soap-envelope\"";);
+        RestAssured.given()
+                .contentType(ContentType.TEXT)
+                .body(msg)
+                .post("/soap/marshal/unmarshal")
+                .then()
+                .statusCode(201)
+                .body(equalTo(msg));
     }
 
     @Test
-    public void testUnmarshalSoap() {
+    public void qNameStrategy() {
         final String msg = UUID.randomUUID().toString().replace("-", "");
-        String resp = RestAssured.given()
-                .contentType(ContentType.XML).body(getSoapMessage("1.1", 
msg)).post("/soap/unmarshal/1.1") //
-                .then().statusCode(201)
-                .extract().body().asString();
-        assertThat(resp).isEqualTo(msg);
+        RestAssured.given()
+                .contentType(ContentType.TEXT)
+                .body(msg)
+                .post("/soap/qname/strategy")
+                .then()
+                .statusCode(201)
+                .body(equalTo(msg));
     }
 
     @Test
-    public void testUnmarshalSoap12() {
+    public void serviceInterfaceStrategy() {
         final String msg = UUID.randomUUID().toString().replace("-", "");
-        String resp = RestAssured.given()
-                .contentType(ContentType.XML).body(getSoapMessage("1.2", 
msg)).post("/soap/unmarshal/1.2") //
-                .then().statusCode(201)
-                .extract().body().asString();
-        assertThat(resp).isEqualTo(msg);
+        RestAssured.given()
+                .contentType(ContentType.TEXT)
+                .body(msg)
+                .post("/soap/serviceinterface/strategy")
+                .then()
+                .statusCode(201)
+                .body(equalTo(msg));
     }
 
     @Test
-    public void round() {
+    public void multipart() {
         final String msg = UUID.randomUUID().toString().replace("-", "");
-        String resp = RestAssured.given()
-                .contentType(ContentType.TEXT).body(msg).post("/soap/round") //
-                .then().statusCode(201)
-                .extract().body().asString();
-        assertThat(resp).isEqualTo(msg);
+        RestAssured.given()
+                .contentType(ContentType.TEXT)
+                .body(msg)
+                .post("/soap/multipart")
+                .then()
+                .statusCode(201)
+                .body(equalTo(msg));
     }
 
-    private String getSoapMessage(String namespace, String name) {
-        final String url = (namespace.equals("1.2") ? 
"http://www.w3.org/2003/05/soap-envelope";
-                : "http://schemas.xmlsoap.org/soap/envelope/";);
-        return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" 
+
-                "<soap:Envelope xmlns:soap=\"" + url + "\">" +
-                "<soap:Body>" +
-                "<ns2:getCustomersByName 
xmlns:ns2=\"http://example.it.soap.component.quarkus.camel.apache.org/\";>" +
-                "<name>" + name + "</name>" +
-                "</ns2:getCustomersByName>" +
-                "</soap:Body>" +
-                "</soap:Envelope>";
+    private String readFile(String path) throws IOException {
+        InputStream resource = SoapTest.class.getResourceAsStream(path);
+        return IOUtils.toString(resource, StandardCharsets.UTF_8);
     }
 }
diff --git 
a/integration-tests/soap/src/test/resources/getCustomersByName1.1.xml 
b/integration-tests/soap/src/test/resources/getCustomersByName1.1.xml
new file mode 100644
index 0000000..2e036d6
--- /dev/null
+++ b/integration-tests/soap/src/test/resources/getCustomersByName1.1.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+    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.
+
+-->
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
+    <soap:Body>
+        <ns2:getCustomersByName 
xmlns:ns2="http://service.it.soap.component.quarkus.camel.apache.org/";>
+            <name>Mr Camel Quarkus SOAP V1.1</name>
+        </ns2:getCustomersByName>
+    </soap:Body>
+</soap:Envelope>
diff --git 
a/integration-tests/soap/src/test/resources/getCustomersByName1.2.xml 
b/integration-tests/soap/src/test/resources/getCustomersByName1.2.xml
new file mode 100644
index 0000000..a3da0eb
--- /dev/null
+++ b/integration-tests/soap/src/test/resources/getCustomersByName1.2.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+    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.
+
+-->
+<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope";>
+    <soap:Body>
+        <ns2:getCustomersByName 
xmlns:ns2="http://service.it.soap.component.quarkus.camel.apache.org/";>
+            <name>Mr Camel Quarkus SOAP V1.2</name>
+        </ns2:getCustomersByName>
+    </soap:Body>
+</soap:Envelope>
diff --git a/integration-tests/soap/src/test/resources/soapFault1.1.xml 
b/integration-tests/soap/src/test/resources/soapFault1.1.xml
new file mode 100644
index 0000000..fc0c357
--- /dev/null
+++ b/integration-tests/soap/src/test/resources/soapFault1.1.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+    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.
+
+-->
+<ns2:Envelope xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:ns3="http://customerservice.example.com/";>
+    <ns2:Body>
+        <ns2:Fault>
+            <faultcode>ns2:Receiver</faultcode>
+            <faultstring>Customer not found</faultstring>
+            <detail>
+                <ns3:NoSuchCustomer>
+                    <customerId>An invalid customer id</customerId>
+                </ns3:NoSuchCustomer>
+            </detail>
+        </ns2:Fault>
+    </ns2:Body>
+</ns2:Envelope>
\ No newline at end of file
diff --git a/integration-tests/soap/src/test/resources/soapFault1.2.xml 
b/integration-tests/soap/src/test/resources/soapFault1.2.xml
new file mode 100644
index 0000000..044e66f
--- /dev/null
+++ b/integration-tests/soap/src/test/resources/soapFault1.2.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+    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.
+
+-->
+<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope";>
+    <env:Body>
+        <env:Fault>
+            <env:Code>
+                <env:Value>Sender</env:Value>
+                <env:Subcode>
+                    <env:Value>Customer not found</env:Value>
+                </env:Subcode>
+            </env:Code>
+            <env:Reason>
+                <env:Text xml:lang="en">Customer not found</env:Text>
+            </env:Reason>
+        </env:Fault>
+    </env:Body>
+</env:Envelope>
diff --git a/pom.xml b/pom.xml
index 19a07ad..b3211bc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,7 +82,8 @@
         <htrace.version>4.2.0-incubating</htrace.version><!-- Mess in hbase 
transitive deps -->
         <influxdb.version>${influx-java-driver-version}</influxdb.version>
         <jackson-asl.version>1.9.13</jackson-asl.version><!-- Mess in the 
transitive dependencies of spark and hbase-testing-util -->
-        <java.xml.ws.version>2.3.1</java.xml.ws.version>
+        <jakarta.jws.ws.api.version>2.1.0</jakarta.jws.ws.api.version>
+        <jakarta.xml.ws.api.version>2.3.3</jakarta.xml.ws.api.version>
         <jcodings.version>1.0.55</jcodings.version><!-- used by hbase -->
         <joni.version>2.1.31</joni.version><!-- used by json-validator -->
         <jsoup.version>1.12.1</jsoup.version><!-- used by oaipmh -->
@@ -108,9 +109,9 @@
         <quarkus-qpid-jms.version>0.24.0</quarkus-qpid-jms.version>
         <protobuf.version>${protobuf-version}</protobuf.version>
         <retrofit.version>2.5.0</retrofit.version>
+        <saaj.impl.version>1.5.3</saaj.impl.version>
         <scala-2.11.version>2.11.12</scala-2.11.version><!-- Spark -->
         
<smallrye.reactive.messaging.camel.version>2.9.0</smallrye.reactive.messaging.camel.version>
 <!-- keep in sync with Quarkus SmallRye Reactive Messaging -->
-        <soap-api.version>1.4.0</soap-api.version><!-- keep in sync with Camel 
-->
         <!-- Keep spring.version aligned with the version used by Camel -->
         <spring.version>${spring5-version}</spring.version>
         <snakeyaml.version>${snakeyaml-version}</snakeyaml.version>
@@ -492,6 +493,7 @@
                             
<spring.provides>CAMEL_PROPERTIES_STYLE</spring.provides>
                             <tm>CAMEL_PROPERTIES_STYLE</tm>
                             <kt>SLASHSTAR_STYLE</kt>
+                            <wsdl>XML_STYLE</wsdl>
                         </mapping>
                         <headerDefinitions>
                             
<headerDefinition>license-properties-headerdefinition.xml</headerDefinition>
diff --git a/poms/bom-test/pom.xml b/poms/bom-test/pom.xml
index 3ddfad7..2130cb8 100644
--- a/poms/bom-test/pom.xml
+++ b/poms/bom-test/pom.xml
@@ -202,6 +202,11 @@
                 </exclusions>
             </dependency>
             <dependency>
+                <groupId>jakarta.jws</groupId>
+                <artifactId>jakarta.jws-api</artifactId>
+                <version>${jakarta.jws.ws.api.version}</version>
+            </dependency>
+            <dependency>
                 <groupId>org.seleniumhq.selenium</groupId>
                 <artifactId>htmlunit-driver</artifactId>
                 <version>${htmlunit-driver.version}</version>
diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml
index 66282bc..77d9bae 100644
--- a/poms/bom/pom.xml
+++ b/poms/bom/pom.xml
@@ -5709,6 +5709,11 @@
                 </exclusions>
             </dependency>
             <dependency>
+                <groupId>com.sun.xml.messaging.saaj</groupId>
+                <artifactId>saaj-impl</artifactId>
+                <version>${saaj.impl.version}</version>
+            </dependency>
+            <dependency>
                 <groupId>com.thoughtworks.xstream</groupId>
                 <artifactId>xstream</artifactId>
                 <version>${xstream.version}</version>
@@ -5824,14 +5829,9 @@
                 <version>${smallrye.reactive.messaging.camel.version}</version>
             </dependency>
             <dependency>
-                <groupId>javax.xml.soap</groupId>
-                <artifactId>javax.xml.soap-api</artifactId>
-                <version>${soap-api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>javax.xml.ws</groupId>
-                <artifactId>jaxws-api</artifactId>
-                <version>${java.xml.ws.version}</version>
+                <groupId>jakarta.xml.ws</groupId>
+                <artifactId>jakarta.xml.ws-api</artifactId>
+                <version>${jakarta.xml.ws.api.version}</version>
             </dependency>
             <dependency>
                 <groupId>jaxen</groupId>

Reply via email to