You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by wu...@apache.org on 2018/06/06 07:41:48 UTC

[incubator-skywalking] branch master updated: Spring mvc plugin auto add '/' if necessary (#1315)

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

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 2c82236  Spring mvc plugin auto add '/' if necessary (#1315)
2c82236 is described below

commit 2c822363cb8ea469c04760117bc953ec4b6e5a16
Author: SevenPointOld <li...@163.com>
AuthorDate: Wed Jun 6 15:41:30 2018 +0800

    Spring mvc plugin auto add '/' if necessary (#1315)
    
    * spring mvc plugin auto add '/' if necessary
---
 .../v4/ControllerConstructorInterceptorTest.java   |  6 ++---
 .../plugin/spring/mvc/v4/PathMappingCacheTest.java | 26 +++++++++++++++++++++-
 .../spring/mvc/commons/PathMappingCache.java       | 12 ++++++++++
 3 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java
index 4e22e0d..a9e429b 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java
@@ -54,7 +54,7 @@ public class ControllerConstructorInterceptorTest {
         Method m = obj.getClass().getMethods()[0];
         cache.addPathMapping(m, "#toString");
 
-        Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/test1#toString");
+        Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/test1/#toString");
     }
 
     @Test
@@ -67,7 +67,7 @@ public class ControllerConstructorInterceptorTest {
         Method m = obj.getClass().getMethods()[0];
         cache.addPathMapping(m, "#toString");
 
-        Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "#toString");
+        Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/#toString");
     }
 
     @Test
@@ -80,7 +80,7 @@ public class ControllerConstructorInterceptorTest {
         Method m = obj.getClass().getMethods()[0];
         cache.addPathMapping(m, "#toString");
 
-        Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/test3#toString");
+        Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/test3/#toString");
     }
 
     @RequestMapping(value = "/test1")
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java
index c98693d..776d458 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java
@@ -45,7 +45,31 @@ public class PathMappingCacheTest {
         Method m = obj.getClass().getMethods()[0];
         pathMappingCache.addPathMapping(m, "#toString");
 
-        Assert.assertEquals("the two value should be equal", pathMappingCache.findPathMapping(m), "org.apache.skywalking.apm.plugin.spring.mvc#toString");
+        Assert.assertEquals("the two value should be equal", pathMappingCache.findPathMapping(m), "/org.apache.skywalking.apm.plugin.spring.mvc/#toString");
 
     }
+
+    @Test
+    public void testAutoAddPathSeparator() {
+        String rightPath = "/root/sub";
+
+        Object obj = new Object();
+        Method m = obj.getClass().getMethods()[0];
+
+        PathMappingCache cache = new PathMappingCache("root");
+        cache.addPathMapping(m, "sub");
+        Assert.assertEquals(cache.findPathMapping(m), rightPath);
+
+        PathMappingCache cache2 = new PathMappingCache("/root");
+        cache2.addPathMapping(m, "/sub");
+        Assert.assertEquals(cache2.findPathMapping(m), rightPath);
+
+        PathMappingCache cache3 = new PathMappingCache("root");
+        cache3.addPathMapping(m, "/sub");
+        Assert.assertEquals(cache3.findPathMapping(m), rightPath);
+
+        PathMappingCache cache4 = new PathMappingCache("/root");
+        cache4.addPathMapping(m, "sub");
+        Assert.assertEquals(cache4.findPathMapping(m), rightPath);
+    }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/PathMappingCache.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/PathMappingCache.java
index a89c131..494b800 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/PathMappingCache.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/commons/PathMappingCache.java
@@ -19,6 +19,8 @@
 
 package org.apache.skywalking.apm.plugin.spring.mvc.commons;
 
+import org.apache.skywalking.apm.util.StringUtil;
+
 import java.lang.reflect.Method;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -28,11 +30,17 @@ import java.util.concurrent.ConcurrentHashMap;
  * @author zhangxin
  */
 public class PathMappingCache {
+
+    private static final String PATH_SEPARATOR = "/";
+
     private String classPath = "";
 
     private ConcurrentHashMap<Method, String> methodPathMapping = new ConcurrentHashMap<Method, String>();
 
     public PathMappingCache(String classPath) {
+        if (!StringUtil.isEmpty(classPath) && !classPath.startsWith(PATH_SEPARATOR)) {
+            classPath = PATH_SEPARATOR + classPath;
+        }
         this.classPath = classPath;
     }
 
@@ -41,6 +49,10 @@ public class PathMappingCache {
     }
 
     public void addPathMapping(Method method, String methodPath) {
+        if (!StringUtil.isEmpty(methodPath) && !methodPath.startsWith(PATH_SEPARATOR)
+                && !classPath.endsWith(PATH_SEPARATOR)) {
+            methodPath = PATH_SEPARATOR + methodPath;
+        }
         methodPathMapping.put(method, classPath + methodPath);
     }
 }

-- 
To stop receiving notification emails like this one, please contact
wusheng@apache.org.