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

coheigea pushed a commit to branch 3.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit ce7351dbaa84d3fae1d3012369f2de0336a25505
Author: Shon Vella <sve...@idauto.net>
AuthorDate: Mon Jun 25 09:07:10 2018 -0600

    CXF-7765 - URITemplate.compareTemplates returns inconsistent results
    
    (cherry picked from commit df53c20bfa19c4006ab0868d328970bc6d1d13c5)
    
    # Conflicts:
    #   
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
---
 .../org/apache/cxf/jaxrs/model/URITemplate.java    | 34 ++++++++++------------
 .../apache/cxf/jaxrs/model/URITemplateTest.java    | 13 +++++++++
 2 files changed, 28 insertions(+), 19 deletions(-)

diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
index 7803b94..8e37ee1 100644
--- 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
+++ 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
@@ -377,29 +377,25 @@ public final class URITemplate {
     }
     
     public static int compareTemplates(URITemplate t1, URITemplate t2) {
-        String l1 = t1.getLiteralChars();
-        String l2 = t2.getLiteralChars();
-        if (!l1.equals(l2)) {
-            // descending order
-            return l1.length() < l2.length() ? 1 : -1;
-        }
-
-        int g1 = t1.getVariables().size();
-        int g2 = t2.getVariables().size();
+        int l1 = t1.getLiteralChars().length();
+        int l2 = t2.getLiteralChars().length();
         // descending order
-        int result = g1 < g2 ? 1 : g1 > g2 ? -1 : 0;
+        int result = l1 < l2 ? 1 : l1 > l2 ? -1 : 0;
         if (result == 0) {
-            int gCustom1 = t1.getCustomVariables().size();
-            int gCustom2 = t2.getCustomVariables().size();
-            if (gCustom1 != gCustom2) {
-                // descending order
-                return gCustom1 < gCustom2 ? 1 : -1;
+            int g1 = t1.getVariables().size();
+            int g2 = t2.getVariables().size();
+            // descending order
+            result = g1 < g2 ? 1 : g1 > g2 ? -1 : 0;
+            if (result == 0) {
+                int gCustom1 = t1.getCustomVariables().size();
+                int gCustom2 = t2.getCustomVariables().size();
+                result = gCustom1 < gCustom2 ? 1 : gCustom1 > gCustom2 ? -1 : 
0;
+                if (result == 0) {
+                    result = 
t1.getPatternValue().compareTo(t2.getPatternValue());
+                }
             }
         }
-        if (result == 0) {
-            result = t1.getPatternValue().compareTo(t2.getPatternValue());
-        }
-            
+
         return result;
     }
 
diff --git 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
index acfd7da..53f5c1c 100644
--- 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
+++ 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
@@ -740,4 +740,17 @@ public class URITemplateTest extends Assert {
         //System.out.println(ut.encodeLiteralCharacters());
         assertEquals("a%20{digit:[0-9]}%20b", 
ut.encodeLiteralCharacters(false));
     }
+
+    @Test
+    public void testCompareNumberOfLiteralCharacters() {
+        URITemplate t1 = new URITemplate("/foo");
+        URITemplate t2 = new URITemplate("/bar");
+        URITemplate t3 = new URITemplate("/foo/bar");
+        assertEquals(0, URITemplate.compareTemplates(t1, t1));
+        assertTrue(URITemplate.compareTemplates(t1, t3) > 0);
+        assertTrue(URITemplate.compareTemplates(t3, t1) < 0);
+        assertEquals(Integer.signum(URITemplate.compareTemplates(t1, t2)),
+                -Integer.signum(URITemplate.compareTemplates(t2, t1)));
+    }
+
 }

Reply via email to