This is an automated email from the ASF dual-hosted git repository.

dkulp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit cab4513374a14fd3549bd0cf86ef9b4996637546
Author: Daniel Kulp <d...@kulp.com>
AuthorDate: Wed Jun 22 12:33:08 2022 -0400

    Set the Spring HandlerMapping.bestMatchingPattern on the httprequest.  This 
allows spring metrics to display the uri instead of "UNKNOWN"
---
 .../java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java | 8 +++++++-
 .../jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java | 7 +++++++
 .../apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java | 2 ++
 .../cxf/transport/http/netty/server/NettyHttpDestinationTest.java | 2 ++
 .../cxf/transport/http_undertow/UndertowHTTPDestinationTest.java  | 2 ++
 .../org/apache/cxf/transport/http/AbstractHTTPDestination.java    | 5 +++++
 6 files changed, 25 insertions(+), 1 deletion(-)

diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
index 436c0d2ef5..7fdba7683f 100644
--- 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
+++ 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
@@ -238,7 +238,13 @@ public class JAXRSInInterceptor extends 
AbstractPhaseInterceptor<Message> {
         exchange.put(JAXRSUtils.ROOT_RESOURCE_CLASS, cri);
         message.put(RESOURCE_METHOD, ori.getMethodToInvoke());
         message.put(URITemplate.TEMPLATE_PARAMETERS, values);
-        message.put(URITemplate.URI_TEMPLATE, 
JAXRSUtils.getUriTemplate(message, cri, ori));
+        
+        
+        String uriTemplate = JAXRSUtils.getUriTemplate(message, cri, ori);
+        message.put(URITemplate.URI_TEMPLATE, uriTemplate);
+        if (HttpUtils.isHttpRequest(message)) {
+            HttpUtils.setHttpRequestURI(message, uriTemplate);
+        }
 
         String plainOperationName = ori.getMethodToInvoke().getName();
         if (numberOfResources > 1) {
diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
index 7b8886afbc..e08e0b94e8 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
@@ -372,6 +372,13 @@ public final class HttpUtils {
             
(HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST));
         return URI.create(base + relativePath);
     }
+    
+    public static void setHttpRequestURI(Message message, String uriTemplate) {
+        HttpServletRequest request =
+            
(HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
+        
request.setAttribute("org.springframework.web.servlet.HandlerMapping.bestMatchingPattern",
 uriTemplate);
+    }
+
 
     public static URI toAbsoluteUri(URI u, Message message) {
         HttpServletRequest request =
diff --git 
a/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
index 5da00e792a..4f98c54eef 100644
--- 
a/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
+++ 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
@@ -667,6 +667,8 @@ public class JettyHTTPDestinationTest {
                 EasyMock.expect(request.getRequestURI()).andReturn("/foo");
                 EasyMock.expect(request.getRequestURL())
                     .andReturn(new 
StringBuffer("http://localhost/foo";)).anyTimes();
+                
request.setAttribute("org.springframework.web.servlet.HandlerMapping.bestMatchingPattern",
 "/foo");
+                EasyMock.expectLastCall();
                 
EasyMock.expect(request.getCharacterEncoding()).andReturn(StandardCharsets.UTF_8.name());
                 EasyMock.expect(request.getQueryString()).andReturn(query);
                 EasyMock.expect(request.getHeader("Accept")).andReturn("*/*");
diff --git 
a/rt/transports/http-netty/netty-server/src/test/java/org/apache/cxf/transport/http/netty/server/NettyHttpDestinationTest.java
 
b/rt/transports/http-netty/netty-server/src/test/java/org/apache/cxf/transport/http/netty/server/NettyHttpDestinationTest.java
index c0ee1479f1..89840ed30a 100644
--- 
a/rt/transports/http-netty/netty-server/src/test/java/org/apache/cxf/transport/http/netty/server/NettyHttpDestinationTest.java
+++ 
b/rt/transports/http-netty/netty-server/src/test/java/org/apache/cxf/transport/http/netty/server/NettyHttpDestinationTest.java
@@ -663,6 +663,8 @@ public class NettyHttpDestinationTest {
                 EasyMock.expect(request.getRequestURI()).andReturn("/foo");
                 EasyMock.expect(request.getRequestURL())
                     .andReturn(new 
StringBuffer("http://localhost/foo";)).anyTimes();
+                
request.setAttribute("org.springframework.web.servlet.HandlerMapping.bestMatchingPattern",
 "/foo");
+                EasyMock.expectLastCall();
                 
EasyMock.expect(request.getCharacterEncoding()).andReturn(StandardCharsets.UTF_8.name());
                 
EasyMock.expect(request.getQueryString()).andReturn(query).times(2);
                 EasyMock.expect(request.getHeader("Accept")).andReturn("*/*");
diff --git 
a/rt/transports/http-undertow/src/test/java/org/apache/cxf/transport/http_undertow/UndertowHTTPDestinationTest.java
 
b/rt/transports/http-undertow/src/test/java/org/apache/cxf/transport/http_undertow/UndertowHTTPDestinationTest.java
index fb755d7447..82011fa743 100644
--- 
a/rt/transports/http-undertow/src/test/java/org/apache/cxf/transport/http_undertow/UndertowHTTPDestinationTest.java
+++ 
b/rt/transports/http-undertow/src/test/java/org/apache/cxf/transport/http_undertow/UndertowHTTPDestinationTest.java
@@ -666,6 +666,8 @@ public class UndertowHTTPDestinationTest {
                 EasyMock.expect(request.getRequestURI()).andReturn("/foo");
                 EasyMock.expect(request.getRequestURL())
                     .andReturn(new 
StringBuffer("http://localhost/foo";)).anyTimes();
+                
request.setAttribute("org.springframework.web.servlet.HandlerMapping.bestMatchingPattern",
 "/foo");
+                EasyMock.expectLastCall();
                 
EasyMock.expect(request.getCharacterEncoding()).andReturn(StandardCharsets.UTF_8.name());
                 EasyMock.expect(request.getQueryString()).andReturn(query);
                 EasyMock.expect(request.getHeader("Accept")).andReturn("*/*");
diff --git 
a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
 
b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
index 0f946eefc2..e51e6c4616 100644
--- 
a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
+++ 
b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
@@ -337,6 +337,11 @@ public abstract class AbstractHTTPDestination
         inMessage.put(Message.HTTP_REQUEST_METHOD, req.getMethod());
         String requestURI = req.getRequestURI();
         inMessage.put(Message.REQUEST_URI, requestURI);
+        try {
+            
req.setAttribute("org.springframework.web.servlet.HandlerMapping.bestMatchingPattern",
 requestURI);
+        } catch (RuntimeException rex) {
+            //ignore, not using Spring so the property is irrelevant
+        }
         String requestURL = req.getRequestURL().toString();
         inMessage.put(Message.REQUEST_URL, requestURL);
         String contextPath = req.getContextPath();

Reply via email to