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));
 
         }
     }

Reply via email to