You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2022/10/19 09:11:55 UTC
[camel-quarkus] branch main updated: Cxf-soap tests: Refactor and split
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 1719fc7da6 Cxf-soap tests: Refactor and split
1719fc7da6 is described below
commit 1719fc7da61cbba90d9615837857205413ecc3d0
Author: JiriOndrusek <on...@gmail.com>
AuthorDate: Mon Oct 17 14:02:59 2022 +0200
Cxf-soap tests: Refactor and split
---
.../cxf/soap/deployment/CxfSoapProcessor.java | 6 +
.../cxf-soap/cxf-soap-client/README.adoc | 28 +++
.../cxf-soap/cxf-soap-client}/pom.xml | 61 ++---
.../cxf/soap/client}/it/CxfSoapResource.java | 48 ++--
.../cxf/soap/client/it/CxfSoapRoutes.java | 73 ++++++
.../src/main/resources/application.properties | 3 -
.../src/main/resources/wsdl/CalculatorService.wsdl | 248 +++++++++++++++++++++
.../cxf/soap/client/it/CxfClientTestResource.java | 65 ++++++
.../cxf/soap/client}/it/CxfSoapClientIT.java | 2 +-
.../cxf/soap/client/it/CxfSoapClientTest.java | 95 ++++++++
.../cxf-soap/cxf-soap-server}/pom.xml | 36 +--
.../com/helloworld/service/CodeFirstService.java | 0
.../cxf/soap/server}/it/CxfSoapRoutes.java | 75 +------
.../src/main/resources/application.properties | 3 -
.../src/main/resources/wsdl/HelloService.wsdl | 106 +++++++++
.../cxf/soap/server}/it/CxfSoapServiceIT.java | 2 +-
.../cxf/soap/server}/it/CxfSoapServiceTest.java | 6 +-
.../cxf-soap/cxf-soap-ws-security/README.adoc | 28 +++
.../cxf-soap/cxf-soap-ws-security}/pom.xml | 57 ++---
.../cxf/soap/security/it/CxfSoapResource.java | 54 +++++
.../cxf/soap/security}/it/CxfSoapRoutes.java | 75 ++-----
.../cxf/soap/security}/it/PasswordCallback.java | 6 +-
.../src/main/resources/application.properties | 3 -
.../main/resources/wsdl/WssCalculatorService.wsdl | 75 +++++++
.../soap/security/it/CxfClientTestResource.java | 76 +++++++
.../cxf/soap/security/it/CxfSoapClientIT.java | 17 +-
.../cxf/soap/security/it/CxfSoapClientTest.java | 85 +++++++
integration-test-groups/{ => cxf-soap}/pom.xml | 18 +-
integration-test-groups/pom.xml | 1 +
integration-tests/cxf-soap-grouped/README.adoc | 4 +
.../{cxf-soap => cxf-soap-grouped}/pom.xml | 176 ++++++++++-----
.../src/main/resources/wsdl/HelloService.wsdl | 113 ----------
.../component/cxf/soap/it/CxfSoapClientTest.java | 61 -----
.../resources/__files/simpleHelloWorldResponse.xml | 8 -
.../test/resources/__files/soapObjectResponse.xml | 12 -
.../test/resources/__files/wsSecurityResponse.xml | 8 -
.../test/resources/mappings/simpleHelloWorld.json | 27 ---
.../src/test/resources/mappings/soapObject.json | 29 ---
.../src/test/resources/mappings/wsSecurity.json | 59 -----
integration-tests/pom.xml | 2 +-
pom.xml | 6 +
tooling/scripts/test-categories.yaml | 2 +-
42 files changed, 1198 insertions(+), 661 deletions(-)
diff --git a/extensions/cxf-soap/deployment/src/main/java/org/apache/camel/quarkus/component/cxf/soap/deployment/CxfSoapProcessor.java b/extensions/cxf-soap/deployment/src/main/java/org/apache/camel/quarkus/component/cxf/soap/deployment/CxfSoapProcessor.java
index bdf56e76ac..17f76a9365 100644
--- a/extensions/cxf-soap/deployment/src/main/java/org/apache/camel/quarkus/component/cxf/soap/deployment/CxfSoapProcessor.java
+++ b/extensions/cxf-soap/deployment/src/main/java/org/apache/camel/quarkus/component/cxf/soap/deployment/CxfSoapProcessor.java
@@ -23,6 +23,7 @@ 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.SystemPropertyBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import org.jboss.jandex.DotName;
import org.jboss.jandex.IndexView;
@@ -36,6 +37,11 @@ class CxfSoapProcessor {
return new FeatureBuildItem(FEATURE);
}
+ @BuildStep
+ SystemPropertyBuildItem ehcacheAgentSizeOfBypass() {
+ return new SystemPropertyBuildItem("org.ehcache.sizeof.AgentSizeOf.bypass", "true");
+ }
+
@BuildStep
void registerForReflection(BuildProducer<ReflectiveClassBuildItem> reflectiveClass, CombinedIndexBuildItem combinedIndex) {
diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/README.adoc b/integration-test-groups/cxf-soap/cxf-soap-client/README.adoc
new file mode 100644
index 0000000000..c135ccd5da
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-client/README.adoc
@@ -0,0 +1,28 @@
+= Quarkus CXF client tests
+
+These are pure client tests - i.e. there are intentionally no services implemented in the test application.
+All clients access services running in containers.
+
+== Maintenenance notes
+
+=== `CalculatorService.wsdl`
+
+`src/main/resources/wsdl/CalculatorService.wsdl` is a static copy of the WSDL served by the testing container.
+It would be too complicated to start the container before running the plugin, so we rather keep the static copy.
+
+There is `org.apache.camel.quarkus.component.cxf.soap.it.CxfSoapClientTest.wsdlUpToDate()` to ensure that it is up to date.
+
+To update `CalculatorService.wsdl` manually, first start the container
+
+[shource,shell]
+----
+$ docker pull quay.io/l2x6/calculator-ws:1.0
+$ docker run -p 8080:8080 quay.io/l2x6/calculator-ws:1.0
+----
+
+And then overwrite the existing file with the new content from the container:
+
+[shource,shell]
+----
+curl "http://localhost:8080/calculator-ws/CalculatorService?wsdl" --output src/main/resources/wsdl/CalculatorService.wsdl
+----
diff --git a/integration-tests/cxf-soap/pom.xml b/integration-test-groups/cxf-soap/cxf-soap-client/pom.xml
similarity index 81%
copy from integration-tests/cxf-soap/pom.xml
copy to integration-test-groups/cxf-soap/cxf-soap-client/pom.xml
index fbcfd6522e..93d5aec654 100644
--- a/integration-tests/cxf-soap/pom.xml
+++ b/integration-test-groups/cxf-soap/cxf-soap-client/pom.xml
@@ -23,47 +23,32 @@
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-build-parent-it</artifactId>
<version>2.14.0-SNAPSHOT</version>
- <relativePath>../../poms/build-parent-it/pom.xml</relativePath>
+ <relativePath>../../../poms/build-parent-it/pom.xml</relativePath>
</parent>
- <artifactId>camel-quarkus-integration-test-cxf-soap</artifactId>
- <name>Camel Quarkus :: Integration Tests :: CXF</name>
- <description>Integration tests for Camel Quarkus CXF extension</description>
+ <artifactId>camel-quarkus-integration-test-cxf-soap-client</artifactId>
+ <name>Camel Quarkus :: Integration Tests :: Cxf Soap Client</name>
+ <description>Integration tests for Camel Quarkus CXF extension client part</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
- <version>${cxf.version}</version>
<executions>
<execution>
- <id>generate-sources</id>
- <phase>generate-sources</phase>
+ <goals>
+ <goal>wsdl2java</goal>
+ </goals>
<configuration>
- <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
<wsdlOptions>
<wsdlOption>
- <wsdl>${basedir}/src/main/resources/wsdl/HelloService.wsdl</wsdl>
- <wsdlLocation>classpath:wsdl/HelloService.wsdl</wsdlLocation>
- <extraargs>
- <extraarg>-xjc-Xts</extraarg>
- </extraargs>
+ <wsdl>${basedir}/src/main/resources/wsdl/CalculatorService.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
- <goals>
- <goal>wsdl2java</goal>
- </goals>
</execution>
</executions>
- <dependencies>
- <dependency>
- <groupId>org.apache.cxf.xjcplugins</groupId>
- <artifactId>cxf-xjc-ts</artifactId>
- <version>${cxf.xjc-utils.version}</version>
- </dependency>
- </dependencies>
</plugin>
</plugins>
</build>
@@ -73,10 +58,6 @@
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-cxf-soap</artifactId>
</dependency>
- <dependency>
- <groupId>io.quarkiverse.cxf</groupId>
- <artifactId>quarkus-cxf-rt-ws-security</artifactId>
- </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
@@ -108,8 +89,19 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus-integration-wiremock-support</artifactId>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>testcontainers</artifactId>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit4-mock</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
@@ -179,6 +171,17 @@
</dependency>
</dependencies>
</profile>
+ <profile>
+ <id>skip-testcontainers-tests</id>
+ <activation>
+ <property>
+ <name>skip-testcontainers-tests</name>
+ </property>
+ </activation>
+ <properties>
+ <skipTests>true</skipTests>
+ </properties>
+ </profile>
</profiles>
</project>
diff --git a/integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapResource.java b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapResource.java
similarity index 53%
rename from integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapResource.java
rename to integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapResource.java
index 5a01690eff..889e9ef3c9 100644
--- a/integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapResource.java
+++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapResource.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.component.cxf.soap.it;
+package org.apache.camel.quarkus.component.cxf.soap.client.it;
import java.net.URI;
@@ -23,62 +23,50 @@ import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import com.helloworld.service.PersonRequestType;
-import com.helloworld.service.PersonResponseType;
-import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
-import org.jboss.logging.Logger;
+import org.jboss.eap.quickstarts.wscalculator.calculator.Operands;
+import org.jboss.eap.quickstarts.wscalculator.calculator.Result;
@Path("/cxf-soap")
@ApplicationScoped
public class CxfSoapResource {
- private static final Logger LOG = Logger.getLogger(CxfSoapResource.class);
-
- private static final String COMPONENT_CXF = "cxf";
- @Inject
- CamelContext context;
-
@Inject
ProducerTemplate producerTemplate;
- @Path("/simple/{endpoint}")
+ @Path("/simple")
@POST
- @Consumes(MediaType.TEXT_PLAIN)
+ @Consumes(MediaType.WILDCARD)
@Produces(MediaType.TEXT_PLAIN)
- public Response sendSimpleRequest(@PathParam("endpoint") String endpoint, String body) throws Exception {
- //LOG.infof("Sending to cxf: %s", "CamelQuarkusCXF");
- final String response = producerTemplate.requestBody("direct:" + endpoint, body, String.class);
- //LOG.infof("Got response from cxf: %s", response);
+ public Response sendSimpleRequest(@QueryParam("a") int a,
+ @QueryParam("b") int b) throws Exception {
+ final String response = producerTemplate.requestBody("direct:simple", new int[] { a, b }, String.class);
return Response
.created(new URI("https://camel.apache.org/"))
.entity(response)
.build();
}
- @Path("/person/{endpoint}")
+ @Path("/operandsAdd")
@POST
@Consumes(MediaType.WILDCARD)
- @Produces(MediaType.WILDCARD)
- public Response person(@PathParam("endpoint") String endpoint, @QueryParam("lastName") String lastName,
- @QueryParam("firstName") String firstName)
+ @Produces(MediaType.TEXT_PLAIN)
+ public Response operands(@QueryParam("a") int a,
+ @QueryParam("b") int b)
throws Exception {
- PersonRequestType personRequestType = new PersonRequestType();
- personRequestType.setFirstName(firstName);
- personRequestType.setLastName(lastName);
- //LOG.infof("Sending to cxf: %s", personRequestType);
- final PersonResponseType response = producerTemplate.requestBody("direct:" + endpoint, personRequestType,
- PersonResponseType.class);
- //LOG.infof("Got response from cxf: %s", response);
+ Operands operands = new Operands();
+ operands.setA(a);
+ operands.setB(b);
+ final Result response = producerTemplate.requestBody("direct:operandsAdd", operands,
+ Result.class);
return Response
.created(new URI("https://camel.apache.org/"))
- .entity(response.toString())
+ .entity(response.getResult())
.build();
}
diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapRoutes.java b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapRoutes.java
new file mode 100644
index 0000000000..80c82293dd
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapRoutes.java
@@ -0,0 +1,73 @@
+/*
+ * 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.client.it;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.common.message.CxfConstants;
+import org.apache.camel.component.cxf.jaxws.CxfEndpoint;
+import org.apache.cxf.ext.logging.LoggingFeature;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;
+
+@ApplicationScoped
+public class CxfSoapRoutes extends RouteBuilder {
+
+ @Inject
+ @Named("loggingFeatureClient")
+ LoggingFeature loggingFeature;
+
+ @ConfigProperty(name = "camel-quarkus.it.calculator.baseUri")
+ String serviceBaseUri;
+
+ @Override
+ public void configure() {
+
+ from("direct:simple")
+ .to("cxf:bean:soapClientEndpoint?dataFormat=PAYLOAD");
+
+ from("direct:operandsAdd")
+ .setHeader(CxfConstants.OPERATION_NAME).constant("addOperands")
+ .to("cxf:bean:soapClientEndpoint?dataFormat=POJO");
+ }
+
+ @Produces
+ @ApplicationScoped
+ @Named("loggingFeatureClient")
+ public LoggingFeature loggingFeature() {
+ final LoggingFeature result = new LoggingFeature();
+ result.setPrettyLogging(true);
+ return result;
+ }
+
+ @Produces
+ @ApplicationScoped
+ @Named
+ CxfEndpoint soapClientEndpoint() {
+ final CxfEndpoint result = new CxfEndpoint();
+ result.setServiceClass(CalculatorService.class);
+ result.setAddress(serviceBaseUri + "/calculator-ws/CalculatorService");
+ result.setWsdlURL("wsdl/CalculatorService.wsdl");
+ result.getFeatures().add(loggingFeature);
+ return result;
+ }
+
+}
diff --git a/integration-tests/cxf-soap/src/main/resources/application.properties b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/resources/application.properties
similarity index 93%
copy from integration-tests/cxf-soap/src/main/resources/application.properties
copy to integration-test-groups/cxf-soap/cxf-soap-client/src/main/resources/application.properties
index efc3dcbba6..574727024a 100644
--- a/integration-tests/cxf-soap/src/main/resources/application.properties
+++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/resources/application.properties
@@ -15,8 +15,5 @@
## limitations under the License.
## ---------------------------------------------------------------------------
-password-callback.username=camel
-password-callback.password=quarkus
-
quarkus.cxf.path=/soapservice
quarkus.native.resources.includes = wsdl/*.wsdl
diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/src/main/resources/wsdl/CalculatorService.wsdl b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/resources/wsdl/CalculatorService.wsdl
new file mode 100644
index 0000000000..2b0be31507
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/main/resources/wsdl/CalculatorService.wsdl
@@ -0,0 +1,248 @@
+<?xml version="1.0" ?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="CalculatorService" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+<!--
+
+ 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:types>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator" elementFormDefault="unqualified" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator" version="1.0">
+
+ <xs:element name="add" type="tns:add"></xs:element>
+
+ <xs:element name="addOperands" type="tns:addOperands"></xs:element>
+
+ <xs:element name="addOperandsResponse" type="tns:addOperandsResponse"></xs:element>
+
+ <xs:element name="addResponse" type="tns:addResponse"></xs:element>
+
+ <xs:element name="divide" type="tns:divide"></xs:element>
+
+ <xs:element name="divideResponse" type="tns:divideResponse"></xs:element>
+
+ <xs:element name="multiply" type="tns:multiply"></xs:element>
+
+ <xs:element name="multiplyResponse" type="tns:multiplyResponse"></xs:element>
+
+ <xs:element name="subtract" type="tns:subtract"></xs:element>
+
+ <xs:element name="subtractResponse" type="tns:subtractResponse"></xs:element>
+
+ <xs:complexType name="divide">
+ <xs:sequence>
+ <xs:element name="arg0" type="xs:int"></xs:element>
+ <xs:element name="arg1" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="divideResponse">
+ <xs:sequence>
+ <xs:element name="return" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="add">
+ <xs:sequence>
+ <xs:element name="arg0" type="xs:int"></xs:element>
+ <xs:element name="arg1" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="addResponse">
+ <xs:sequence>
+ <xs:element name="return" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="subtract">
+ <xs:sequence>
+ <xs:element name="arg0" type="xs:int"></xs:element>
+ <xs:element name="arg1" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="subtractResponse">
+ <xs:sequence>
+ <xs:element name="return" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="addOperands">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="arg0" type="tns:operands"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="operands">
+ <xs:sequence>
+ <xs:element name="a" type="xs:int"></xs:element>
+ <xs:element name="b" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="addOperandsResponse">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="return" type="tns:result"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="result">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="operands" type="tns:operands"></xs:element>
+ <xs:element name="result" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="multiply">
+ <xs:sequence>
+ <xs:element name="arg0" type="xs:int"></xs:element>
+ <xs:element name="arg1" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="multiplyResponse">
+ <xs:sequence>
+ <xs:element name="return" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+</xs:schema>
+ </wsdl:types>
+ <wsdl:message name="add">
+ <wsdl:part element="tns:add" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="subtract">
+ <wsdl:part element="tns:subtract" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="subtractResponse">
+ <wsdl:part element="tns:subtractResponse" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="addResponse">
+ <wsdl:part element="tns:addResponse" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="multiplyResponse">
+ <wsdl:part element="tns:multiplyResponse" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="divideResponse">
+ <wsdl:part element="tns:divideResponse" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="divide">
+ <wsdl:part element="tns:divide" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="addOperandsResponse">
+ <wsdl:part element="tns:addOperandsResponse" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="addOperands">
+ <wsdl:part element="tns:addOperands" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="multiply">
+ <wsdl:part element="tns:multiply" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:portType name="CalculatorService">
+ <wsdl:operation name="divide">
+ <wsdl:input message="tns:divide" name="divide">
+ </wsdl:input>
+ <wsdl:output message="tns:divideResponse" name="divideResponse">
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="add">
+ <wsdl:input message="tns:add" name="add">
+ </wsdl:input>
+ <wsdl:output message="tns:addResponse" name="addResponse">
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="subtract">
+ <wsdl:input message="tns:subtract" name="subtract">
+ </wsdl:input>
+ <wsdl:output message="tns:subtractResponse" name="subtractResponse">
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="addOperands">
+ <wsdl:input message="tns:addOperands" name="addOperands">
+ </wsdl:input>
+ <wsdl:output message="tns:addOperandsResponse" name="addOperandsResponse">
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="multiply">
+ <wsdl:input message="tns:multiply" name="multiply">
+ </wsdl:input>
+ <wsdl:output message="tns:multiplyResponse" name="multiplyResponse">
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="CalculatorServiceSoapBinding" type="tns:CalculatorService">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding>
+ <wsdl:operation name="divide">
+ <soap:operation soapAction="" style="document"></soap:operation>
+ <wsdl:input name="divide">
+ <soap:body use="literal"></soap:body>
+ </wsdl:input>
+ <wsdl:output name="divideResponse">
+ <soap:body use="literal"></soap:body>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="add">
+ <soap:operation soapAction="" style="document"></soap:operation>
+ <wsdl:input name="add">
+ <soap:body use="literal"></soap:body>
+ </wsdl:input>
+ <wsdl:output name="addResponse">
+ <soap:body use="literal"></soap:body>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="subtract">
+ <soap:operation soapAction="" style="document"></soap:operation>
+ <wsdl:input name="subtract">
+ <soap:body use="literal"></soap:body>
+ </wsdl:input>
+ <wsdl:output name="subtractResponse">
+ <soap:body use="literal"></soap:body>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="addOperands">
+ <soap:operation soapAction="" style="document"></soap:operation>
+ <wsdl:input name="addOperands">
+ <soap:body use="literal"></soap:body>
+ </wsdl:input>
+ <wsdl:output name="addOperandsResponse">
+ <soap:body use="literal"></soap:body>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="multiply">
+ <soap:operation soapAction="" style="document"></soap:operation>
+ <wsdl:input name="multiply">
+ <soap:body use="literal"></soap:body>
+ </wsdl:input>
+ <wsdl:output name="multiplyResponse">
+ <soap:body use="literal"></soap:body>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="CalculatorService">
+ <wsdl:port binding="tns:CalculatorServiceSoapBinding" name="Calculator">
+ <soap:address location="http://172.17.0.4:8080/calculator-ws/CalculatorService"></soap:address>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
\ No newline at end of file
diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfClientTestResource.java b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfClientTestResource.java
new file mode 100644
index 0000000000..d12d2c30ca
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfClientTestResource.java
@@ -0,0 +1,65 @@
+/*
+ * 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.client.it;
+
+import java.util.Map;
+
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.Wait;
+
+public class CxfClientTestResource implements QuarkusTestResourceLifecycleManager {
+ private static final Logger log = LoggerFactory.getLogger(CxfClientTestResource.class);
+
+ private static final int WILDFLY_PORT = 8080;
+ private GenericContainer<?> calculatorContainer;
+
+ @Override
+ public Map<String, String> start() {
+
+ try {
+ calculatorContainer = new GenericContainer<>("quay.io/l2x6/calculator-ws:1.0")
+ .withExposedPorts(WILDFLY_PORT)
+ .withLogConsumer(new Slf4jLogConsumer(log))
+ .waitingFor(Wait.forHttp("/calculator-ws/CalculatorService?wsdl"));
+
+ calculatorContainer.start();
+
+ return Map.of(
+ "camel-quarkus.it.calculator.baseUri",
+ "http://" + calculatorContainer.getHost() + ":" +
+ calculatorContainer.getMappedPort(WILDFLY_PORT));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void stop() {
+ try {
+ if (calculatorContainer != null) {
+ calculatorContainer.stop();
+ }
+ } catch (Exception e) {
+ // ignored
+ }
+ }
+}
diff --git a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapClientIT.java b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientIT.java
similarity index 93%
rename from integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapClientIT.java
rename to integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientIT.java
index da87d1e0ee..d79e966bd9 100644
--- a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapClientIT.java
+++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientIT.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.component.cxf.soap.it;
+package org.apache.camel.quarkus.component.cxf.soap.client.it;
import io.quarkus.test.junit.QuarkusIntegrationTest;
diff --git a/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientTest.java b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientTest.java
new file mode 100644
index 0000000000..a1dc64d84a
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-client/src/test/java/org/apache/camel/quarkus/component/cxf/soap/client/it/CxfSoapClientTest.java
@@ -0,0 +1,95 @@
+/*
+ * 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.client.it;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.eclipse.microprofile.config.ConfigProvider;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+@QuarkusTest
+@QuarkusTestResource(CxfClientTestResource.class)
+class CxfSoapClientTest {
+
+ @Test
+ public void simpleSoapClient() {
+ //first operation is "divide"
+ RestAssured.given()
+ .queryParam("a", "9")
+ .queryParam("b", "3")
+ .post("/cxf-soap/simple")
+ .then()
+ .statusCode(201)
+ .body(equalTo("3"));
+ }
+
+ @Test
+ public void complexSoapClient() {
+ RestAssured.given()
+ .queryParam("a", "3")
+ .queryParam("b", "4")
+ .post("/cxf-soap/operandsAdd")
+ .then()
+ .statusCode(201)
+ .body(equalTo("7"));
+ }
+
+ /**
+ * Make sure that our static copy is the same as the WSDL served by the container
+ *
+ * @throws IOException
+ */
+ @Test
+ void wsdlUpToDate() throws IOException {
+ final String wsdlUrl = ConfigProvider.getConfig()
+ .getValue("camel-quarkus.it.calculator.baseUri", String.class);
+
+ final String staticCopyPath = "target/classes/wsdl/CalculatorService.wsdl";
+ /* The changing Docker IP address in the WSDL should not matter */
+ final String sanitizerRegex = "<soap:address location=\"http://[^/]*/calculator-ws/CalculatorService\"></soap:address>";
+ final String staticCopyContent = Files
+ .readString(Paths.get(staticCopyPath), StandardCharsets.UTF_8)
+ .replaceAll(sanitizerRegex, "")
+ //remove a comment with license
+ .replaceAll("<!--[.\\s\\S]*?-->", "\n")
+ //remove all whitesaces to ignore formatting changes
+ .replaceAll("\\s", "");
+
+ final String expected = RestAssured.given()
+ .get(wsdlUrl + "/calculator-ws/CalculatorService?wsdl")
+ .then()
+ .statusCode(200)
+ .extract().body().asString();
+
+ if (!expected.replaceAll(sanitizerRegex, "").replaceAll("\\s", "").equals(staticCopyContent)) {
+ Files.writeString(Paths.get(staticCopyPath), expected, StandardCharsets.UTF_8);
+ Assertions.fail("The static WSDL copy in " + staticCopyPath
+ + " went out of sync with the WSDL served by the container. The content was updated by the test, you just need to review and commit the changes.");
+ }
+
+ }
+}
diff --git a/integration-tests/cxf-soap/pom.xml b/integration-test-groups/cxf-soap/cxf-soap-server/pom.xml
similarity index 81%
copy from integration-tests/cxf-soap/pom.xml
copy to integration-test-groups/cxf-soap/cxf-soap-server/pom.xml
index fbcfd6522e..2326691ee3 100644
--- a/integration-tests/cxf-soap/pom.xml
+++ b/integration-test-groups/cxf-soap/cxf-soap-server/pom.xml
@@ -23,19 +23,18 @@
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-build-parent-it</artifactId>
<version>2.14.0-SNAPSHOT</version>
- <relativePath>../../poms/build-parent-it/pom.xml</relativePath>
+ <relativePath>../../../poms/build-parent-it/pom.xml</relativePath>
</parent>
- <artifactId>camel-quarkus-integration-test-cxf-soap</artifactId>
- <name>Camel Quarkus :: Integration Tests :: CXF</name>
- <description>Integration tests for Camel Quarkus CXF extension</description>
+ <artifactId>camel-quarkus-integration-test-cxf-soap-server</artifactId>
+ <name>Camel Quarkus :: Integration Tests :: Cxf Soap Server</name>
+ <description>Integration tests for Camel Quarkus CXF extension server part</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
- <version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
@@ -73,20 +72,11 @@
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-cxf-soap</artifactId>
</dependency>
- <dependency>
- <groupId>io.quarkiverse.cxf</groupId>
- <artifactId>quarkus-cxf-rt-ws-security</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.cxf.xjc-utils</groupId>
<artifactId>cxf-xjc-runtime</artifactId>
@@ -107,11 +97,6 @@
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus-integration-wiremock-support</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<profiles>
@@ -164,19 +149,6 @@
</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>
diff --git a/integration-tests/cxf-soap/src/main/java/com/helloworld/service/CodeFirstService.java b/integration-test-groups/cxf-soap/cxf-soap-server/src/main/java/com/helloworld/service/CodeFirstService.java
similarity index 100%
rename from integration-tests/cxf-soap/src/main/java/com/helloworld/service/CodeFirstService.java
rename to integration-test-groups/cxf-soap/cxf-soap-server/src/main/java/com/helloworld/service/CodeFirstService.java
diff --git a/integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapRoutes.java b/integration-test-groups/cxf-soap/cxf-soap-server/src/main/java/org/apache/camel/quarkus/component/cxf/soap/server/it/CxfSoapRoutes.java
similarity index 50%
copy from integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapRoutes.java
copy to integration-test-groups/cxf-soap/cxf-soap-server/src/main/java/org/apache/camel/quarkus/component/cxf/soap/server/it/CxfSoapRoutes.java
index 7ece4e148c..f68cc39d62 100644
--- a/integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapRoutes.java
+++ b/integration-test-groups/cxf-soap/cxf-soap-server/src/main/java/org/apache/camel/quarkus/component/cxf/soap/server/it/CxfSoapRoutes.java
@@ -14,10 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.component.cxf.soap.it;
-
-import java.util.HashMap;
-import java.util.Map;
+package org.apache.camel.quarkus.component.cxf.soap.server.it;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
@@ -27,45 +24,18 @@ import javax.inject.Named;
import com.helloworld.service.CodeFirstService;
import com.helloworld.service.HelloPortType;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.cxf.common.message.CxfConstants;
import org.apache.camel.component.cxf.jaxws.CxfEndpoint;
import org.apache.cxf.ext.logging.LoggingFeature;
-import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
-import org.apache.wss4j.common.ConfigurationConstants;
-import org.eclipse.microprofile.config.inject.ConfigProperty;
@ApplicationScoped
public class CxfSoapRoutes extends RouteBuilder {
@Inject
- @Named("passwordCallback")
- PasswordCallback passwordCallback;
-
- @Inject
- @Named("loggingFeature")
+ @Named("loggingFeatureServer")
LoggingFeature loggingFeature;
- @Inject
- @Named("wssInterceptor")
- WSS4JOutInterceptor wssInterceptor;
-
- @ConfigProperty(name = "wiremock.url")
- String serviceBaseUri;
-
@Override
public void configure() {
-
- /* Client */
- from("direct:simpleSoapClient")
- .to("cxf:bean:soapClientEndpoint?dataFormat=POJO");
-
- from("direct:wsSecurityClient")
- .to("cxf:bean:secureEndpoint?dataFormat=POJO");
-
- from("direct:complexSoapClient")
- .setHeader(CxfConstants.OPERATION_NAME).constant("Person")
- .to("cxf:bean:soapClientEndpoint?dataFormat=POJO");
-
/* Service */
from("cxf:bean:soapServiceEndpoint")
.setBody().simple("Hello ${body} from CXF service");
@@ -76,52 +46,13 @@ public class CxfSoapRoutes extends RouteBuilder {
@Produces
@ApplicationScoped
- @Named
- WSS4JOutInterceptor wssInterceptor() {
- final Map<String, Object> props = new HashMap<>();
- props.put(ConfigurationConstants.ACTION, "UsernameToken");
- props.put(ConfigurationConstants.PASSWORD_TYPE, "PasswordText");
- props.put(ConfigurationConstants.USER, "camel");
- props.put("passwordCallbackRef", passwordCallback);
- props.put(ConfigurationConstants.ADD_USERNAMETOKEN_NONCE, "true");
- props.put(ConfigurationConstants.ADD_USERNAMETOKEN_CREATED, "true");
- return new WSS4JOutInterceptor(props);
- }
-
- @Produces
- @ApplicationScoped
- @Named
+ @Named("loggingFeatureServer")
public LoggingFeature loggingFeature() {
final LoggingFeature result = new LoggingFeature();
result.setPrettyLogging(true);
return result;
}
- @Produces
- @ApplicationScoped
- @Named
- CxfEndpoint secureEndpoint() {
- final CxfEndpoint result = new CxfEndpoint();
- result.setServiceClass(HelloPortType.class);
- result.setAddress(serviceBaseUri + "/hellowss");
- result.setWsdlURL("wsdl/HelloService.wsdl");
- result.getFeatures().add(loggingFeature);
- result.getOutInterceptors().add(wssInterceptor);
- return result;
- }
-
- @Produces
- @ApplicationScoped
- @Named
- CxfEndpoint soapClientEndpoint() {
- final CxfEndpoint result = new CxfEndpoint();
- result.setServiceClass(HelloPortType.class);
- result.setAddress(serviceBaseUri + "/hello");
- result.setWsdlURL("wsdl/HelloService.wsdl");
- result.getFeatures().add(loggingFeature);
- return result;
- }
-
@Produces
@ApplicationScoped
@Named
diff --git a/integration-tests/cxf-soap/src/main/resources/application.properties b/integration-test-groups/cxf-soap/cxf-soap-server/src/main/resources/application.properties
similarity index 93%
copy from integration-tests/cxf-soap/src/main/resources/application.properties
copy to integration-test-groups/cxf-soap/cxf-soap-server/src/main/resources/application.properties
index efc3dcbba6..574727024a 100644
--- a/integration-tests/cxf-soap/src/main/resources/application.properties
+++ b/integration-test-groups/cxf-soap/cxf-soap-server/src/main/resources/application.properties
@@ -15,8 +15,5 @@
## limitations under the License.
## ---------------------------------------------------------------------------
-password-callback.username=camel
-password-callback.password=quarkus
-
quarkus.cxf.path=/soapservice
quarkus.native.resources.includes = wsdl/*.wsdl
diff --git a/integration-test-groups/cxf-soap/cxf-soap-server/src/main/resources/wsdl/HelloService.wsdl b/integration-test-groups/cxf-soap/cxf-soap-server/src/main/resources/wsdl/HelloService.wsdl
new file mode 100644
index 0000000000..feab8779b5
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-server/src/main/resources/wsdl/HelloService.wsdl
@@ -0,0 +1,106 @@
+<?xml version="1.0" ?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.helloworld.com/Service/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="HelloService" targetNamespace="http://www.helloworld.com/Service/">
+<!--
+
+ 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:types>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.helloworld.com/Service/" targetNamespace="http://www.helloworld.com/Service/" version="1.0">
+
+ <xs:element name="HelloRequest" type="xs:string"></xs:element>
+
+ <xs:element name="HelloResponse" type="xs:string"></xs:element>
+
+ <xs:element name="PersonRequest" type="tns:PersonRequestType"></xs:element>
+
+ <xs:element name="PersonResponse" type="tns:PersonResponseType"></xs:element>
+
+ <xs:complexType name="PersonRequestType">
+ <xs:sequence>
+ <xs:element name="firstName" type="xs:string"></xs:element>
+ <xs:element name="lastName" type="xs:string"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="PersonResponseType">
+ <xs:complexContent>
+ <xs:extension base="tns:PersonRequestType">
+ <xs:sequence>
+ <xs:element name="greeting" type="xs:string"></xs:element>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+</xs:schema>
+ </wsdl:types>
+ <wsdl:message name="HelloResponse">
+ <wsdl:part element="tns:HelloResponse" name="helloOutputPart">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="Hello">
+ <wsdl:part element="tns:HelloRequest" name="helloInputPart">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="PersonResponse">
+ <wsdl:part element="tns:PersonResponse" name="personOutputPart">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="Person">
+ <wsdl:part element="tns:PersonRequest" name="personInputPart">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:portType name="HelloPortType">
+ <wsdl:operation name="Hello">
+ <wsdl:input message="tns:Hello" name="Hello">
+ </wsdl:input>
+ <wsdl:output message="tns:HelloResponse" name="HelloResponse">
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="Person">
+ <wsdl:input message="tns:Person" name="Person">
+ </wsdl:input>
+ <wsdl:output message="tns:PersonResponse" name="PersonResponse">
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="HelloServiceSoapBinding" type="tns:HelloPortType">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding>
+ <wsdl:operation name="Hello">
+ <soap:operation soapAction="https://www.helloworld.com/Service/Hello" style="document"></soap:operation>
+ <wsdl:input name="Hello">
+ <soap:body use="literal"></soap:body>
+ </wsdl:input>
+ <wsdl:output name="HelloResponse">
+ <soap:body use="literal"></soap:body>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="Person">
+ <soap:operation soapAction="https://www.helloworld.com/Service/Person" style="document"></soap:operation>
+ <wsdl:input name="Person">
+ <soap:body use="literal"></soap:body>
+ </wsdl:input>
+ <wsdl:output name="PersonResponse">
+ <soap:body use="literal"></soap:body>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="HelloService">
+ <wsdl:port binding="tns:HelloServiceSoapBinding" name="HelloPort">
+ <soap:address location="http://172.17.0.3:8080/helloworld-ws/HelloService"></soap:address>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
\ No newline at end of file
diff --git a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapServiceIT.java b/integration-test-groups/cxf-soap/cxf-soap-server/src/test/java/org/apache/camel/quarkus/component/cxf/soap/server/it/CxfSoapServiceIT.java
similarity index 93%
rename from integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapServiceIT.java
rename to integration-test-groups/cxf-soap/cxf-soap-server/src/test/java/org/apache/camel/quarkus/component/cxf/soap/server/it/CxfSoapServiceIT.java
index 82aedb472d..e14043a058 100644
--- a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapServiceIT.java
+++ b/integration-test-groups/cxf-soap/cxf-soap-server/src/test/java/org/apache/camel/quarkus/component/cxf/soap/server/it/CxfSoapServiceIT.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.component.cxf.soap.it;
+package org.apache.camel.quarkus.component.cxf.soap.server.it;
import io.quarkus.test.junit.QuarkusIntegrationTest;
diff --git a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapServiceTest.java b/integration-test-groups/cxf-soap/cxf-soap-server/src/test/java/org/apache/camel/quarkus/component/cxf/soap/server/it/CxfSoapServiceTest.java
similarity index 93%
rename from integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapServiceTest.java
rename to integration-test-groups/cxf-soap/cxf-soap-server/src/test/java/org/apache/camel/quarkus/component/cxf/soap/server/it/CxfSoapServiceTest.java
index b886be35de..1348caa3d6 100644
--- a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapServiceTest.java
+++ b/integration-test-groups/cxf-soap/cxf-soap-server/src/test/java/org/apache/camel/quarkus/component/cxf/soap/server/it/CxfSoapServiceTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.component.cxf.soap.it;
+package org.apache.camel.quarkus.component.cxf.soap.server.it;
import javax.xml.ws.BindingProvider;
@@ -24,9 +24,9 @@ import io.quarkus.runtime.LaunchMode;
import io.quarkus.test.junit.QuarkusTest;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
-import org.assertj.core.api.Assertions;
import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@QuarkusTest
@@ -38,7 +38,7 @@ class CxfSoapServiceTest {
final HelloPortType helloPort = service.getHelloPort();
String endpointURL = getServerUrl() + "/soapservice/hello";
((BindingProvider) helloPort).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
- Assertions.assertThat(helloPort.hello("World")).isEqualTo("Hello World from CXF service");
+ Assertions.assertEquals(helloPort.hello("World"), "Hello World from CXF service");
}
private static String getServerUrl() {
diff --git a/integration-test-groups/cxf-soap/cxf-soap-ws-security/README.adoc b/integration-test-groups/cxf-soap/cxf-soap-ws-security/README.adoc
new file mode 100644
index 0000000000..b3dc3651dd
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/README.adoc
@@ -0,0 +1,28 @@
+= Quarkus CXF ws-security tests
+
+These are pure client tests - i.e. there are intentionally no services implemented in the test application.
+All clients access services running in containers.
+
+== Maintenenance notes
+
+=== `CalculatorService.wsdl`
+
+`src/main/resources/wsdl/WssCalculatorService.wsdl` is a static copy of the WSDL served by the testing container.
+It would be too complicated to start the container before running the plugin, so we rather keep the static copy.
+
+There is `org.apache.camel.quarkus.component.cxf.soap.it.CxfSoapClientTest.wsdlUpToDate()` to ensure that it is up to date.
+
+To update `WssCalculatorService.wsdl` manually, first start the container
+
+[shource,shell]
+----
+$ docker pull quay.io/l2x6/calculator-ws:1.0
+$ docker run -p 8080:8080 quay.io/l2x6/calculator-ws:1.0
+----
+
+And then overwrite the existing file with the new content from the container:
+
+[shource,shell]
+----
+curl "http://localhost:8080/calculator-ws/WssCalculatorService?wsdl" --output src/main/resources/wsdl/WssCalculatorService.wsdl
+----
diff --git a/integration-tests/cxf-soap/pom.xml b/integration-test-groups/cxf-soap/cxf-soap-ws-security/pom.xml
similarity index 83%
copy from integration-tests/cxf-soap/pom.xml
copy to integration-test-groups/cxf-soap/cxf-soap-ws-security/pom.xml
index fbcfd6522e..f34bc6f93d 100644
--- a/integration-tests/cxf-soap/pom.xml
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/pom.xml
@@ -23,47 +23,32 @@
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-build-parent-it</artifactId>
<version>2.14.0-SNAPSHOT</version>
- <relativePath>../../poms/build-parent-it/pom.xml</relativePath>
+ <relativePath>../../../poms/build-parent-it/pom.xml</relativePath>
</parent>
- <artifactId>camel-quarkus-integration-test-cxf-soap</artifactId>
- <name>Camel Quarkus :: Integration Tests :: CXF</name>
- <description>Integration tests for Camel Quarkus CXF extension</description>
+ <artifactId>camel-quarkus-integration-test-cxf-soap-ws-security</artifactId>
+ <name>Camel Quarkus :: Integration Tests :: Cxf Soap Ws Security</name>
+ <description>Integration tests for Camel Quarkus CXF extension ws security part</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
- <version>${cxf.version}</version>
<executions>
<execution>
- <id>generate-sources</id>
- <phase>generate-sources</phase>
+ <goals>
+ <goal>wsdl2java</goal>
+ </goals>
<configuration>
- <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
<wsdlOptions>
<wsdlOption>
- <wsdl>${basedir}/src/main/resources/wsdl/HelloService.wsdl</wsdl>
- <wsdlLocation>classpath:wsdl/HelloService.wsdl</wsdlLocation>
- <extraargs>
- <extraarg>-xjc-Xts</extraarg>
- </extraargs>
+ <wsdl>${basedir}/src/main/resources/wsdl/WssCalculatorService.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
- <goals>
- <goal>wsdl2java</goal>
- </goals>
</execution>
</executions>
- <dependencies>
- <dependency>
- <groupId>org.apache.cxf.xjcplugins</groupId>
- <artifactId>cxf-xjc-ts</artifactId>
- <version>${cxf.xjc-utils.version}</version>
- </dependency>
- </dependencies>
</plugin>
</plugins>
</build>
@@ -108,8 +93,19 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus-integration-wiremock-support</artifactId>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>testcontainers</artifactId>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit4-mock</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
@@ -179,6 +175,17 @@
</dependency>
</dependencies>
</profile>
+ <profile>
+ <id>skip-testcontainers-tests</id>
+ <activation>
+ <property>
+ <name>skip-testcontainers-tests</name>
+ </property>
+ </activation>
+ <properties>
+ <skipTests>true</skipTests>
+ </properties>
+ </profile>
</profiles>
</project>
diff --git a/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapResource.java b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapResource.java
new file mode 100644
index 0000000000..486bbf2597
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapResource.java
@@ -0,0 +1,54 @@
+/*
+ * 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.security.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.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.apache.camel.ProducerTemplate;
+
+@Path("/cxf-soap")
+@ApplicationScoped
+public class CxfSoapResource {
+
+ @Inject
+ ProducerTemplate producerTemplate;
+
+ @Path("/modulo")
+ @POST
+ @Consumes(MediaType.WILDCARD)
+ @Produces(MediaType.TEXT_PLAIN)
+ public Response modulo(@QueryParam("a") int a,
+ @QueryParam("b") int b)
+ throws Exception {
+ final String response = producerTemplate.requestBody("direct:modulo", new int[] { a, b },
+ String.class);
+ return Response
+ .created(new URI("https://camel.apache.org/"))
+ .entity(response)
+ .build();
+ }
+}
diff --git a/integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapRoutes.java b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapRoutes.java
similarity index 54%
rename from integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapRoutes.java
rename to integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapRoutes.java
index 7ece4e148c..31212837f9 100644
--- a/integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapRoutes.java
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapRoutes.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.component.cxf.soap.it;
+package org.apache.camel.quarkus.component.cxf.soap.security.it;
import java.util.HashMap;
import java.util.Map;
@@ -24,54 +24,41 @@ import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
-import com.helloworld.service.CodeFirstService;
-import com.helloworld.service.HelloPortType;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.cxf.common.message.CxfConstants;
import org.apache.camel.component.cxf.jaxws.CxfEndpoint;
import org.apache.cxf.ext.logging.LoggingFeature;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.wss4j.common.ConfigurationConstants;
import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.eap.quickstarts.wscalculator.wsscalculator.WssCalculatorService;
@ApplicationScoped
public class CxfSoapRoutes extends RouteBuilder {
+ @ConfigProperty(name = "password-callback.username")
+ String username;
+
@Inject
@Named("passwordCallback")
PasswordCallback passwordCallback;
@Inject
- @Named("loggingFeature")
+ @Named("loggingFeatureSecurity")
LoggingFeature loggingFeature;
@Inject
@Named("wssInterceptor")
WSS4JOutInterceptor wssInterceptor;
- @ConfigProperty(name = "wiremock.url")
+ @ConfigProperty(name = "camel-quarkus.it.calculator.baseUri")
String serviceBaseUri;
@Override
public void configure() {
- /* Client */
- from("direct:simpleSoapClient")
- .to("cxf:bean:soapClientEndpoint?dataFormat=POJO");
-
- from("direct:wsSecurityClient")
+ from("direct:modulo")
.to("cxf:bean:secureEndpoint?dataFormat=POJO");
- from("direct:complexSoapClient")
- .setHeader(CxfConstants.OPERATION_NAME).constant("Person")
- .to("cxf:bean:soapClientEndpoint?dataFormat=POJO");
-
- /* Service */
- from("cxf:bean:soapServiceEndpoint")
- .setBody().simple("Hello ${body} from CXF service");
-
- from("cxf:bean:codeFirstServiceEndpoint")
- .setBody().constant("Hello CamelQuarkusCXF");
}
@Produces
@@ -81,8 +68,8 @@ public class CxfSoapRoutes extends RouteBuilder {
final Map<String, Object> props = new HashMap<>();
props.put(ConfigurationConstants.ACTION, "UsernameToken");
props.put(ConfigurationConstants.PASSWORD_TYPE, "PasswordText");
- props.put(ConfigurationConstants.USER, "camel");
- props.put("passwordCallbackRef", passwordCallback);
+ props.put(ConfigurationConstants.USER, username);
+ props.put(ConfigurationConstants.PW_CALLBACK_REF, passwordCallback);
props.put(ConfigurationConstants.ADD_USERNAMETOKEN_NONCE, "true");
props.put(ConfigurationConstants.ADD_USERNAMETOKEN_CREATED, "true");
return new WSS4JOutInterceptor(props);
@@ -90,7 +77,7 @@ public class CxfSoapRoutes extends RouteBuilder {
@Produces
@ApplicationScoped
- @Named
+ @Named("loggingFeatureSecurity")
public LoggingFeature loggingFeature() {
final LoggingFeature result = new LoggingFeature();
result.setPrettyLogging(true);
@@ -102,46 +89,12 @@ public class CxfSoapRoutes extends RouteBuilder {
@Named
CxfEndpoint secureEndpoint() {
final CxfEndpoint result = new CxfEndpoint();
- result.setServiceClass(HelloPortType.class);
- result.setAddress(serviceBaseUri + "/hellowss");
- result.setWsdlURL("wsdl/HelloService.wsdl");
+ result.setServiceClass(WssCalculatorService.class);
+ result.setAddress(serviceBaseUri + "/calculator-ws/WssCalculatorService");
+ result.setWsdlURL("wsdl/WssCalculatorService.wsdl");
result.getFeatures().add(loggingFeature);
result.getOutInterceptors().add(wssInterceptor);
- return result;
- }
-
- @Produces
- @ApplicationScoped
- @Named
- CxfEndpoint soapClientEndpoint() {
- final CxfEndpoint result = new CxfEndpoint();
- result.setServiceClass(HelloPortType.class);
- result.setAddress(serviceBaseUri + "/hello");
- result.setWsdlURL("wsdl/HelloService.wsdl");
- result.getFeatures().add(loggingFeature);
- return result;
- }
-
- @Produces
- @ApplicationScoped
- @Named
- CxfEndpoint soapServiceEndpoint() {
- final CxfEndpoint result = new CxfEndpoint();
- result.setServiceClass(HelloPortType.class);
- result.setAddress("/hello");
- result.setWsdlURL("wsdl/HelloService.wsdl");
- result.getFeatures().add(loggingFeature);
- return result;
- }
- @Produces
- @ApplicationScoped
- @Named
- CxfEndpoint codeFirstServiceEndpoint() {
- final CxfEndpoint result = new CxfEndpoint();
- result.setServiceClass(CodeFirstService.class);
- result.setAddress("/codefirst");
- result.getFeatures().add(loggingFeature);
return result;
}
}
diff --git a/integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/PasswordCallback.java b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/java/org/apache/camel/quarkus/component/cxf/soap/security/it/PasswordCallback.java
similarity index 90%
rename from integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/PasswordCallback.java
rename to integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/java/org/apache/camel/quarkus/component/cxf/soap/security/it/PasswordCallback.java
index 99e86f65c1..b80c027b0c 100644
--- a/integration-tests/cxf-soap/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/PasswordCallback.java
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/java/org/apache/camel/quarkus/component/cxf/soap/security/it/PasswordCallback.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.component.cxf.soap.it;
+package org.apache.camel.quarkus.component.cxf.soap.security.it;
import java.io.IOException;
@@ -44,7 +44,9 @@ public class PasswordCallback implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (Callback callback : callbacks) {
if (callback instanceof WSPasswordCallback) {
- ((WSPasswordCallback) callback).setPassword(password);
+ if (username.equals(((WSPasswordCallback) callback).getIdentifier())) {
+ ((WSPasswordCallback) callback).setPassword(password);
+ }
}
}
}
diff --git a/integration-tests/cxf-soap/src/main/resources/application.properties b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/resources/application.properties
similarity index 93%
rename from integration-tests/cxf-soap/src/main/resources/application.properties
rename to integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/resources/application.properties
index efc3dcbba6..574727024a 100644
--- a/integration-tests/cxf-soap/src/main/resources/application.properties
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/resources/application.properties
@@ -15,8 +15,5 @@
## limitations under the License.
## ---------------------------------------------------------------------------
-password-callback.username=camel
-password-callback.password=quarkus
-
quarkus.cxf.path=/soapservice
quarkus.native.resources.includes = wsdl/*.wsdl
diff --git a/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/resources/wsdl/WssCalculatorService.wsdl b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/resources/wsdl/WssCalculatorService.wsdl
new file mode 100644
index 0000000000..0befa65a53
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/main/resources/wsdl/WssCalculatorService.wsdl
@@ -0,0 +1,75 @@
+<?xml version="1.0" ?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/WssCalculator" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="WssCalculatorService" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/WssCalculator">
+<!--
+
+ 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:types>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/WssCalculator" elementFormDefault="unqualified" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/WssCalculator" version="1.0">
+
+ <xs:element name="modulo" type="tns:modulo"></xs:element>
+
+ <xs:element name="moduloResponse" type="tns:moduloResponse"></xs:element>
+
+ <xs:complexType name="modulo">
+ <xs:sequence>
+ <xs:element name="arg0" type="xs:int"></xs:element>
+ <xs:element name="arg1" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="moduloResponse">
+ <xs:sequence>
+ <xs:element name="return" type="xs:int"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+</xs:schema>
+ </wsdl:types>
+ <wsdl:message name="moduloResponse">
+ <wsdl:part element="tns:moduloResponse" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="modulo">
+ <wsdl:part element="tns:modulo" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:portType name="WssCalculatorService">
+ <wsdl:operation name="modulo">
+ <wsdl:input message="tns:modulo" name="modulo">
+ </wsdl:input>
+ <wsdl:output message="tns:moduloResponse" name="moduloResponse">
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="WssCalculatorServiceSoapBinding" type="tns:WssCalculatorService">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding>
+ <wsdl:operation name="modulo">
+ <soap:operation soapAction="" style="document"></soap:operation>
+ <wsdl:input name="modulo">
+ <soap:body use="literal"></soap:body>
+ </wsdl:input>
+ <wsdl:output name="moduloResponse">
+ <soap:body use="literal"></soap:body>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="WssCalculatorService">
+ <wsdl:port binding="tns:WssCalculatorServiceSoapBinding" name="WssCalculator">
+
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
\ No newline at end of file
diff --git a/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/test/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfClientTestResource.java b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/test/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfClientTestResource.java
new file mode 100644
index 0000000000..8c5e6158b7
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/test/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfClientTestResource.java
@@ -0,0 +1,76 @@
+/*
+ * 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.security.it;
+
+import java.util.Map;
+
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.Wait;
+
+public class CxfClientTestResource implements QuarkusTestResourceLifecycleManager {
+ private static final Logger log = LoggerFactory.getLogger(CxfClientTestResource.class);
+
+ private static final int WILDFLY_PORT = 8080;
+ private GenericContainer<?> calculatorContainer;
+
+ @Override
+ public Map<String, String> start() {
+
+ final String user = "camel-quarkus-user-user";
+ final String password = "secret-password";
+
+ try {
+ try {
+ calculatorContainer = new GenericContainer<>("quay.io/l2x6/calculator-ws:1.0")
+ .withEnv("WSS_USER", user)
+ .withEnv("WSS_PASSWORD", password)
+ .withLogConsumer(new Slf4jLogConsumer(log))
+ .withExposedPorts(WILDFLY_PORT)
+ .waitingFor(Wait.forHttp("/calculator-ws/CalculatorService?wsdl"));
+
+ calculatorContainer.start();
+
+ return Map.of(
+ "camel-quarkus.it.calculator.baseUri",
+ "http://" + calculatorContainer.getHost() + ":" +
+ calculatorContainer.getMappedPort(WILDFLY_PORT),
+ "password-callback.username", user,
+ "password-callback.password", password);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void stop() {
+ try {
+ if (calculatorContainer != null) {
+ calculatorContainer.stop();
+ }
+ } catch (Exception e) {
+ // ignored
+ }
+ }
+}
diff --git a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapClientTestResource.java b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/test/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapClientIT.java
similarity index 66%
rename from integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapClientTestResource.java
rename to integration-test-groups/cxf-soap/cxf-soap-ws-security/src/test/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapClientIT.java
index 9a01702e63..0c2951dcd2 100644
--- a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapClientTestResource.java
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/test/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapClientIT.java
@@ -14,19 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.component.cxf.soap.it;
+package org.apache.camel.quarkus.component.cxf.soap.security.it;
-import org.apache.camel.quarkus.test.wiremock.WireMockTestResourceLifecycleManager;
+import io.quarkus.test.junit.QuarkusIntegrationTest;
-public class CxfSoapClientTestResource extends WireMockTestResourceLifecycleManager {
-
- @Override
- protected String getRecordTargetBaseUrl() {
- return "/";
- }
-
- @Override
- protected boolean isMockingEnabled() {
- return true;
- }
+@QuarkusIntegrationTest
+class CxfSoapClientIT extends CxfSoapClientTest {
}
diff --git a/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/test/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapClientTest.java b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/test/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapClientTest.java
new file mode 100644
index 0000000000..1edbc4abe2
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-ws-security/src/test/java/org/apache/camel/quarkus/component/cxf/soap/security/it/CxfSoapClientTest.java
@@ -0,0 +1,85 @@
+/*
+ * 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.security.it;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.eclipse.microprofile.config.ConfigProvider;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+@QuarkusTest
+@QuarkusTestResource(CxfClientTestResource.class)
+class CxfSoapClientTest {
+
+ @Test
+ public void wsSecurityClient() {
+ RestAssured.given()
+ .queryParam("a", "12")
+ .queryParam("b", "8")
+ .post("/cxf-soap/modulo")
+ .then()
+ .statusCode(201)
+ .body(equalTo("4"));
+ }
+
+ /**
+ * Make sure that our static copy is the same as the WSDL served by the container
+ *
+ * @throws IOException
+ */
+ @Test
+ void wsdlUpToDate() throws IOException {
+ final String wsdlUrl = ConfigProvider.getConfig()
+ .getValue("camel-quarkus.it.calculator.baseUri", String.class);
+
+ final String staticCopyPath = "target/classes/wsdl/WssCalculatorService.wsdl";
+ /* The changing Docker IP address in the WSDL should not matter */
+ final String sanitizerRegex = "<soap:address location=\"http://[^/]*/calculator-ws/WssCalculatorService\"></soap:address>";
+ final String staticCopyContent = Files
+ .readString(Paths.get(staticCopyPath), StandardCharsets.UTF_8)
+ .replaceAll(sanitizerRegex, "")
+ //remove a comment with license
+ .replaceAll("<!--[.\\s\\S]*?-->", "\n")
+ //remove all whitesaces to ignore formatting changes
+ .replaceAll("\\s", "");
+
+ final String expected = RestAssured.given()
+ .get(wsdlUrl + "/calculator-ws/WssCalculatorService?wsdl")
+ .then()
+ .statusCode(200)
+ .extract().body().asString();
+
+ final String expectedContent = expected.replaceAll(sanitizerRegex, "");
+
+ if (!expected.replaceAll(sanitizerRegex, "").replaceAll("\\s", "").equals(staticCopyContent)) {
+ Files.writeString(Paths.get(staticCopyPath), expectedContent, StandardCharsets.UTF_8);
+ Assertions.fail("The static WSDL copy in " + staticCopyPath
+ + " went out of sync with the WSDL served by the container. The content was updated by the test, you just need to review and commit the changes.");
+ }
+
+ }
+}
diff --git a/integration-test-groups/pom.xml b/integration-test-groups/cxf-soap/pom.xml
similarity index 71%
copy from integration-test-groups/pom.xml
copy to integration-test-groups/cxf-soap/pom.xml
index f7cd77d8ae..6c35c2f822 100644
--- a/integration-test-groups/pom.xml
+++ b/integration-test-groups/cxf-soap/pom.xml
@@ -22,28 +22,24 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus</artifactId>
+ <artifactId>camel-quarkus-integration-test-groups</artifactId>
<version>2.14.0-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
</parent>
- <artifactId>camel-quarkus-integration-test-groups</artifactId>
+ <artifactId>camel-quarkus-integration-tests-cxf-soap</artifactId>
<packaging>pom</packaging>
- <name>Camel Quarkus :: Integration Test Groups</name>
+ <name>Camel Quarkus :: Cxf Soap Integration Tests</name>
<properties>
<quarkus.banner.enabled>false</quarkus.banner.enabled>
</properties>
<modules>
- <!-- test groups a..z; do not remove this comment, it is important when sorting via mvn process-resources -Pformat -->
- <module>aws2</module>
- <module>aws2-quarkus-client</module>
- <module>azure</module>
- <module>compression</module>
- <module>foundation</module>
- <module>mongodb</module>
+ <!-- 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-server</module>
+ <module>cxf-soap-ws-security</module>
</modules>
</project>
diff --git a/integration-test-groups/pom.xml b/integration-test-groups/pom.xml
index f7cd77d8ae..500c4a7e95 100644
--- a/integration-test-groups/pom.xml
+++ b/integration-test-groups/pom.xml
@@ -42,6 +42,7 @@
<module>aws2-quarkus-client</module>
<module>azure</module>
<module>compression</module>
+ <module>cxf-soap</module>
<module>foundation</module>
<module>mongodb</module>
</modules>
diff --git a/integration-tests/cxf-soap-grouped/README.adoc b/integration-tests/cxf-soap-grouped/README.adoc
new file mode 100644
index 0000000000..aca5cd1845
--- /dev/null
+++ b/integration-tests/cxf-soap-grouped/README.adoc
@@ -0,0 +1,4 @@
+== Cxf Soap grouped integration tests
+
+This module allows executing all tests from `integration-test-groups/cxf-soap/*` grouped together.
+See the https://camel.apache.org/camel-quarkus/latest/contributor-guide/extension-testing.html#_grouping[Grouping section] of the Contributor guide for more details.
diff --git a/integration-tests/cxf-soap/pom.xml b/integration-tests/cxf-soap-grouped/pom.xml
similarity index 61%
rename from integration-tests/cxf-soap/pom.xml
rename to integration-tests/cxf-soap-grouped/pom.xml
index fbcfd6522e..4457d2b6d3 100644
--- a/integration-tests/cxf-soap/pom.xml
+++ b/integration-tests/cxf-soap-grouped/pom.xml
@@ -26,48 +26,11 @@
<relativePath>../../poms/build-parent-it/pom.xml</relativePath>
</parent>
- <artifactId>camel-quarkus-integration-test-cxf-soap</artifactId>
- <name>Camel Quarkus :: Integration Tests :: CXF</name>
- <description>Integration tests for Camel Quarkus CXF extension</description>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.cxf</groupId>
- <artifactId>cxf-codegen-plugin</artifactId>
- <version>${cxf.version}</version>
- <executions>
- <execution>
- <id>generate-sources</id>
- <phase>generate-sources</phase>
- <configuration>
- <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
- <wsdlOptions>
- <wsdlOption>
- <wsdl>${basedir}/src/main/resources/wsdl/HelloService.wsdl</wsdl>
- <wsdlLocation>classpath:wsdl/HelloService.wsdl</wsdlLocation>
- <extraargs>
- <extraarg>-xjc-Xts</extraarg>
- </extraargs>
- </wsdlOption>
- </wsdlOptions>
- </configuration>
- <goals>
- <goal>wsdl2java</goal>
- </goals>
- </execution>
- </executions>
- <dependencies>
- <dependency>
- <groupId>org.apache.cxf.xjcplugins</groupId>
- <artifactId>cxf-xjc-ts</artifactId>
- <version>${cxf.xjc-utils.version}</version>
- </dependency>
- </dependencies>
- </plugin>
- </plugins>
- </build>
+ <artifactId>camel-quarkus-integration-test-cxf-soap-grouped</artifactId>
+ <name>Camel Quarkus :: Integration Tests :: Cxf Soap Grouped</name>
+ <description>Cxf Soap tests from ../integration-test-groups/cxf-soap merged together</description>
+ <!-- Regenerate the dependencies via `mvn process-resources -Pformat -N` from the source tree root directory -->
<dependencies>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
@@ -77,16 +40,6 @@
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-rt-ws-security</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.cxf.xjc-utils</groupId>
<artifactId>cxf-xjc-runtime</artifactId>
@@ -95,6 +48,14 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</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>
<!-- test dependencies -->
<dependency>
@@ -108,12 +69,110 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus-integration-wiremock-support</artifactId>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>testcontainers</artifactId>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit4-mock</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>add-sources</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>${basedir}/target/src/main/java</source>
+ </sources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>add-test-sources</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-test-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>${basedir}/target/src/test/java</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.gmaven</groupId>
+ <artifactId>groovy-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>group-sources</id>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <phase>generate-sources</phase>
+ <configuration>
+ <source>file:${maven.multiModuleProjectDirectory}/tooling/scripts/group-tests.groovy</source>
+ <properties>
+ <group-tests.source.dir>${maven.multiModuleProjectDirectory}/integration-test-groups/cxf-soap</group-tests.source.dir>
+ <group-tests.dest.module.dir>${project.basedir}</group-tests.dest.module.dir>
+ <group-tests.concat.rel.paths>src/main/resources/application.properties</group-tests.concat.rel.paths>
+ </properties>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-codegen-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>wsdl2java</goal>
+ </goals>
+ <configuration>
+ <wsdlOptions>
+ <wsdlOption>
+ <wsdl>${basedir}/target/classes/wsdl/CalculatorService.wsdl</wsdl>
+ </wsdlOption>
+ <wsdlOption>
+ <wsdl>${basedir}/target/classes/wsdl/HelloService.wsdl</wsdl>
+ </wsdlOption>
+ <wsdlOption>
+ <wsdl>${basedir}/target/classes/wsdl/WssCalculatorService.wsdl</wsdl>
+ </wsdlOption>
+ </wsdlOptions>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.cxf.xjcplugins</groupId>
+ <artifactId>cxf-xjc-ts</artifactId>
+ <version>${cxf.xjc-utils.version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+
<profiles>
<profile>
<id>native</id>
@@ -179,6 +238,17 @@
</dependency>
</dependencies>
</profile>
+ <profile>
+ <id>skip-testcontainers-tests</id>
+ <activation>
+ <property>
+ <name>skip-testcontainers-tests</name>
+ </property>
+ </activation>
+ <properties>
+ <skipTests>true</skipTests>
+ </properties>
+ </profile>
</profiles>
</project>
diff --git a/integration-tests/cxf-soap/src/main/resources/wsdl/HelloService.wsdl b/integration-tests/cxf-soap/src/main/resources/wsdl/HelloService.wsdl
deleted file mode 100644
index f68ce72006..0000000000
--- a/integration-tests/cxf-soap/src/main/resources/wsdl/HelloService.wsdl
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.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.
-
--->
-<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:tns="http://www.helloworld.com/Service/" xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.helloworld.com/Service/">
-
- <wsdl:types>
- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.helloworld.com/Service/">
- <xsd:element name="HelloRequest" type="xsd:string"/>
- <xsd:element name="HelloResponse" type="xsd:string"/>
-
- <xsd:complexType name="PersonRequestType">
- <xsd:sequence>
- <xsd:element name="firstName" type="xsd:string"/>
- <xsd:element name="lastName" type="xsd:string"/>
- </xsd:sequence>
- </xsd:complexType>
- <xsd:complexType name="PersonResponseType">
- <xsd:complexContent>
- <extension base="tns:PersonRequestType">
- <xsd:sequence>
- <xsd:element name="greeting" type="xsd:string"/>
- </xsd:sequence>
- </extension>
- </xsd:complexContent>
- </xsd:complexType>
-
- <xsd:element name="PersonRequest" type="tns:PersonRequestType"/>
- <xsd:element name="PersonResponse" type="tns:PersonResponseType"/>
- </xsd:schema>
- </wsdl:types>
-
- <wsdl:message name="helloInputMessage">
- <wsdl:part name="helloInputPart" element="tns:HelloRequest"/>
- </wsdl:message>
- <wsdl:message name="helloOutputMessage">
- <wsdl:part name="helloOutputPart" element="tns:HelloResponse"/>
- </wsdl:message>
-
- <wsdl:message name="personInputMessage">
- <wsdl:part name="personInputPart" element="tns:PersonRequest"/>
- </wsdl:message>
- <wsdl:message name="personOutputMessage">
- <wsdl:part name="personOutputPart" element="tns:PersonResponse"/>
- </wsdl:message>
-
- <wsdl:portType name="HelloPortType">
- <wsdl:operation name="Hello">
- <wsdl:input name="helloInput"
- message="tns:helloInputMessage"/>
- <wsdl:output name="helloOutput"
- message="tns:helloOutputMessage"/>
- </wsdl:operation>
-
- <wsdl:operation name="Person">
- <wsdl:input name="personInput"
- message="tns:personInputMessage"/>
- <wsdl:output name="personOutput"
- message="tns:personOutputMessage"/>
- </wsdl:operation>
-
- </wsdl:portType>
-
- <wsdl:binding name="HelloBinding" type="tns:HelloPortType">
- <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
- <wsdl:operation name="Hello">
- <soap:operation
- soapAction="https://www.helloworld.com/Service/Hello"/>
- <wsdl:input name="helloInput">
- <soap:body use="literal"/>
- </wsdl:input>
- <wsdl:output name="helloOutput">
- <soap:body use="literal"/>
- </wsdl:output>
- </wsdl:operation>
- <wsdl:operation name="Person">
- <soap:operation
- soapAction="https://www.helloworld.com/Service/Person"/>
- <wsdl:input name="personInput">
- <soap:body use="literal"/>
- </wsdl:input>
- <wsdl:output name="personOutput">
- <soap:body use="literal"/>
- </wsdl:output>
- </wsdl:operation>
- </wsdl:binding>
-
- <wsdl:service name="HelloService">
- <wsdl:port name="HelloPort" binding="tns:HelloBinding">
- <soap:address location="http://localhost:7878/hello"/>
- </wsdl:port>
- </wsdl:service>
-
-</wsdl:definitions>
\ No newline at end of file
diff --git a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapClientTest.java b/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapClientTest.java
deleted file mode 100644
index 7df5d9fd5f..0000000000
--- a/integration-tests/cxf-soap/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/CxfSoapClientTest.java
+++ /dev/null
@@ -1,61 +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.cxf.soap.it;
-
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
-
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.is;
-
-@QuarkusTest
-@QuarkusTestResource(CxfSoapClientTestResource.class)
-class CxfSoapClientTest {
-
- @Test
- public void simpleSoapClient() {
- RestAssured.given()
- .body("CamelQuarkusCXF")
- .post("/cxf-soap/simple/simpleSoapClient")
- .then()
- .statusCode(201)
- .body(is("Hello CamelQuarkusCXF"));
- }
-
- @Test
- public void wsSecurityClient() {
- RestAssured.given()
- .body("CamelQuarkusCXF")
- .post("/cxf-soap/simple/wsSecurityClient")
- .then()
- .statusCode(201)
- .body(is("Hello WSSecurity CamelQuarkusCXF"));
- }
-
- @Test
- public void complexSoapClient() {
- RestAssured.given()
- .queryParam("firstName", "Camel Quarkus")
- .queryParam("lastName", "CXF")
- .post("/cxf-soap/person/complexSoapClient")
- .then()
- .statusCode(201)
- .body(containsString("greeting=Hello,firstName=Camel Quarkus,lastName=CXF"));
- }
-}
diff --git a/integration-tests/cxf-soap/src/test/resources/__files/simpleHelloWorldResponse.xml b/integration-tests/cxf-soap/src/test/resources/__files/simpleHelloWorldResponse.xml
deleted file mode 100644
index 95d7c485f0..0000000000
--- a/integration-tests/cxf-soap/src/test/resources/__files/simpleHelloWorldResponse.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:hello="http://www.helloworld.com/Service/">
- <soapenv:Header/>
- <soapenv:Body>
- <hello:HelloResponse>Hello CamelQuarkusCXF</hello:HelloResponse>
- </soapenv:Body>
-</soapenv:Envelope>
diff --git a/integration-tests/cxf-soap/src/test/resources/__files/soapObjectResponse.xml b/integration-tests/cxf-soap/src/test/resources/__files/soapObjectResponse.xml
deleted file mode 100644
index 34725c1a53..0000000000
--- a/integration-tests/cxf-soap/src/test/resources/__files/soapObjectResponse.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:hello="http://www.helloworld.com/Service/">
- <soapenv:Header/>
- <soapenv:Body>
- <ns2:PersonResponse xmlns:ns2="http://www.helloworld.com/Service/">
- <firstName>Camel Quarkus</firstName>
- <lastName>CXF</lastName>
- <greeting>Hello</greeting>
- </ns2:PersonResponse>
- </soapenv:Body>
-</soapenv:Envelope>
diff --git a/integration-tests/cxf-soap/src/test/resources/__files/wsSecurityResponse.xml b/integration-tests/cxf-soap/src/test/resources/__files/wsSecurityResponse.xml
deleted file mode 100644
index 2edf8040d2..0000000000
--- a/integration-tests/cxf-soap/src/test/resources/__files/wsSecurityResponse.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:hello="http://www.helloworld.com/Service/">
- <soapenv:Header/>
- <soapenv:Body>
- <hello:HelloResponse>Hello WSSecurity CamelQuarkusCXF</hello:HelloResponse>
- </soapenv:Body>
-</soapenv:Envelope>
diff --git a/integration-tests/cxf-soap/src/test/resources/mappings/simpleHelloWorld.json b/integration-tests/cxf-soap/src/test/resources/mappings/simpleHelloWorld.json
deleted file mode 100644
index 49d1d8c09a..0000000000
--- a/integration-tests/cxf-soap/src/test/resources/mappings/simpleHelloWorld.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "request": {
- "method": "POST",
- "url": "/hello",
- "headers": {
- "Content-Type": {
- "equalTo": "text/xml; charset=UTF-8"
- },
- "SOAPAction": {
- "equalTo": "\"https://www.helloworld.com/Service/Hello\""
- }
- },
- "bodyPatterns": [
- {
- "equalToXml": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><HelloRequest xmlns=\"http://www.helloworld.com/Service/\">CamelQuarkusCXF</HelloRequest></soap:Body></soap:Envelope>",
- "exemptedComparisons": ["NAMESPACE_URI", "NAMESPACE_PREFIX"]
- }
- ]
- },
- "response": {
- "status": 200,
- "bodyFileName": "simpleHelloWorldResponse.xml",
- "headers": {
- "Content-Type": "text/xml; charset=UTF-8"
- }
- }
-}
\ No newline at end of file
diff --git a/integration-tests/cxf-soap/src/test/resources/mappings/soapObject.json b/integration-tests/cxf-soap/src/test/resources/mappings/soapObject.json
deleted file mode 100644
index 58ae479ebc..0000000000
--- a/integration-tests/cxf-soap/src/test/resources/mappings/soapObject.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "request": {
- "method": "POST",
- "url": "/hello",
- "headers": {
- "Content-Type": {
- "equalTo": "text/xml; charset=UTF-8"
- },
- "SOAPAction": {
- "equalTo": "\"https://www.helloworld.com/Service/Person\""
- }
- },
- "bodyPatterns": [
- {
- "matchesXPath": "//ns2:PersonRequest",
- "xPathNamespaces": {
- "ns2": "http://www.helloworld.com/Service/"
- }
- }
- ]
- },
- "response": {
- "status": 200,
- "bodyFileName": "soapObjectResponse.xml",
- "headers": {
- "Content-Type": "text/xml; charset=UTF-8"
- }
- }
-}
\ No newline at end of file
diff --git a/integration-tests/cxf-soap/src/test/resources/mappings/wsSecurity.json b/integration-tests/cxf-soap/src/test/resources/mappings/wsSecurity.json
deleted file mode 100644
index 1884da14f8..0000000000
--- a/integration-tests/cxf-soap/src/test/resources/mappings/wsSecurity.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "request": {
- "method": "POST",
- "url": "/hellowss",
- "headers": {
- "Content-Type": {
- "equalTo": "text/xml; charset=UTF-8"
- },
- "SOAPAction": {
- "equalTo": "\"https://www.helloworld.com/Service/Hello\""
- }
- },
- "bodyPatterns": [
- {
- "matchesXPath": "//wsse:Security",
- "xPathNamespaces": {
- "wsse": "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
- }
- },
- {
- "matchesXPath": "//wsse:UsernameToken",
- "xPathNamespaces": {
- "wsse": "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
- }
- },
- {
- "matchesXPath": "//wsse:Username",
- "xPathNamespaces": {
- "wsse": "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
- }
- },
- {
- "matchesXPath": "//wsse:Password",
- "xPathNamespaces": {
- "wsse": "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
- }
- },
- {
- "matchesXPath": "//wsse:Nonce",
- "xPathNamespaces": {
- "wsse": "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
- }
- },
- {
- "matchesXPath": "//wsu:Created",
- "xPathNamespaces": {
- "wsu": "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
- }
- }
- ]
- },
- "response": {
- "status": 200,
- "bodyFileName": "wsSecurityResponse.xml",
- "headers": {
- "Content-Type": "text/xml; charset=UTF-8"
- }
- }
-}
\ No newline at end of file
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index e2a1e23bef..e9776deac0 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -78,7 +78,7 @@
<module>crypto</module>
<module>csimple</module>
<module>csv</module>
- <module>cxf-soap</module>
+ <module>cxf-soap-grouped</module>
<module>dataformat</module>
<module>dataformats-json</module>
<module>datasonnet</module>
diff --git a/pom.xml b/pom.xml
index 70d16a5804..ace7bc855e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -309,6 +309,12 @@
<pluginManagement>
<plugins>
<!-- Only plugins relevant to both end user applications and Camel Quarkus extensions -->
+ <plugin>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-codegen-plugin</artifactId>
+ <version>${cxf.version}</version>
+ </plugin>
+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
diff --git a/tooling/scripts/test-categories.yaml b/tooling/scripts/test-categories.yaml
index 786930f5d4..7a7b29847c 100644
--- a/tooling/scripts/test-categories.yaml
+++ b/tooling/scripts/test-categories.yaml
@@ -84,7 +84,7 @@ group-05:
- bindy
- cbor
- csv
- - cxf-soap
+ - cxf-soap-grouped
- dataformat
- datasonnet
- hl7