Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Wilkins2015-12-15 22:18:01 +0000
committerGreg Wilkins2015-12-15 22:18:01 +0000
commit50899ab21205ee403f396cbe67b99bd1fd1238b2 (patch)
tree322b3fd38ebef10a1d814ab7dfca7aeb847298f8
parentca6eaafdbf6bbbebd756846569d0f04688e6ef28 (diff)
parente8b3b68e90155e25f0fe7a989e803a93caeafd12 (diff)
downloadorg.eclipse.jetty.project-50899ab21205ee403f396cbe67b99bd1fd1238b2.tar.gz
org.eclipse.jetty.project-50899ab21205ee403f396cbe67b99bd1fd1238b2.tar.xz
org.eclipse.jetty.project-50899ab21205ee403f396cbe67b99bd1fd1238b2.zip
Merge branch 'master' of git://github.com/mcgilman/jetty.project
-rw-r--r--jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java18
-rw-r--r--jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletHolderTest.java55
2 files changed, 71 insertions, 2 deletions
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java
index b9519021a0..36ab05fa6d 100644
--- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java
+++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java
@@ -207,15 +207,29 @@ public class ServletHolder extends Holder<Servlet> implements UserIdentity.Scope
{
if (sh==this)
return 0;
+
if (sh._initOrder<_initOrder)
return 1;
+
if (sh._initOrder>_initOrder)
return -1;
- int c=(_className!=null && sh._className!=null)?_className.compareTo(sh._className):0;
+ // consider _className, need to position properly when one is configured but not the other
+ int c;
+ if (_className==null && sh._className==null)
+ c=0;
+ else if (_className==null)
+ c=-1;
+ else if (sh._className==null)
+ c=1;
+ else
+ c=_className.compareTo(sh._className);
+
+ // if _initOrder and _className are the same, consider the _name
if (c==0)
c=_name.compareTo(sh._name);
- return c;
+
+ return c;
}
/* ------------------------------------------------------------ */
diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletHolderTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletHolderTest.java
new file mode 100644
index 0000000000..7ec8c17277
--- /dev/null
+++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletHolderTest.java
@@ -0,0 +1,55 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+package org.eclipse.jetty.servlet;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+public class ServletHolderTest {
+
+ @Test
+ public void testTransitiveCompareTo() throws Exception
+ {
+ // example of jsp-file referenced in web.xml
+ final ServletHolder one = new ServletHolder();
+ one.setInitOrder(-1);
+ one.setName("Login");
+ one.setClassName(null);
+
+ // example of pre-compiled jsp
+ final ServletHolder two = new ServletHolder();
+ two.setInitOrder(-1);
+ two.setName("org.my.package.jsp.WEB_002dINF.pages.precompiled_002dpage_jsp");
+ two.setClassName("org.my.package.jsp.WEB_002dINF.pages.precompiled_002dpage_jsp");
+
+ // example of servlet referenced in web.xml
+ final ServletHolder three = new ServletHolder();
+ three.setInitOrder(-1);
+ three.setName("Download");
+ three.setClassName("org.my.package.web.DownloadServlet");
+
+ // verify compareTo transitivity
+ Assert.assertTrue(one.compareTo(two) < 0);
+ Assert.assertTrue(two.compareTo(three) < 0);
+ Assert.assertTrue(one.compareTo(three) < 0);
+ }
+}

Back to the top