Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Wilkins2010-12-03 15:14:54 +0000
committerGreg Wilkins2010-12-03 15:14:54 +0000
commitd2161e36cfacbd7558640133f8024fea05b805bd (patch)
treea4f9d0c86380da05fe80fc04ec0e80e8d8163f20 /jetty-util
parentebf596b8a832d2a32fe36cf5e5686290664bef9d (diff)
downloadorg.eclipse.jetty.project-d2161e36cfacbd7558640133f8024fea05b805bd.tar.gz
org.eclipse.jetty.project-d2161e36cfacbd7558640133f8024fea05b805bd.tar.xz
org.eclipse.jetty.project-d2161e36cfacbd7558640133f8024fea05b805bd.zip
JETTY-1307 Check that JarFileResource directories end with /
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@2576 7e9141cc-0065-0410-87d8-b60c137991c4
Diffstat (limited to 'jetty-util')
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java13
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarResource.java7
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/resource/URLResource.java5
-rw-r--r--jetty-util/src/test/java/org/eclipse/jetty/util/resource/ResourceTest.java59
4 files changed, 74 insertions, 10 deletions
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java
index a7fdc9f7ee..a7ba967139 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java
@@ -185,6 +185,19 @@ class JarFileResource extends JarResource
break;
}
}
+
+ if (_directory && !_urlString.endsWith("/"))
+ {
+ _urlString+="/";
+ try
+ {
+ _url=new URL(_urlString);
+ }
+ catch(MalformedURLException ex)
+ {
+ Log.warn(ex);
+ }
+ }
}
}
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarResource.java b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarResource.java
index c79b1a6ed4..3362725133 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarResource.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarResource.java
@@ -125,6 +125,9 @@ public class JarResource extends URLResource
public void copyTo(File directory)
throws IOException
{
+ if (!exists())
+ return;
+
if(Log.isDebugEnabled())Log.debug("Extract "+this+" to "+directory);
String urlString = this.getURL().toExternalForm().trim();
@@ -150,6 +153,10 @@ public class JarResource extends URLResource
String entryName = entry.getName();
if ((subEntryName != null) && (entryName.startsWith(subEntryName)))
{
+ // is the subentry really a dir?
+ if (!subEntryIsDir && subEntryName.length()+1==entryName.length() && entryName.endsWith("/"))
+ subEntryIsDir=true;
+
//if there is a particular subEntry that we are looking for, only
//extract it.
if (subEntryIsDir)
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/URLResource.java b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/URLResource.java
index f7629c9c2b..c6b5c14d48 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/URLResource.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/URLResource.java
@@ -26,13 +26,10 @@ import org.eclipse.jetty.util.log.Log;
/* ------------------------------------------------------------ */
/** Abstract resource class.
- *
- *
- *
*/
public class URLResource extends Resource
{
- protected final URL _url;
+ protected URL _url;
protected String _urlString;
protected URLConnection _connection;
diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/ResourceTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/ResourceTest.java
index dbb9f87637..59aba3715d 100644
--- a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/ResourceTest.java
+++ b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/ResourceTest.java
@@ -24,6 +24,9 @@ import java.io.FilenameFilter;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
import java.util.jar.JarInputStream;
import org.eclipse.jetty.util.IO;
@@ -33,7 +36,6 @@ import org.junit.Test;
public class ResourceTest
{
-
public static String __userDir = System.getProperty("basedir", ".");
public static URL __userURL=null;
private static String __relDir="";
@@ -237,13 +239,58 @@ public class ResourceTest
public void testJarFile()
throws Exception
{
-
String s = "jar:"+__userURL+"TestData/test.zip!/subdir/";
Resource r = Resource.newResource(s);
- InputStream is = r.getInputStream();
- JarInputStream jin = new JarInputStream(is);
- assertNotNull(is);
- assertNotNull(jin);
+
+ Set entries = new HashSet(Arrays.asList(r.list()));
+ assertEquals(3,entries.size());
+ assertTrue(entries.contains("alphabet"));
+ assertTrue(entries.contains("numbers"));
+ assertTrue(entries.contains("subsubdir/"));
+
+ File extract = File.createTempFile("extract", null);
+ if (extract.exists())
+ extract.delete();
+ extract.mkdir();
+ extract.deleteOnExit();
+
+ r.copyTo(extract);
+
+ Resource e = Resource.newResource(extract.getAbsolutePath());
+
+ entries = new HashSet(Arrays.asList(e.list()));
+ assertEquals(3,entries.size());
+ assertTrue(entries.contains("alphabet"));
+ assertTrue(entries.contains("numbers"));
+ assertTrue(entries.contains("subsubdir/"));
+ IO.delete(extract);
+
+ s = "jar:"+__userURL+"TestData/test.zip!/subdir/subsubdir/";
+ r = Resource.newResource(s);
+
+ entries = new HashSet(Arrays.asList(r.list()));
+ assertEquals(2,entries.size());
+ assertTrue(entries.contains("alphabet"));
+ assertTrue(entries.contains("numbers"));
+
+ extract = File.createTempFile("extract", null);
+ if (extract.exists())
+ extract.delete();
+ extract.mkdir();
+ extract.deleteOnExit();
+
+ r.copyTo(extract);
+
+ e = Resource.newResource(extract.getAbsolutePath());
+
+ entries = new HashSet(Arrays.asList(e.list()));
+ assertEquals(2,entries.size());
+ assertTrue(entries.contains("alphabet"));
+ assertTrue(entries.contains("numbers"));
+ IO.delete(extract);
+
+
+
}
@Test

Back to the top