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>