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))); + } + }