summaryrefslogtreecommitdiffstats
path: root/pf4j
diff options
context:
space:
mode:
authorAlexander Horuzhiy <123456>2016-01-18 16:25:39 +0100
committerAlexander Horuzhiy <123456>2016-01-18 16:25:39 +0100
commite73f1a46f2130eec79ca6de64ac5408a0aeac9a0 (patch)
tree5ce9b55ffbf701153d85bc82b87320057f1f5179 /pf4j
parentabc4bfa220216f986f2f336bd17672e4dea6bc21 (diff)
downloadpf4j-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.java29
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()) {