This is an automated email from the ASF dual-hosted git repository.
ffang pushed a commit to branch 3.6.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/3.6.x-fixes by this push:
new d865010e8b [CXF-9177] make MetricsProvider to accommodate customized
MetricsProv… (#2756)
d865010e8b is described below
commit d865010e8b22794b755ac392bd3430bdfcb78214
Author: Freeman(Yue) Fang <[email protected]>
AuthorDate: Fri Nov 28 09:52:23 2025 -0500
[CXF-9177] make MetricsProvider to accommodate customized MetricsProv…
(#2756)
* [CXF-9177] make MetricsProvider to accommodate customized MetricsProvider
implementation
* Update
systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/MicrometerMetricsHttpProvider.java
Co-authored-by: Andriy Redko <[email protected]>
---------
Co-authored-by: Andriy Redko <[email protected]>
(cherry picked from commit 5f3e9476b9a248556896452fb2c66d459b4d5a08)
(cherry picked from commit c9ef2575f3253b20f49c5a7c696a74687318a01c)
(cherry picked from commit 669a0e30e793667425acd09396174085e64a7055)
---
.../interceptors/AbstractMetricsInterceptor.java | 6 ++-
...tomizedMicrometerProviderClientServerTest.java} | 62 +++++++++++++++++-----
.../jaxws/MicrometerMetricsHttpProvider.java | 10 +++-
...ionWithoutViolationMetricsClientServerTest.java | 3 +-
4 files changed, 63 insertions(+), 18 deletions(-)
diff --git
a/rt/features/metrics/src/main/java/org/apache/cxf/metrics/interceptors/AbstractMetricsInterceptor.java
b/rt/features/metrics/src/main/java/org/apache/cxf/metrics/interceptors/AbstractMetricsInterceptor.java
index e4ff43934e..5e3cd95cb1 100644
---
a/rt/features/metrics/src/main/java/org/apache/cxf/metrics/interceptors/AbstractMetricsInterceptor.java
+++
b/rt/features/metrics/src/main/java/org/apache/cxf/metrics/interceptors/AbstractMetricsInterceptor.java
@@ -188,10 +188,12 @@ public abstract class AbstractMetricsInterceptor extends
AbstractPhaseIntercepto
if (isRequestor(message)) {
o = boi.getProperty(MetricsContext.class.getName());
} else {
- //on the client side the MetricsContext may already be created
+ //on the server side the MetricsContext may already be created
//at endpoint level; avoid recreating another one
o =
message.getExchange().getEndpoint().get(MetricsContext.class.getName());
- if (o == null) {
+ if (o == null || (o instanceof List && ((List)o).isEmpty())) {
+ // if no MetricsContext retrieved from message exchange
created before for endpoint
+ // use the one from operation
o = boi.getProperty(MetricsContext.class.getName());
} else {
boi.setProperty(MetricsContext.class.getName(), o);
diff --git
a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationWithoutViolationMetricsClientServerTest.java
b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/CustomizedMicrometerProviderClientServerTest.java
similarity index 76%
copy from
systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationWithoutViolationMetricsClientServerTest.java
copy to
systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/CustomizedMicrometerProviderClientServerTest.java
index 923be27e66..a909f7ae6d 100644
---
a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationWithoutViolationMetricsClientServerTest.java
+++
b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/CustomizedMicrometerProviderClientServerTest.java
@@ -23,19 +23,17 @@ import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.ws.Endpoint;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
+import jakarta.xml.ws.Endpoint;
import org.apache.cxf.ext.logging.LoggingInInterceptor;
import org.apache.cxf.ext.logging.LoggingOutInterceptor;
import org.apache.cxf.jaxws.EndpointImpl;
@@ -44,8 +42,9 @@ import org.apache.cxf.jaxws.schemavalidation.RequestHeader;
import org.apache.cxf.jaxws.schemavalidation.RequestIdType;
import org.apache.cxf.jaxws.schemavalidation.Service;
import org.apache.cxf.jaxws.schemavalidation.ServicePortType;
-import org.apache.cxf.message.Message;
+import org.apache.cxf.metrics.MetricsContext;
import org.apache.cxf.metrics.MetricsFeature;
+import org.apache.cxf.metrics.MetricsProvider;
import org.apache.cxf.metrics.micrometer.MicrometerMetricsProperties;
import org.apache.cxf.metrics.micrometer.MicrometerMetricsProvider;
import
org.apache.cxf.metrics.micrometer.provider.DefaultExceptionClassProvider;
@@ -56,6 +55,7 @@ import
org.apache.cxf.metrics.micrometer.provider.jaxws.JaxwsFaultCodeProvider;
import
org.apache.cxf.metrics.micrometer.provider.jaxws.JaxwsFaultCodeTagsCustomizer;
import
org.apache.cxf.metrics.micrometer.provider.jaxws.JaxwsOperationTagsCustomizer;
import org.apache.cxf.metrics.micrometer.provider.jaxws.JaxwsTags;
+import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
@@ -70,7 +70,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-public class SchemaValidationWithoutViolationMetricsClientServerTest extends
AbstractBusClientServerTestBase {
+public class CustomizedMicrometerProviderClientServerTest extends
AbstractBusClientServerTestBase {
public static final MeterRegistry METER_REGISTER = new
SimpleMeterRegistry();
@@ -88,21 +88,19 @@ public class
SchemaValidationWithoutViolationMetricsClientServerTest extends Abs
var tagsProvider = new StandardTagsProvider(new
DefaultExceptionClassProvider(), standardTags);
var properties = new MicrometerMetricsProperties();
- var provider = new MicrometerMetricsProvider(
+ var provider = new NullEndpointMicrometerProvider(new
MicrometerMetricsProvider(
METER_REGISTER,
tagsProvider,
List.of(operationsCustomizer, faultsCustomizer),
new DefaultTimedAnnotationProvider(),
properties
- );
+ ));
String address;
Object implementor = new ServicePortTypeImpl();
address = "http://localhost:" + PORT + "/schemavalidation";
Endpoint ep = Endpoint.create(implementor);
- Map<String, Object> map = new HashMap<>();
- map.put(Message.SCHEMA_VALIDATION_ENABLED, Boolean.TRUE);
- ep.setProperties(map);
+
((EndpointImpl)ep).setWsdlLocation("wsdl_systest_jaxws/schemaValidation.wsdl");
((EndpointImpl)ep).setServiceName(new QName(
"http://cxf.apache.org/jaxws/schemavalidation",
"service"));
@@ -110,7 +108,8 @@ public class
SchemaValidationWithoutViolationMetricsClientServerTest extends Abs
((EndpointImpl)ep).getOutInterceptors().add(new
LoggingOutInterceptor());
((EndpointImpl)ep).setFeatures(Arrays.asList(new
MetricsFeature(provider)));
ep.publish(address);
- Endpoint.publish("http://localhost:" + PORT + "/metrics", new
MicrometerMetricsHttpProvider());
+ Endpoint.publish("http://localhost:" + PORT + "/metrics",
+ new
MicrometerMetricsHttpProvider(METER_REGISTER));
}
}
@@ -122,15 +121,15 @@ public class
SchemaValidationWithoutViolationMetricsClientServerTest extends Abs
}
@Test
- public void testSchemavalildationWithMetrics() throws Exception {
- testSchemaValidationWithoutViolation();
+ public void testCustomizedMetricsProvider() throws Exception {
+ sendRequest();
testCxfServerRequestsCount();
}
- private void testSchemaValidationWithoutViolation() throws Exception {
+ private void sendRequest() throws Exception {
Service service = new Service();
assertNotNull(service);
@@ -184,4 +183,39 @@ public class
SchemaValidationWithoutViolationMetricsClientServerTest extends Abs
assertTrue(found);
}
}
+
+ //A customized MetricProvider which mimics the way that
+ //always return null MetricContext from Endpoint
+ static class NullEndpointMicrometerProvider implements MetricsProvider {
+ private final MetricsProvider delegate;
+
+ NullEndpointMicrometerProvider(MetricsProvider delegate) {
+ this.delegate = delegate;
+ }
+
+
+
+ @Override
+ public MetricsContext
createEndpointContext(org.apache.cxf.endpoint.Endpoint endpoint,
+ boolean asClient,
+ String clientId) {
+ return null;
+ }
+
+ @Override
+ public MetricsContext
createOperationContext(org.apache.cxf.endpoint.Endpoint endpoint,
+ BindingOperationInfo boi,
+ boolean asClient,
+ String clientId) {
+ return delegate.createOperationContext(endpoint, boi, asClient,
clientId);
+ }
+
+ @Override
+ public MetricsContext
createResourceContext(org.apache.cxf.endpoint.Endpoint endpoint,
+ String resourceName,
+ boolean asClient,
+ String clientId) {
+ return delegate.createResourceContext(endpoint, resourceName,
asClient, clientId);
+ }
+ }
}
\ No newline at end of file
diff --git
a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/MicrometerMetricsHttpProvider.java
b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/MicrometerMetricsHttpProvider.java
index e5fec8b92e..faf40d223a 100644
---
a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/MicrometerMetricsHttpProvider.java
+++
b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/MicrometerMetricsHttpProvider.java
@@ -39,9 +39,11 @@ import io.micrometer.core.instrument.FunctionTimer;
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.LongTaskTimer;
import io.micrometer.core.instrument.Meter;
+import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.TimeGauge;
import io.micrometer.core.instrument.Timer;
+
@WebServiceProvider(serviceName = "MetricsService", portName = "MetricsPort",
targetNamespace = "urn:metrics")
@ServiceMode(Service.Mode.MESSAGE)
@BindingType(javax.xml.ws.http.HTTPBinding.HTTP_BINDING)
@@ -49,6 +51,12 @@ public class MicrometerMetricsHttpProvider implements
Provider<Source> {
@Resource
private WebServiceContext wsContext;
+
+ private final MeterRegistry meterRegistry;
+
+ public MicrometerMetricsHttpProvider(MeterRegistry meterRegistry) {
+ this.meterRegistry = meterRegistry;
+ }
@Override
@@ -63,7 +71,7 @@ public class MicrometerMetricsHttpProvider implements
Provider<Source> {
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
sb.append("<metrics>\n");
- for (Meter meter :
SchemaValidationWithoutViolationMetricsClientServerTest.METER_REGISTER.getMeters())
{
+ for (Meter meter : this.meterRegistry.getMeters()) {
final Meter.Id id = meter.getId();
final String name = id.getName();
diff --git
a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationWithoutViolationMetricsClientServerTest.java
b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationWithoutViolationMetricsClientServerTest.java
index 923be27e66..36af1b7d3e 100644
---
a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationWithoutViolationMetricsClientServerTest.java
+++
b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationWithoutViolationMetricsClientServerTest.java
@@ -110,7 +110,8 @@ public class
SchemaValidationWithoutViolationMetricsClientServerTest extends Abs
((EndpointImpl)ep).getOutInterceptors().add(new
LoggingOutInterceptor());
((EndpointImpl)ep).setFeatures(Arrays.asList(new
MetricsFeature(provider)));
ep.publish(address);
- Endpoint.publish("http://localhost:" + PORT + "/metrics", new
MicrometerMetricsHttpProvider());
+ Endpoint.publish("http://localhost:" + PORT + "/metrics",
+ new
MicrometerMetricsHttpProvider(METER_REGISTER));
}
}