diff options
author | Alexander Horuzhiy <123456> | 2016-01-18 16:25:39 +0100 |
---|---|---|
committer | Alexander Horuzhiy <123456> | 2016-01-18 16:25:39 +0100 |
commit | e73f1a46f2130eec79ca6de64ac5408a0aeac9a0 (patch) | |
tree | 5ce9b55ffbf701153d85bc82b87320057f1f5179 /pf4j | |
parent | abc4bfa220216f986f2f336bd17672e4dea6bc21 (diff) | |
download | pf4j-e73f1a46f2130eec79ca6de64ac5408a0aeac9a0.tar.gz pf4j-e73f1a46f2130eec79ca6de64ac5408a0aeac9a0.zip |
Fix issue with listing files from the Jar file. Work with Jar's like with external file system using NIO.
Diffstat (limited to 'pf4j')
-rw-r--r-- | pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java b/pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java index 05c9cb4..64af946 100644 --- a/pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java +++ b/pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java @@ -25,11 +25,10 @@ import java.io.IOException; import java.io.Reader; import java.net.URISyntaxException; import java.net.URL; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.*; +import java.util.stream.Stream; /** * The ServiceLoader base implementation for ExtensionFinder. @@ -50,18 +49,26 @@ public class ServiceProviderExtensionFinder extends AbstractExtensionFinder { log.debug("Reading extensions storages from classpath"); Map<String, Set<String>> result = new LinkedHashMap<>(); - Set<String> bucket = new HashSet<>(); + final Set<String> bucket = new HashSet<>(); try { URL url = getClass().getClassLoader().getResource(getExtensionsResource()); if (url != null) { - File[] files = new File(url.toURI()).listFiles(); - if (files != null) { - for (File file : files) { + Path extensionPath; + if (url.toURI().getScheme().equals("jar")) { + FileSystem fileSystem = FileSystems.newFileSystem(url.toURI(), Collections.<String, Object>emptyMap()); + extensionPath = fileSystem.getPath(getExtensionsResource()); + } else { + extensionPath = Paths.get(url.toURI()); + } + Files.walkFileTree(extensionPath, Collections.<FileVisitOption>emptySet(), 1, new SimpleFileVisitor<Path>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { log.debug("Read '{}'", file); - Reader reader = new FileReader(file); + Reader reader = Files.newBufferedReader(file); ServiceProviderExtensionStorage.read(reader, bucket); + return FileVisitResult.CONTINUE; } - } + }); } if (bucket.isEmpty()) { |