diff options
author | Greg Wilkins | 2016-01-13 01:47:12 +0000 |
---|---|---|
committer | Greg Wilkins | 2016-01-13 01:47:25 +0000 |
commit | e2a0794d91e91a810f23c1c0ea45249a62a19b11 (patch) | |
tree | bd3f4d214ad2e8c394b16a4b97519f12a103f76f | |
parent | a7b3a9f4816b25811a88840b830975b5704fa6fc (diff) | |
download | org.eclipse.jetty.project-e2a0794d91e91a810f23c1c0ea45249a62a19b11.tar.gz org.eclipse.jetty.project-e2a0794d91e91a810f23c1c0ea45249a62a19b11.tar.xz org.eclipse.jetty.project-e2a0794d91e91a810f23c1c0ea45249a62a19b11.zip |
485712 - Quickstart web.xml is absolute
4 files changed, 149 insertions, 54 deletions
diff --git a/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartDescriptorGenerator.java b/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartDescriptorGenerator.java index 5db988d893..34c401222a 100644 --- a/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartDescriptorGenerator.java +++ b/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartDescriptorGenerator.java @@ -22,6 +22,9 @@ package org.eclipse.jetty.quickstart; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import java.util.Collection; import java.util.Collections; import java.util.EventListener; @@ -55,6 +58,7 @@ import org.eclipse.jetty.servlet.ServletMapping; import org.eclipse.jetty.util.QuotedStringTokenizer; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; +import org.eclipse.jetty.util.resource.Resource; import org.eclipse.jetty.util.security.Constraint; import org.eclipse.jetty.webapp.MetaData; import org.eclipse.jetty.webapp.MetaData.OriginInfo; @@ -128,16 +132,16 @@ public class QuickStartDescriptorGenerator // Set some special context parameters // The location of the war file on disk - String resourceBase = _webApp.getBaseResource().getFile().getCanonicalFile().getAbsoluteFile().toURI().toString(); + AttributeNormalizer normalizer = new AttributeNormalizer(_webApp.getBaseResource()); // The library order addContextParamFromAttribute(out,ServletContext.ORDERED_LIBS); //the servlet container initializers addContextParamFromAttribute(out,AnnotationConfiguration.CONTAINER_INITIALIZERS); //the tlds discovered - addContextParamFromAttribute(out,MetaInfConfiguration.METAINF_TLDS,resourceBase); + addContextParamFromAttribute(out,MetaInfConfiguration.METAINF_TLDS,normalizer); //the META-INF/resources discovered - addContextParamFromAttribute(out,MetaInfConfiguration.METAINF_RESOURCES,resourceBase); + addContextParamFromAttribute(out,MetaInfConfiguration.METAINF_RESOURCES,normalizer); // init params @@ -515,7 +519,27 @@ public class QuickStartDescriptorGenerator */ private void addContextParamFromAttribute(XmlAppendable out, String attribute) throws IOException { - addContextParamFromAttribute(out,attribute,null); + Object o = _webApp.getAttribute(attribute); + if (o == null) + return; + + Collection<?> c = (o instanceof Collection)? (Collection<?>)o:Collections.singletonList(o); + StringBuilder v=new StringBuilder(); + for (Object i:c) + { + if (i!=null) + { + if (v.length()>0) + v.append(",\n "); + else + v.append("\n "); + QuotedStringTokenizer.quote(v,i.toString()); + } + } + out.openTag("context-param") + .tag("param-name",attribute) + .tagCDATA("param-value",v.toString()) + .closeTag(); } /** @@ -526,7 +550,7 @@ public class QuickStartDescriptorGenerator * @param resourceBase * @throws IOException */ - private void addContextParamFromAttribute(XmlAppendable out, String attribute, String resourceBase) throws IOException + private void addContextParamFromAttribute(XmlAppendable out, String attribute, AttributeNormalizer normalizer) throws IOException { Object o = _webApp.getAttribute(attribute); if (o == null) @@ -542,16 +566,14 @@ public class QuickStartDescriptorGenerator v.append(",\n "); else v.append("\n "); - if (resourceBase==null) - QuotedStringTokenizer.quote(v,i.toString()); - else - QuotedStringTokenizer.quote(v,i.toString().replace(resourceBase,"${WAR}/")); + QuotedStringTokenizer.quote(v,normalizer.normalize(i)); } } out.openTag("context-param") .tag("param-name",attribute) .tagCDATA("param-value",v.toString()) - .closeTag(); + .closeTag(); + } /** diff --git a/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartDescriptorProcessor.java b/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartDescriptorProcessor.java index 924b0dd5f9..35d41ea17a 100644 --- a/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartDescriptorProcessor.java +++ b/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartDescriptorProcessor.java @@ -99,6 +99,7 @@ public class QuickStartDescriptorProcessor extends IterativeDescriptorProcessor values.add(value); } + AttributeNormalizer normalizer = new AttributeNormalizer(context.getBaseResource()); // handle values switch(name) { @@ -125,15 +126,14 @@ public class QuickStartDescriptorProcessor extends IterativeDescriptorProcessor case MetaInfConfiguration.METAINF_TLDS: { List<Object> tlds = new ArrayList<>(); - String war=context.getBaseResource().getURI().toString(); Object o=context.getAttribute(MetaInfConfiguration.METAINF_TLDS); if (o instanceof Collection<?>) tlds.addAll((Collection<?>)o); for (String i : values) { - Resource r = Resource.newResource(i.replace("${WAR}/",war)); + Resource r = Resource.newResource(normalizer.expand(i)); if (r.exists()) - tlds.add(r.getURL()); + tlds.add(r.getURI().toURL()); else throw new IllegalArgumentException("TLD not found: "+r); } @@ -145,10 +145,9 @@ public class QuickStartDescriptorProcessor extends IterativeDescriptorProcessor case MetaInfConfiguration.METAINF_RESOURCES: { - String war=context.getBaseResource().getURI().toString(); for (String i : values) { - Resource r = Resource.newResource(i.replace("${WAR}/",war)); + Resource r = Resource.newResource(normalizer.expand(i)); if (r.exists()) visitMetaInfResource(context,r); else diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/FileSystemResourceTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/FileSystemResourceTest.java index 25418ee060..392524c962 100644 --- a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/FileSystemResourceTest.java +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/FileSystemResourceTest.java @@ -222,7 +222,7 @@ public class FileSystemResourceTest @Test public void testAddPath() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Path subdir = dir.resolve("sub"); FS.ensureDirExists(subdir.toFile()); @@ -240,7 +240,7 @@ public class FileSystemResourceTest @Test public void testAddRootPath() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Path subdir = dir.resolve("sub"); Files.createDirectories(subdir); @@ -288,7 +288,7 @@ public class FileSystemResourceTest @Test public void testIsContainedIn() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path foo = dir.resolve("foo"); Files.createFile(foo); @@ -303,7 +303,7 @@ public class FileSystemResourceTest @Test public void testIsDirectory() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path foo = dir.resolve("foo"); Files.createFile(foo); @@ -324,7 +324,7 @@ public class FileSystemResourceTest @Test public void testLastModified() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); File file = testdir.getFile("foo"); file.createNewFile(); @@ -340,7 +340,7 @@ public class FileSystemResourceTest @Test public void testLastModified_NotExists() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); try (Resource base = newResource(dir.toFile())) { @@ -352,7 +352,7 @@ public class FileSystemResourceTest @Test public void testLength() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path file = dir.resolve("foo"); @@ -375,7 +375,7 @@ public class FileSystemResourceTest @Test public void testLength_NotExists() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); try (Resource base = newResource(dir.toFile())) @@ -388,7 +388,7 @@ public class FileSystemResourceTest @Test public void testDelete() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path file = dir.resolve("foo"); Files.createFile(file); @@ -408,7 +408,7 @@ public class FileSystemResourceTest @Test public void testDelete_NotExists() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); try (Resource base = newResource(dir.toFile())) @@ -426,7 +426,7 @@ public class FileSystemResourceTest @Test public void testName() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); String expected = dir.toAbsolutePath().toString(); @@ -440,7 +440,7 @@ public class FileSystemResourceTest @Test public void testInputStream() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path file = dir.resolve("foo"); @@ -466,7 +466,7 @@ public class FileSystemResourceTest @Test public void testReadableByteChannel() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path file = dir.resolve("foo"); @@ -495,7 +495,7 @@ public class FileSystemResourceTest @Test public void testGetURI() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path file = dir.resolve("foo"); @@ -514,7 +514,7 @@ public class FileSystemResourceTest @Test public void testGetURL() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path file = dir.resolve("foo"); @@ -532,7 +532,7 @@ public class FileSystemResourceTest @Test public void testList() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Files.createFile(dir.resolve("foo")); @@ -561,7 +561,7 @@ public class FileSystemResourceTest @Test public void testSymlink() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Path foo = dir.resolve("foo"); Path bar = dir.resolve("bar"); @@ -601,7 +601,7 @@ public class FileSystemResourceTest @Test public void testNonExistantSymlink() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path foo = dir.resolve("foo"); @@ -644,7 +644,7 @@ public class FileSystemResourceTest @Test public void testCaseInsensitiveAlias() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path path = dir.resolve("file"); Files.createFile(path); @@ -681,7 +681,7 @@ public class FileSystemResourceTest @Test public void testCase8dot3Alias() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path path = dir.resolve("TextFile.Long.txt"); @@ -718,7 +718,7 @@ public class FileSystemResourceTest @Test public void testNTFSFileStreamAlias() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path path = dir.resolve("testfile"); @@ -761,7 +761,7 @@ public class FileSystemResourceTest @Test public void testNTFSFileDataStreamAlias() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path path = dir.resolve("testfile"); @@ -806,7 +806,7 @@ public class FileSystemResourceTest @Test public void testNTFSFileEncodedDataStreamAlias() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path path = dir.resolve("testfile"); @@ -843,7 +843,7 @@ public class FileSystemResourceTest @Test public void testSemicolon() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); try { @@ -868,7 +868,7 @@ public class FileSystemResourceTest @Test public void testSingleQuote() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); try @@ -894,7 +894,7 @@ public class FileSystemResourceTest @Test public void testSingleBackTick() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); try @@ -923,7 +923,7 @@ public class FileSystemResourceTest @Test public void testBrackets() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); try @@ -949,7 +949,7 @@ public class FileSystemResourceTest @Test public void testBraces() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); try @@ -978,7 +978,7 @@ public class FileSystemResourceTest @Test public void testCaret() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); try @@ -1007,7 +1007,7 @@ public class FileSystemResourceTest @Test public void testPipe() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); try @@ -1040,13 +1040,13 @@ public class FileSystemResourceTest @Test public void testExist_Normal() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path path = dir.resolve("a.jsp"); Files.createFile(path); - URI ref = testdir.getDir().toURI().resolve("a.jsp"); + URI ref = testdir.getPath().toUri().resolve("a.jsp"); try (Resource fileres = newResource(ref)) { assertThat("Resource: " + fileres,fileres.exists(),is(true)); @@ -1056,7 +1056,7 @@ public class FileSystemResourceTest @Test public void testSingleQuoteInFileName() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path fooA = dir.resolve("foo's.txt"); @@ -1121,7 +1121,7 @@ public class FileSystemResourceTest @Test public void testExist_BadURINull() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path path = dir.resolve("a.jsp"); @@ -1130,7 +1130,7 @@ public class FileSystemResourceTest try { // request with null at end - URI uri = testdir.getDir().toURI().resolve("a.jsp%00"); + URI uri = testdir.getPath().toUri().resolve("a.jsp%00"); assertThat("Null URI",uri,notNullValue()); Resource r = newResource(uri); @@ -1147,7 +1147,7 @@ public class FileSystemResourceTest @Test public void testExist_BadURINullX() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path path = dir.resolve("a.jsp"); @@ -1156,7 +1156,7 @@ public class FileSystemResourceTest try { // request with null and x at end - URI uri = testdir.getDir().toURI().resolve("a.jsp%00x"); + URI uri = testdir.getPath().toUri().resolve("a.jsp%00x"); assertThat("NullX URI",uri,notNullValue()); Resource r = newResource(uri); @@ -1173,7 +1173,7 @@ public class FileSystemResourceTest @Test public void testEncoding() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Files.createDirectories(dir); Path specials = dir.resolve("a file with,spe#ials"); @@ -1192,7 +1192,7 @@ public class FileSystemResourceTest @Test public void testUtf8Dir() throws Exception { - Path dir = testdir.getDir().toPath().normalize().toRealPath(); + Path dir = testdir.getPath().normalize().toRealPath(); Path utf8Dir = dir.resolve("bãm"); Files.createDirectories(utf8Dir); @@ -1209,4 +1209,6 @@ public class FileSystemResourceTest assertThat("Alias: " + r,r,hasNoAlias()); } } + + } diff --git a/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/QuickStartTest.java b/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/QuickStartTest.java index 61b853ba35..54b0caa031 100644 --- a/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/QuickStartTest.java +++ b/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/QuickStartTest.java @@ -21,8 +21,10 @@ package org.eclipse.jetty.quickstart; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import java.io.File; import java.io.InputStream; import java.net.HttpURLConnection; +import java.net.URI; import java.net.URL; import org.eclipse.jetty.server.NetworkConnector; @@ -33,6 +35,7 @@ import org.eclipse.jetty.webapp.WebDescriptor; import org.eclipse.jetty.xml.XmlConfiguration; import org.eclipse.jetty.xml.XmlParser.Node; import org.hamcrest.Matchers; +import org.junit.Assert; import org.junit.Test; public class QuickStartTest @@ -176,4 +179,73 @@ public class QuickStartTest server.stop(); } + + @Test + public void testNormalize() throws Exception + { + String jetty_base=System.getProperty("jetty.base"); + String jetty_home=System.getProperty("jetty.home"); + String user_home=System.getProperty("user.home"); + String user_dir=System.getProperty("user.dir"); + try + { + System.setProperty("jetty.home","/opt/jetty-distro"); + System.setProperty("jetty.base","/opt/jetty-distro/demo.base"); + System.setProperty("user.home","/home/user"); + System.setProperty("user.dir","/etc/init.d"); + AttributeNormalizer normalizer = new AttributeNormalizer(Resource.newResource("/opt/jetty-distro/demo.base/webapps/root")); + + String[][] tests = { + { "WAR", "/opt/jetty-distro/demo.base/webapps/root" }, + { "jetty.home", "/opt/jetty-distro" }, + { "jetty.base", "/opt/jetty-distro/demo.base" }, + { "user.home", "/home/user" }, + { "user.dir", "/etc/init.d" }, + }; + + for (String[] test : tests) + { + Assert.assertEquals("file:${"+test[0]+"}",normalizer.normalize("file:"+test[1])); + Assert.assertEquals("file:${"+test[0]+"}",normalizer.normalize("file:"+test[1]+"/")); + Assert.assertEquals("file:${"+test[0]+"}/file",normalizer.normalize("file:"+test[1]+"/file")); + Assert.assertEquals("file:${"+test[0]+"}",normalizer.normalize(new URI("file:"+test[1]))); + Assert.assertEquals("file:${"+test[0]+"}",normalizer.normalize(new URI("file:"+test[1]+"/"))); + Assert.assertEquals("file:${"+test[0]+"}/file",normalizer.normalize(new URI("file:"+test[1]+"/file"))); + Assert.assertEquals("file:${"+test[0]+"}",normalizer.normalize(new URL("file:"+test[1]))); + Assert.assertEquals("file:${"+test[0]+"}",normalizer.normalize(new URL("file:"+test[1]+"/"))); + Assert.assertEquals("file:${"+test[0]+"}/file",normalizer.normalize(new URL("file:"+test[1]+"/file"))); + Assert.assertEquals("jar:file:${"+test[0]+"}!/file",normalizer.normalize("jar:file:"+test[1]+"!/file")); + Assert.assertEquals("jar:file:${"+test[0]+"}!/file",normalizer.normalize("jar:file:"+test[1]+"/!/file")); + Assert.assertEquals("jar:file:${"+test[0]+"}/file!/file",normalizer.normalize("jar:file:"+test[1]+"/file!/file")); + Assert.assertEquals("jar:file:${"+test[0]+"}!/file",normalizer.normalize(new URI("jar:file:"+test[1]+"!/file"))); + Assert.assertEquals("jar:file:${"+test[0]+"}!/file",normalizer.normalize(new URI("jar:file:"+test[1]+"/!/file"))); + Assert.assertEquals("jar:file:${"+test[0]+"}/file!/file",normalizer.normalize(new URI("jar:file:"+test[1]+"/file!/file"))); + Assert.assertEquals("jar:file:${"+test[0]+"}!/file",normalizer.normalize(new URL("jar:file:"+test[1]+"!/file"))); + Assert.assertEquals("jar:file:${"+test[0]+"}!/file",normalizer.normalize(new URL("jar:file:"+test[1]+"/!/file"))); + Assert.assertEquals("jar:file:${"+test[0]+"}/file!/file",normalizer.normalize(new URL("jar:file:"+test[1]+"/file!/file"))); + } + } + finally + { + if (user_dir==null) + System.clearProperty("user.dir"); + else + System.setProperty("user.dir",user_dir); + + if (user_home==null) + System.clearProperty("user.home"); + else + System.setProperty("user.home",user_home); + + if (jetty_home==null) + System.clearProperty("jetty.home"); + else + System.setProperty("jetty.home",jetty_home); + + if (jetty_base==null) + System.clearProperty("jetty.base"); + else + System.setProperty("jetty.base",jetty_base); + } + } } |