You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2022/06/22 18:01:38 UTC
[cxf] 02/04: Set the Spring HandlerMapping.bestMatchingPattern on the httprequest. This allows spring metrics to display the uri instead of "UNKNOWN"
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 <da...@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();