You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by jb...@apache.org on 2015/04/06 20:53:07 UTC
svn commit: r1671635 - in /tomcat/sandbox/niofs:
src/niofs/ArchiveFileSystemProvider.java tst/niofs/ClassLoaderTest.java
Author: jboynes
Date: Mon Apr 6 18:53:07 2015
New Revision: 1671635
URL: http://svn.apache.org/r1671635
Log:
Separate mounting FileSystem from creating ClassLoader
Modified:
tomcat/sandbox/niofs/src/niofs/ArchiveFileSystemProvider.java
tomcat/sandbox/niofs/tst/niofs/ClassLoaderTest.java
Modified: tomcat/sandbox/niofs/src/niofs/ArchiveFileSystemProvider.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/niofs/src/niofs/ArchiveFileSystemProvider.java?rev=1671635&r1=1671634&r2=1671635&view=diff
==============================================================================
--- tomcat/sandbox/niofs/src/niofs/ArchiveFileSystemProvider.java (original)
+++ tomcat/sandbox/niofs/src/niofs/ArchiveFileSystemProvider.java Mon Apr 6 18:53:07 2015
@@ -52,6 +52,7 @@ import java.nio.file.attribute.FileTime;
import java.nio.file.attribute.UserPrincipalLookupService;
import java.nio.file.spi.FileSystemProvider;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
@@ -261,6 +262,7 @@ public class ArchiveFileSystemProvider e
*/
class ArchiveFileSystem extends FileSystem {
private final URI baseURI;
+ private final Path root;
private final Map<Path, DirectoryNode> directory;
private volatile boolean open = true;
@@ -271,6 +273,7 @@ public class ArchiveFileSystemProvider e
throw new IllegalArgumentException(e);
}
directory = createIndex(path);
+ root = getPath("/");
}
/**
@@ -348,7 +351,7 @@ public class ArchiveFileSystemProvider e
@Override
public Iterable<Path> getRootDirectories() {
- return null;
+ return Collections.singleton(root);
}
@Override
Modified: tomcat/sandbox/niofs/tst/niofs/ClassLoaderTest.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/niofs/tst/niofs/ClassLoaderTest.java?rev=1671635&r1=1671634&r2=1671635&view=diff
==============================================================================
--- tomcat/sandbox/niofs/tst/niofs/ClassLoaderTest.java (original)
+++ tomcat/sandbox/niofs/tst/niofs/ClassLoaderTest.java Mon Apr 6 18:53:07 2015
@@ -20,7 +20,6 @@ import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
@@ -34,6 +33,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
+import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -41,7 +41,6 @@ import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import static java.net.URLEncoder.encode;
import static org.junit.Assert.assertEquals;
/**
@@ -89,30 +88,32 @@ public class ClassLoaderTest {
private ClassLoader classLoader;
@Before
- public void initClassLoader() throws IOException {
+ public void initClassLoader() throws Exception {
ArchiveFileSystemProvider provider = new ArchiveFileSystemProvider();
+ String scheme = provider.getScheme();
Path war = FileSystems.getDefault().getPath("greenhouse-1.0.0.BUILD-SNAPSHOT.war");
- URI warURI = URI.create(provider.getScheme() + "://" + encode(war.toUri().toString(), "UTF8"));
- FileSystem fileSystem = FileSystems.newFileSystem(warURI, Collections.emptyMap());
- URL[] urls = Files.list(fileSystem.getPath(fileSystem.getSeparator() + "WEB-INF", "lib"))
+ URI warURI = new URI(scheme, war.toUri().toString(), null, null, null);
+ FileSystem warFS = FileSystems.newFileSystem(warURI, Collections.emptyMap());
+ List<FileSystem> fileSystems = Files.list(warFS.getPath("/WEB-INF/lib"))
.filter(path -> path.getFileName().toString().matches(".*\\.(zip|jar)$"))
.map(path -> {
try {
- return URI.create(provider.getScheme() + "://" + encode(path.toUri().toString(), "UTF8"));
- } catch (UnsupportedEncodingException e) {
+ URI archiveURI = new URI(scheme, path.toUri().toString(), null, null, null);
+ return FileSystems.newFileSystem(archiveURI, Collections.emptyMap());
+ } catch (URISyntaxException | IOException e) {
throw new IllegalStateException(e);
}
})
- .peek(uri -> {
+ .collect(Collectors.toList());
+ Path classes = warFS.getPath("/WEB-INF/classes");
+ if (Files.isDirectory(classes)) {
+ fileSystems.add(FileSystems.newFileSystem(classes.toUri(), Collections.emptyMap()));
+ }
+ URL[] urls = fileSystems.stream()
+ .map(archiveFS -> {
try {
- FileSystems.newFileSystem(uri, Collections.emptyMap());
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- })
- .map(uri -> {
- try {
- return new URL(uri.toString() + '/');
+ Path rootPath = archiveFS.getRootDirectories().iterator().next();
+ return rootPath.toUri().toURL();
} catch (IOException e) {
throw new IllegalStateException(e);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org