This is an automated email from the ASF dual-hosted git repository. dkulp pushed a commit to branch 3.6.x-fixes in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 89e21ca00e370618d9551317075687b2cb24426b 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 3c9c5d8e3c..8725280737 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 @@ -239,7 +239,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 6230b887e6..355adac76a 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 @@ -373,6 +373,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 f2262a2e5b..5d42849d5c 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 7aae458db1..7435599f44 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 77d670c091..eed1d9da40 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 4bee0d38d4..29f93b81fc 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();