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

ppalaga 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 4c1427edc5 Cxf-soap: Extend test coverage with Converter scenario #4652
4c1427edc5 is described below

commit 4c1427edc54730926da32d69228dfffdd8d951a7
Author: JiriOndrusek <[email protected]>
AuthorDate: Tue Mar 14 16:26:52 2023 +0100

    Cxf-soap: Extend test coverage with Converter scenario #4652
---
 .../cxf-soap/cxf-soap-converter/pom.xml            | 156 ++++++++++++++++
 .../converter/it/CxfSoapConverterResource.java     |  52 ++++++
 .../soap/converter/it/CxfSoapConverterRoutes.java  | 158 +++++++++++++++++
 .../src/main/resources/application.properties      |  24 +++
 .../src/main/resources/wsdl/person.wsdl            | 196 +++++++++++++++++++++
 .../cxf/soap/converter/it/CxfSoapConverterIT.java  |  23 +++
 .../soap/converter/it/CxfSoapConverterTest.java    |  40 +++++
 integration-test-groups/cxf-soap/pom.xml           |   1 +
 integration-tests/cxf-soap-grouped/pom.xml         |   4 +
 9 files changed, 654 insertions(+)

diff --git a/integration-test-groups/cxf-soap/cxf-soap-converter/pom.xml 
b/integration-test-groups/cxf-soap/cxf-soap-converter/pom.xml
new file mode 100644
index 0000000000..0affe39489
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-converter/pom.xml
@@ -0,0 +1,156 @@
+<?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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.camel.quarkus</groupId>
+        <artifactId>camel-quarkus-build-parent-it</artifactId>
+        <version>3.0.0-SNAPSHOT</version>
+        <relativePath>../../../poms/build-parent-it/pom.xml</relativePath>
+    </parent>
+
+    <artifactId>camel-quarkus-integration-test-cxf-soap-converter</artifactId>
+    <name>Camel Quarkus :: Integration Tests :: Cxf Soap Converter</name>
+    <description>Integration tests for Camel Quarkus CXF extension converter 
part</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-cxf-soap</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-resteasy</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-direct</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-jaxb</artifactId>
+        </dependency>
+
+
+        <!-- test dependencies -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.rest-assured</groupId>
+            <artifactId>rest-assured</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkiverse.cxf</groupId>
+            <artifactId>quarkus-cxf-test-util</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>${quarkus.platform.group-id}</groupId>
+                <artifactId>quarkus-maven-plugin</artifactId>
+                <version>${quarkus.platform.version}</version>
+                <extensions>true</extensions><!-- Workaround for 
https://github.com/quarkusio/quarkus/issues/21718 -->
+                <executions>
+                    <execution>
+                        <id>generate-code</id>
+                        <goals>
+                            <goal>generate-code</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>native</id>
+            <activation>
+                <property>
+                    <name>native</name>
+                </property>
+            </activation>
+            <properties>
+                <quarkus.package.type>native</quarkus.package.type>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>virtualDependencies</id>
+            <activation>
+                <property>
+                    <name>!noVirtualDependencies</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- The following dependencies guarantee that this module is 
built after them. You can update them by running `mvn process-resources 
-Pformat -N` from the source tree root directory -->
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-cxf-soap-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-direct-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
+</project>
diff --git 
a/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterResource.java
 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterResource.java
new file mode 100644
index 0000000000..b8aba8d524
--- /dev/null
+++ 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterResource.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.cxf.soap.converter.it;
+
+import java.net.URI;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.wsdl_first.types.GetPersonResponse;
+
+@Path("/cxf-soap/converter")
+@ApplicationScoped
+public class CxfSoapConverterResource {
+
+    @Inject
+    ProducerTemplate producerTemplate;
+
+    @Path("/convert/{type}")
+    @POST
+    @Consumes(MediaType.WILDCARD)
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response convert(String personId, @PathParam("type") String type) 
throws Exception {
+        final GetPersonResponse response = 
producerTemplate.requestBodyAndHeader("direct:converterInvoker", personId,
+                "operation", type, GetPersonResponse.class);
+        return Response
+                .created(new URI("https://camel.apache.org/";))
+                .entity(response.getPersonId())
+                .build();
+    }
+}
diff --git 
a/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterRoutes.java
 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterRoutes.java
new file mode 100644
index 0000000000..17b98b1441
--- /dev/null
+++ 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterRoutes.java
@@ -0,0 +1,158 @@
+/*
+ * 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.cxf.soap.converter.it;
+
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.dom.DOMSource;
+
+import org.w3c.dom.Element;
+
+import io.quarkus.runtime.LaunchMode;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.SessionScoped;
+import jakarta.enterprise.inject.Produces;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.common.CxfPayload;
+import org.apache.camel.component.cxf.jaxws.CxfEndpoint;
+import org.apache.camel.converter.jaxp.XmlConverter;
+import org.apache.camel.wsdl_first.types.GetPerson;
+import org.apache.camel.wsdl_first.types.GetPersonResponse;
+import org.apache.cxf.binding.soap.SoapHeader;
+import org.apache.cxf.ext.logging.LoggingFeature;
+import org.apache.cxf.staxutils.StaxUtils;
+import org.eclipse.microprofile.config.Config;
+import org.eclipse.microprofile.config.ConfigProvider;
+
+@ApplicationScoped
+public class CxfSoapConverterRoutes extends RouteBuilder {
+
+    protected static final String ELEMENT_NAMESPACE = 
"http://camel.apache.org/wsdl-first/types";;
+
+    public static final String PATTERN_GET_PERSON = "<GetPerson 
.*><personId>(.+)</personId></GetPerson>";
+
+    public static final String REQUEST_GET_PERSON = "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>" +
+            "<GetPerson xmlns=\"http://camel.apache.org/wsdl-first/types\"; " +
+            "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>" +
+            "<personId>%s</personId>" +
+            "</GetPerson>";
+
+    public static final String RESPONSE_GET_PERSON = "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>" +
+            "<GetPersonResponse 
xmlns=\"http://camel.apache.org/wsdl-first/types\"; " +
+            "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>" +
+            "<personId>%s</personId>" +
+            "</GetPersonResponse>";
+
+    @Inject
+    @Named("loggingFeatureConverter")
+    LoggingFeature loggingFeature;
+
+    @Override
+    public void configure() {
+
+        from("direct:converterInvoker")
+                .process(exchange -> {
+                    Map<String, Object> headers = 
exchange.getIn().getHeaders();
+                    List<Source> elements = new ArrayList<>();
+                    String reqMessage;
+                    headers.put("address", getServerUrl() + 
"/soapservice/PayLoadConvert/RouterPort");
+                    reqMessage = String.format(REQUEST_GET_PERSON, 
exchange.getIn().getBody(String.class));
+                    elements.add(new DOMSource(StaxUtils
+                            .read(new StringReader(reqMessage))
+                            .getDocumentElement()));
+                    CxfPayload payload = new CxfPayload<>(
+                            new ArrayList<SoapHeader>(), elements, null);
+                    exchange.getIn().setBody(payload);
+                })
+                
.toD("cxf:bean:soapConverterEndpoint?address=${header.address}&dataFormat=PAYLOAD");
+
+        from("cxf:bean:soapConverterEndpoint?dataFormat=PAYLOAD")
+                .process(exchange -> {
+                    String operation = exchange.getIn().getHeader("operation", 
String.class);
+                    if ("pojo".equals(operation)) {
+                        // just try to turn the payload to the parameter we 
want
+                        // to use
+                        GetPerson request = 
exchange.getIn().getBody(GetPerson.class);
+
+                        GetPersonResponse getPersonResponse = new 
GetPersonResponse();
+                        getPersonResponse.setPersonId(request.getPersonId() + 
"pojo");
+                        exchange.getMessage().setBody(getPersonResponse);
+                    } else if ("xml".equals(operation)) {
+                        // just try to turn the payload to the parameter we 
want
+                        // to use
+                        GetPerson request = 
exchange.getIn().getBody(GetPerson.class);
+
+                        
exchange.getMessage().setBody(String.format(RESPONSE_GET_PERSON, 
request.getPersonId() + "xml"));
+                    } else if ("consumer".equals(operation)) {
+                        CxfPayload<SoapHeader> requestPayload = 
exchange.getIn().getBody(CxfPayload.class);
+                        List<Source> inElements = 
requestPayload.getBodySources();
+                        Element in = new 
XmlConverter().toDOMElement(inElements.get(0));
+                        // Just check the element namespace
+                        if (!in.getNamespaceURI().equals(ELEMENT_NAMESPACE)) {
+                            throw new IllegalArgumentException("Wrong element 
namespace");
+                        }
+                        // You can use a customer toStringConverter to turn a 
CxfPayLoad message into String as you want
+                        String request = 
exchange.getIn().getBody(String.class);
+                        //get value from request and therefore check the 
request
+                        Pattern r = Pattern.compile(PATTERN_GET_PERSON);
+                        Matcher m = r.matcher(request);
+
+                        if (m.find()) {
+                            
exchange.getMessage().setBody(String.format(RESPONSE_GET_PERSON, m.group(1) + 
"consumer"));
+                        } else {
+                            throw new IllegalArgumentException("Unexpected 
content");
+                        }
+                    }
+                });
+    }
+
+    @Produces
+    @SessionScoped
+    @Named
+    CxfEndpoint soapConverterEndpoint() {
+        final CxfEndpoint result = new CxfEndpoint();
+        result.getFeatures().add(loggingFeature);
+        result.setServiceClass(org.apache.camel.wsdl_first.Person.class);
+        result.setAddress("/PayLoadConvert/RouterPort");
+        return result;
+    }
+
+    @Produces
+    @ApplicationScoped
+    @Named("loggingFeatureConverter")
+    public LoggingFeature loggingFeature() {
+        final LoggingFeature result = new LoggingFeature();
+        result.setPrettyLogging(true);
+        return result;
+    }
+
+    private static String getServerUrl() {
+        Config config = ConfigProvider.getConfig();
+        final int port = LaunchMode.current().equals(LaunchMode.TEST) ? 
config.getValue("quarkus.http.test-port", Integer.class)
+                : config.getValue("quarkus.http.port", Integer.class);
+        return String.format("http://localhost:%d";, port);
+    }
+
+}
diff --git 
a/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/resources/application.properties
 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/resources/application.properties
new file mode 100644
index 0000000000..c040431b60
--- /dev/null
+++ 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/resources/application.properties
@@ -0,0 +1,24 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+quarkus.cxf.path=/soapservice
+quarkus.native.resources.includes = wsdl/*.wsdl
+
+
+# do everything with named parameter sets so that it works in the grouped 
module
+quarkus.cxf.codegen.wsdl2java.converter.includes = wsdl/person.wsdl
+quarkus.cxf.codegen.wsdl2java.converter.additional-params = 
-wsdlLocation,classpath:wsdl/person.wsdl
\ No newline at end of file
diff --git 
a/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/resources/wsdl/person.wsdl
 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/resources/wsdl/person.wsdl
new file mode 100644
index 0000000000..90f7b13ec1
--- /dev/null
+++ 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/main/resources/wsdl/person.wsdl
@@ -0,0 +1,196 @@
+<?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="wsdl-first"
+       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
+       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
+       xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/";
+       xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:tns="http://camel.apache.org/wsdl-first";
+       xmlns:typens="http://camel.apache.org/wsdl-first/types";
+       targetNamespace="http://camel.apache.org/wsdl-first";>
+
+       <wsdl:types>
+       <xsd:schema targetNamespace="http://camel.apache.org/wsdl-first/types";
+           xmlns="http://www.w3.org/2001/XMLSchema";
+           xmlns:tns="http://camel.apache.org/wsdl-first/types";            
+               elementFormDefault="qualified">
+               
+               <simpleType name="MyStringType">
+                       <restriction base="string">
+                               <maxLength value="30" />
+                       </restriction>
+               </simpleType>
+
+
+                       <xsd:element name="GetPerson">
+                         <xsd:complexType>
+                                       <xsd:sequence>
+                                               <xsd:element name="personId" 
type="tns:MyStringType"/>
+                                       </xsd:sequence>
+                               </xsd:complexType>
+                       </xsd:element>
+                       <xsd:element name="GetPersonResponse">
+                         <xsd:complexType>
+                                       <xsd:sequence>
+                                           <xsd:element name="personId" 
type="tns:MyStringType"/>
+                                               <xsd:element name="ssn" 
type="xsd:string"/>
+                                               <xsd:element name="name" 
type="xsd:string"/>
+                                       </xsd:sequence>
+                               </xsd:complexType>
+                       </xsd:element>
+                       <xsd:element name="UnknownPersonFault">
+                         <xsd:complexType>
+                                       <xsd:sequence>
+                                           <xsd:element name="personId" 
type="xsd:string"/>
+                                       </xsd:sequence>
+                               </xsd:complexType>
+                       </xsd:element>
+
+                       <xsd:element name="StringInputElem" type="xsd:string" />
+                       <xsd:element name="IntegerInputElem" type="xsd:int" />
+
+                       <xsd:element name="StringOutputElem" type="xsd:string" 
/>
+                       <xsd:element name="IntegerOutputElem" type="xsd:int" />
+                               
+               </xsd:schema>
+  </wsdl:types>
+       
+       <wsdl:message name="GetPersonRequest">
+               <wsdl:part name="payload" element="typens:GetPerson"/>
+       </wsdl:message>
+       <wsdl:message name="GetPersonResponse">
+               <wsdl:part name="payload" element="typens:GetPersonResponse"/>
+       </wsdl:message>
+       <wsdl:message name="UnknownPersonFault">
+               <wsdl:part name="payload" element="typens:UnknownPersonFault"/>
+       </wsdl:message>
+       
+    <wsdl:message name="GetPersonMultiPartRequest">
+               <wsdl:part name="nameIn" element="typens:StringInputElem" />
+               <wsdl:part name="ssnIn" element="typens:IntegerInputElem" />
+       </wsdl:message>
+       <wsdl:message name="GetPersonMultiPartResponse">
+               <wsdl:part name="nameOut" element="typens:StringOutputElem" />
+               <wsdl:part name="ssnOut" element="typens:IntegerOutputElem" />
+       </wsdl:message>
+
+    <wsdl:portType name="Person">
+               <wsdl:operation name="GetPerson">
+                       <wsdl:input message="tns:GetPersonRequest"/>
+                       <wsdl:output message="tns:GetPersonResponse"/>
+                       <wsdl:fault name="UnknownPerson" 
message="tns:UnknownPersonFault"/>
+               </wsdl:operation>
+       </wsdl:portType>
+       
+       <wsdl:portType name="PersonMultiPartPortType">
+               <wsdl:operation name="GetPersonMultiPartOperation">
+                       <wsdl:input message="tns:GetPersonMultiPartRequest" />
+                       <wsdl:output message="tns:GetPersonMultiPartResponse" />
+               </wsdl:operation>
+       </wsdl:portType>
+       
+    <wsdl:binding name="PersonSOAPBinding" type="tns:Person">
+       <soap:binding style="document" 
transport="http://schemas.xmlsoap.org/soap/http"; />
+               <wsdl:operation name="GetPerson">
+                       <wsdl:input>
+                               <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output>
+                               <soap:body use="literal" />
+                       </wsdl:output>
+                       <wsdl:fault name="UnknownPerson">
+                               <soap:fault use="literal" name="UnknownPerson" 
/>
+                       </wsdl:fault>
+       </wsdl:operation>
+   </wsdl:binding>
+   
+   <wsdl:binding name="PersonSOAPBinding12" type="tns:Person">
+      <soap12:binding 
transport="http://www.w3.org/2003/05/soap/bindings/HTTP/"; style="document" /> 
+      <wsdl:operation name="GetPerson">
+          <soap12:operation style="document" soapAction="GetPersonAction"/>    
        
+          <wsdl:input>
+              <soap12:body use="literal" />
+          </wsdl:input>
+          <wsdl:output>
+              <soap12:body use="literal" />
+          </wsdl:output>
+          <wsdl:fault name="UnknownPerson">
+              <soap12:fault use="literal" name="UnknownPerson" />
+          </wsdl:fault>
+      </wsdl:operation>
+   </wsdl:binding>   
+   
+   <wsdl:binding name="PersonSOAPBinding2" type="tns:Person">
+       <soap:binding style="document" 
transport="http://cxf.apache.org/transports/camel"; />
+          <wsdl:operation name="GetPerson">
+           <wsdl:input>
+                           <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output>
+                               <soap:body use="literal" />
+                       </wsdl:output>
+                       <wsdl:fault name="UnknownPerson">
+                               <soap:fault use="literal" name="UnknownPerson" 
/>
+                       </wsdl:fault>
+       </wsdl:operation>
+   </wsdl:binding>
+   
+   <wsdl:binding name="PersonMultiPartSOAPBinding"
+               type="tns:PersonMultiPartPortType">
+               <soap:binding style="document"
+                       transport="http://schemas.xmlsoap.org/soap/http"; />
+               <wsdl:operation name="GetPersonMultiPartOperation">
+                       <soap:operation soapAction="" style="document" />
+                       <wsdl:input>
+                               <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output>
+                               <soap:body use="literal" />
+                       </wsdl:output>
+
+               </wsdl:operation>
+       </wsdl:binding>
+
+       <wsdl:service name="PersonService">
+       <wsdl:port binding="tns:PersonSOAPBinding" name="soap">
+           <soap:address location="http://localhost:8092/PersonService/"; />
+       </wsdl:port>
+       <wsdl:port binding="tns:PersonSOAPBinding" name="soap2">
+           <soap:address location="http://localhost:8093/PersonService/"; />
+       </wsdl:port>
+       <wsdl:port binding="tns:PersonSOAPBinding2" name="soap3">
+       <soap:address 
location="camel://direct:camel.apache.org.wsdl-first.PersonService"/>
+       </wsdl:port>
+   </wsdl:service>
+   
+   <wsdl:service name="PersonService12">
+       <wsdl:port binding="tns:PersonSOAPBinding12" name="soap">
+       <soap12:address location="http://localhost:8092/PersonService/"; />
+       </wsdl:port>
+   </wsdl:service>      
+   
+       <wsdl:service name="PersonMultiPartService">
+               <wsdl:port name="PersonMultiPartPort" 
binding="tns:PersonMultiPartSOAPBinding">
+                       <soap:address 
location="http://localhost:9000/PersonMultiPart"; />
+               </wsdl:port>
+       </wsdl:service>   
+
+</wsdl:definitions>
diff --git 
a/integration-test-groups/cxf-soap/cxf-soap-converter/src/test/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterIT.java
 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/test/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterIT.java
new file mode 100644
index 0000000000..b5d9f97094
--- /dev/null
+++ 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/test/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterIT.java
@@ -0,0 +1,23 @@
+/*
+ * 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.cxf.soap.converter.it;
+
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+class CxfSoapConverterIT extends CxfSoapConverterTest {
+}
diff --git 
a/integration-test-groups/cxf-soap/cxf-soap-converter/src/test/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterTest.java
 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/test/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterTest.java
new file mode 100644
index 0000000000..d8a2c5713e
--- /dev/null
+++ 
b/integration-test-groups/cxf-soap/cxf-soap-converter/src/test/java/org/apache/camel/quarkus/component/cxf/soap/converter/it/CxfSoapConverterTest.java
@@ -0,0 +1,40 @@
+/*
+ * 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.cxf.soap.converter.it;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static org.hamcrest.Matchers.equalTo;
+
+@QuarkusTest
+class CxfSoapConverterTest {
+
+    // Test is ported from PayLoadConvertToPOJOTest in 
Camel-spring-boot/components-starter/camel-cxf-soap-starter
+    @ParameterizedTest
+    @ValueSource(strings = { "xml", "pojo", "consumer" }) // six numbers
+    public void convertTest(String type) throws Exception {
+        RestAssured.given()
+                .body("abc")
+                .post("/cxf-soap/converter/convert/" + type)
+                .then()
+                .statusCode(201)
+                .body(equalTo("abc" + type));
+    }
+}
diff --git a/integration-test-groups/cxf-soap/pom.xml 
b/integration-test-groups/cxf-soap/pom.xml
index b924ab7e86..7202e178c8 100644
--- a/integration-test-groups/cxf-soap/pom.xml
+++ b/integration-test-groups/cxf-soap/pom.xml
@@ -38,6 +38,7 @@
     <modules>
         <!-- extensions a..z; do not remove this comment, it is important when 
sorting via  mvn process-resources -Pformat -->
         <module>cxf-soap-client</module>
+        <module>cxf-soap-converter</module>
         <module>cxf-soap-mtom</module>
         <module>cxf-soap-mtom-awt</module>
         <module>cxf-soap-server</module>
diff --git a/integration-tests/cxf-soap-grouped/pom.xml 
b/integration-tests/cxf-soap-grouped/pom.xml
index f1811d422c..68f9007d5e 100644
--- a/integration-tests/cxf-soap-grouped/pom.xml
+++ b/integration-tests/cxf-soap-grouped/pom.xml
@@ -72,6 +72,10 @@
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-jaxb</artifactId>
+        </dependency>
 
         <!-- test dependencies -->
         <dependency>

Reply via email to