diff options
author | Greg Wilkins | 2015-12-15 22:18:01 +0000 |
---|---|---|
committer | Greg Wilkins | 2015-12-15 22:18:01 +0000 |
commit | 50899ab21205ee403f396cbe67b99bd1fd1238b2 (patch) | |
tree | 322b3fd38ebef10a1d814ab7dfca7aeb847298f8 | |
parent | ca6eaafdbf6bbbebd756846569d0f04688e6ef28 (diff) | |
parent | e8b3b68e90155e25f0fe7a989e803a93caeafd12 (diff) | |
download | org.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.java | 18 | ||||
-rw-r--r-- | jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletHolderTest.java | 55 |
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); + } +} |