You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zb...@apache.org on 2023/09/15 17:15:27 UTC
[camel-quarkus] 02/02: Test Prometheus metrics with CXF SOAP client and service
This is an automated email from the ASF dual-hosted git repository.
zbendhiba pushed a commit to branch 3.2.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 37712bdc954392f5fa7f6f5dfc44c487934eb59d
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Wed Sep 13 12:53:14 2023 +0200
Test Prometheus metrics with CXF SOAP client and service
---
.../cxf-soap/cxf-soap-metrics/pom.xml | 139 +++++++++++++++++++++
.../cxf/soap/it/metrics/CxfSoapMetricsRoutes.java | 80 ++++++++++++
.../cxf/soap/it/metrics/MetricsClientResource.java | 41 ++++++
.../cxf/soap/it/metrics/service/HelloService.java | 32 +++++
.../src/main/resources/application.properties | 21 ++++
.../main/resources/wsdl/MetricsHelloService.wsdl | 75 +++++++++++
.../component/cxf/soap/it/metrics/MetricsIT.java | 24 ++++
.../component/cxf/soap/it/metrics/MetricsTest.java | 125 ++++++++++++++++++
integration-test-groups/cxf-soap/pom.xml | 1 +
integration-tests/cxf-soap-grouped/pom.xml | 8 ++
10 files changed, 546 insertions(+)
diff --git a/integration-test-groups/cxf-soap/cxf-soap-metrics/pom.xml b/integration-test-groups/cxf-soap/cxf-soap-metrics/pom.xml
new file mode 100644
index 0000000000..ce1258b3d9
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-metrics/pom.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-build-parent-it</artifactId>
+ <version>3.2.1-SNAPSHOT</version>
+ <relativePath>../../../poms/build-parent-it/pom.xml</relativePath>
+ </parent>
+
+ <artifactId>camel-quarkus-integration-test-cxf-soap-metrics</artifactId>
+
+ <name>Quarkus CXF - Integration Test - Metrics</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-cxf-soap</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-direct</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkiverse.cxf</groupId>
+ <artifactId>quarkus-cxf-rt-features-metrics</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit5</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>virtualDependencies</id>
+ <activation>
+ <property>
+ <name>!noVirtualDependencies</name>
+ </property>
+ </activation>
+ <dependencies>
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-cxf-soap-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-direct-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/CxfSoapMetricsRoutes.java b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/CxfSoapMetricsRoutes.java
new file mode 100644
index 0000000000..3248172ac5
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/CxfSoapMetricsRoutes.java
@@ -0,0 +1,80 @@
+/*
+ * 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.metrics;
+
+import io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.SessionScoped;
+import jakarta.enterprise.inject.Produces;
+import jakarta.inject.Named;
+import org.apache.camel.Message;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.cxf.jaxws.CxfEndpoint;
+import org.apache.camel.quarkus.component.cxf.soap.it.metrics.service.HelloService;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+@ApplicationScoped
+public class CxfSoapMetricsRoutes extends RouteBuilder {
+
+ @ConfigProperty(name = "quarkus.http.test-port")
+ String port;
+
+ @Override
+ public void configure() {
+
+ from("direct:clientMetrics")
+ .to("cxf:bean:clientMetricsEndpoint?dataFormat=POJO");
+
+ from("cxf:bean:metricsServiceEndpoint")
+ .process(e -> {
+ try {
+ /* We have to slow down a bit so that the native test is able to see some elapsedTime */
+ Thread.sleep(20);
+ } catch (InterruptedException ex) {
+ Thread.currentThread().interrupt();
+ }
+ Message message = e.getMessage();
+ message.setBody("Hello " + message.getBody(String.class) + "!", String.class);
+ });
+
+ }
+
+ @Produces
+ @SessionScoped
+ @Named
+ CxfEndpoint clientMetricsEndpoint() {
+ final CxfEndpoint result = new CxfEndpoint();
+ result.setServiceClass(HelloService.class);
+ result.setAddress("http://localhost:" + port + "/soapservice/hello-metrics");
+ result.setWsdlURL("wsdl/MetricsHelloService.wsdl");
+ result.getFeatures().add(new QuarkusCxfMetricsFeature());
+ return result;
+ }
+
+ @Produces
+ @ApplicationScoped
+ @Named
+ CxfEndpoint metricsServiceEndpoint() {
+ final CxfEndpoint result = new CxfEndpoint();
+ result.setServiceClass(HelloService.class);
+ result.setAddress("/hello-metrics");
+ result.setWsdlURL("wsdl/MetricsHelloService.wsdl");
+ result.getFeatures().add(new QuarkusCxfMetricsFeature());
+ return result;
+ }
+
+}
diff --git a/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/MetricsClientResource.java b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/MetricsClientResource.java
new file mode 100644
index 0000000000..f7845c8269
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/MetricsClientResource.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.cxf.soap.it.metrics;
+
+import java.io.IOException;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.apache.camel.ProducerTemplate;
+
+@Path("/cxf-soap/metrics/client")
+public class MetricsClientResource {
+
+ @Inject
+ ProducerTemplate producerTemplate;
+
+ @POST
+ @Path("/hello")
+ @Produces(MediaType.TEXT_PLAIN)
+ public String hello(String body) throws IOException {
+ return producerTemplate.requestBody("direct:clientMetrics", body, String.class);
+ }
+
+}
diff --git a/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/service/HelloService.java b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/service/HelloService.java
new file mode 100644
index 0000000000..a7826139c9
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/service/HelloService.java
@@ -0,0 +1,32 @@
+/*
+ * 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.metrics.service;
+
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebParam;
+import jakarta.jws.WebService;
+
+/**
+ * The simplest Hello service.
+ */
+@WebService(name = "HelloService", serviceName = "HelloService")
+public interface HelloService {
+
+ @WebMethod
+ String hello(@WebParam(name = "text") String text);
+
+}
diff --git a/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/resources/application.properties b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/resources/application.properties
new file mode 100644
index 0000000000..29ce2938e3
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/resources/application.properties
@@ -0,0 +1,21 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+quarkus.cxf.path = /soapservice
+
+quarkus.micrometer.export.json.enabled = true
+quarkus.micrometer.export.json.path = metrics/json
+quarkus.micrometer.export.prometheus.path = metrics/prometheus
diff --git a/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/resources/wsdl/MetricsHelloService.wsdl b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/resources/wsdl/MetricsHelloService.wsdl
new file mode 100644
index 0000000000..c8c557cb61
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/main/resources/wsdl/MetricsHelloService.wsdl
@@ -0,0 +1,75 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://service.metrics.it.soap.cxf.component.quarkus.camel.apache.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="HelloService" targetNamespace="http://service.metrics.it.soap.cxf.component.quarkus.camel.apache.org/">
+ <wsdl:types>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://service.metrics.it.soap.cxf.component.quarkus.camel.apache.org/" elementFormDefault="unqualified" targetNamespace="http://service.metrics.it.soap.cxf.component.quarkus.camel.apache.org/" version="1.0">
+
+ <xs:element name="hello" type="tns:hello"/>
+
+ <xs:element name="helloResponse" type="tns:helloResponse"/>
+
+ <xs:complexType name="hello">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="text" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="helloResponse">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="return" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+</xs:schema>
+ </wsdl:types>
+ <wsdl:message name="hello">
+ <wsdl:part element="tns:hello" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="helloResponse">
+ <wsdl:part element="tns:helloResponse" name="parameters">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:portType name="HelloService">
+ <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:portType>
+ <wsdl:binding name="HelloServiceSoapBinding" type="tns:HelloService">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="hello">
+ <soap:operation soapAction="" style="document"/>
+ <wsdl:input name="hello">
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output name="helloResponse">
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="HelloService">
+ <wsdl:port binding="tns:HelloServiceSoapBinding" name="HelloServicePort">
+ <soap:address location="http://localhost:8080/soap/hello"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
\ No newline at end of file
diff --git a/integration-test-groups/cxf-soap/cxf-soap-metrics/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/MetricsIT.java b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/MetricsIT.java
new file mode 100644
index 0000000000..51af96183c
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/MetricsIT.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.cxf.soap.it.metrics;
+
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class MetricsIT extends MetricsTest {
+
+}
diff --git a/integration-test-groups/cxf-soap/cxf-soap-metrics/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/MetricsTest.java b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/MetricsTest.java
new file mode 100644
index 0000000000..54a6a79588
--- /dev/null
+++ b/integration-test-groups/cxf-soap/cxf-soap-metrics/src/test/java/org/apache/camel/quarkus/component/cxf/soap/it/metrics/MetricsTest.java
@@ -0,0 +1,125 @@
+/*
+ * 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.metrics;
+
+import java.util.Map;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import io.restassured.path.json.JsonPath;
+import org.assertj.core.api.Assertions;
+import org.eclipse.microprofile.config.Config;
+import org.eclipse.microprofile.config.ConfigProvider;
+import org.hamcrest.CoreMatchers;
+import org.junit.jupiter.api.Test;
+
+import static io.restassured.RestAssured.given;
+
+@QuarkusTest
+public class MetricsTest {
+
+ @Test
+ void serverAndClient() {
+ {
+ final Map<String, Object> metrics = getMetrics();
+ /* There should be no cxf metrics available before we call anything */
+ Assertions.assertThat(metrics.get("cxf.server.requests")).isNull();
+ Assertions.assertThat(metrics.get("cxf.client.requests")).isNull();
+ }
+
+ /* First send a direct request to the service circumventing the in-app client */
+ final String SOAP_REQUEST = "<x:Envelope xmlns:x=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:cxf=\"http://service.metrics.it.soap.cxf.component.quarkus.camel.apache.org/\">\n"
+ +
+ " <x:Header/>\n" +
+ " <x:Body>\n" +
+ " <cxf:hello>\n" +
+ " <text>foo</text>\n" +
+ " </cxf:hello>\n" +
+ " </x:Body>\n" +
+ "</x:Envelope>";
+ given()
+ .header("Content-Type", "text/xml")
+ .body(SOAP_REQUEST)
+ .when()
+ .post("/soapservice/hello-metrics")
+ .then()
+ .statusCode(200)
+ .body(CoreMatchers.containsString("Hello foo"));
+
+ {
+ final Map<String, Object> metrics = getMetrics();
+ @SuppressWarnings("unchecked")
+ Map<String, Object> serverRequests = (Map<String, Object>) metrics.get("cxf.server.requests");
+ Assertions.assertThat(serverRequests).isNotNull();
+ Assertions.assertThat(serverRequests.get(
+ "count;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soapservice/hello-metrics"))
+ .isEqualTo(1);
+ Assertions.assertThat((Float) serverRequests.get(
+ "elapsedTime;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soapservice/hello-metrics"))
+ .isGreaterThan(0.0F);
+ }
+
+ final Config config = ConfigProvider.getConfig();
+ final int port = config.getValue("quarkus.http.test-port", Integer.class);
+
+ /* Now send a request using the in-app client */
+ given()
+ .body("Joe")
+ .when()
+ .post("/cxf-soap/metrics/client/hello")
+ .then()
+ .statusCode(200)
+ .body(CoreMatchers.containsString("Hello Joe"));
+ {
+ final Map<String, Object> metrics = getMetrics();
+ @SuppressWarnings("unchecked")
+ Map<String, Object> serverRequests = (Map<String, Object>) metrics.get("cxf.server.requests");
+ Assertions.assertThat(serverRequests).isNotNull();
+ Assertions.assertThat(serverRequests.get(
+ "count;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soapservice/hello-metrics"))
+ .isEqualTo(2);
+ Assertions.assertThat((Float) serverRequests.get(
+ "elapsedTime;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soapservice/hello-metrics"))
+ .isGreaterThan(0.0F);
+
+ Map<String, Object> clientRequests = (Map<String, Object>) metrics.get("cxf.client.requests");
+ Assertions.assertThat(clientRequests).isNotNull();
+ Assertions.assertThat(clientRequests.get(
+ "count;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=http://localhost:"
+ + port + "/soapservice/hello-metrics"))
+ .isEqualTo(1);
+ Assertions.assertThat((Float) clientRequests.get(
+ "elapsedTime;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=http://localhost:"
+ + port + "/soapservice/hello-metrics"))
+ .isGreaterThan(0.0F);
+
+ }
+
+ }
+
+ private Map<String, Object> getMetrics() {
+ final String body = RestAssured.given()
+ .header("Content-Type", "application/json")
+ .get("/q/metrics/json")
+ .then()
+ .statusCode(200)
+ .extract().body().asString();
+ final JsonPath jp = new JsonPath(body);
+ return jp.getJsonObject("$");
+ }
+
+}
diff --git a/integration-test-groups/cxf-soap/pom.xml b/integration-test-groups/cxf-soap/pom.xml
index accdcdc897..d0572d2fb7 100644
--- a/integration-test-groups/cxf-soap/pom.xml
+++ b/integration-test-groups/cxf-soap/pom.xml
@@ -39,6 +39,7 @@
<!-- extensions a..z; do not remove this comment, it is important when sorting via mvn process-resources -Pformat -->
<module>cxf-soap-client</module>
<module>cxf-soap-converter</module>
+ <module>cxf-soap-metrics</module>
<module>cxf-soap-mtom</module>
<module>cxf-soap-mtom-awt</module>
<module>cxf-soap-rest</module>
diff --git a/integration-tests/cxf-soap-grouped/pom.xml b/integration-tests/cxf-soap-grouped/pom.xml
index 1c9f13107d..b39cd06fd4 100644
--- a/integration-tests/cxf-soap-grouped/pom.xml
+++ b/integration-tests/cxf-soap-grouped/pom.xml
@@ -60,6 +60,14 @@
<groupId>io.quarkiverse.cxf</groupId>
<artifactId>quarkus-cxf-xjc-plugins</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.quarkiverse.cxf</groupId>
+ <artifactId>quarkus-cxf-rt-features-metrics</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>