Rafal created CXF-9206:
--------------------------

             Summary: Duplicated value of 'cxf.server.requests' metric for JAX 
RS Server
                 Key: CXF-9206
                 URL: https://issues.apache.org/jira/browse/CXF-9206
             Project: CXF
          Issue Type: Bug
    Affects Versions: 4.2.0
            Reporter: Rafal
         Attachments: image-2026-03-16-14-21-21-480.png

After upgrading from CXF 4.1.3 with Spring Boot 3 to CXF 4.2.0 with Spring Boot 
4, my test on CXF metrics detected that metric 'cxf.server.requests' in 
Micrometer for JAX RS Server has duplicated value.

I am creating server with below method:
{code:java}
@Bean
Server rsServer(Bus bus, MetricsProvider metricsProvider) {
    JAXRSServerFactoryBean jaxrsServerFactoryBean = new 
JAXRSServerFactoryBean();
    jaxrsServerFactoryBean.setBus(bus);
    jaxrsServerFactoryBean.setServiceClass(HelloServiceRSImpl.class);
    jaxrsServerFactoryBean.setServiceBeans(Arrays.asList(new 
HelloServiceRSImpl()));
    jaxrsServerFactoryBean.setAddress("/");
    jaxrsServerFactoryBean.setFeatures(Arrays.asList(new 
MetricsFeature(metricsProvider)));
    return jaxrsServerFactoryBean.create();
}{code}
I am sending request to it with:
{code:java}
HelloServiceRsApi helloClientRsApi(String clientHost, int clientPort) {
    JAXRSClientFactoryBean jaxRsFactory = new JAXRSClientFactoryBean();
    jaxRsFactory.setServiceClass(HelloServiceRsApi.class);
    jaxRsFactory.setHeaders(Collections.singletonMap("accept", 
"application/json"));
    jaxRsFactory.setAddress("http://"; + clientHost + ":" + clientPort + 
"/services/helloservice");
    jaxRsFactory.setFeatures(Arrays.asList(new 
MetricsFeature(metricsProvider)));
    return (HelloServiceRsApi) jaxRsFactory.create();
}

String response = helloClientRsApi(host, port).sayHello(name); {code}
 

Looks like the duplicated value is causes by the fact, that for each request 
both 
MicrometerMetricsProvider.createEndpointContext and 
MicrometerMetricsProvider.createResourceContext are invoked, each of them 
creating 1 
MetricsContext. 
 
Each MetricsContext is later iterated on in ExchangeMetrics and is incrementing 
cxf.server.requests metric once, together causing increase by 2.
!image-2026-03-16-14-21-21-480.png!
Probably that commit caused this behavior: 
[https://github.com/apache/cxf/commit/de39a250d855ecb16211a26e4ab4ecd6e84722bf#diff-306b2aab603fd7c61099a626fde8707930f31e22cc6c5e492ee021e685730768]

 

The problem does *not* occur for Jax WS Server:
{code:java}
@Bean
Server wsServer(Bus bus, MetricsProvider metricsProvider) {
    JaxWsServerFactoryBean jaxWsServerFactoryBean = new 
JaxWsServerFactoryBean();
    jaxWsServerFactoryBean.setBus(bus);
    jaxWsServerFactoryBean.setServiceClass(HelloServiceWSImpl.class);
    jaxWsServerFactoryBean.setAddress("/Hello");
    jaxWsServerFactoryBean.setServiceBean(new HelloServiceWSImpl());
    jaxWsServerFactoryBean.setFeatures(Arrays.asList(new 
MetricsFeature(metricsProvider)));
    return jaxWsServerFactoryBean.create();
}{code}
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to