summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruno Harbulot <bruno@distributedmatter.net>2016-02-12 10:48:58 +0000
committerBruno Harbulot <bruno@distributedmatter.net>2016-02-12 10:48:58 +0000
commitecf2d73fd5908534c7e0fe1c494e62a3fabdb138 (patch)
treee8774fcef6844f81d1760d5a5b2f827346ffdd51
parentfc0eb44426a6e4e8e2c78533c131f1ef7718bc25 (diff)
downloadpf4j-ecf2d73fd5908534c7e0fe1c494e62a3fabdb138.tar.gz
pf4j-ecf2d73fd5908534c7e0fe1c494e62a3fabdb138.zip
Fix issue with listing files from the jar file in readPluginsStorages().
-rw-r--r--pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java24
1 files changed, 16 insertions, 8 deletions
diff --git a/pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java b/pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java
index 80bb412..2a32c55 100644
--- a/pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java
+++ b/pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java
@@ -19,8 +19,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.fortsoft.pf4j.processor.ServiceProviderExtensionStorage;
-import java.io.File;
-import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.net.URISyntaxException;
@@ -111,19 +109,29 @@ public class ServiceProviderExtensionFinder extends AbstractExtensionFinder {
for (PluginWrapper plugin : plugins) {
String pluginId = plugin.getDescriptor().getPluginId();
log.debug("Reading extensions storages for plugin '{}'", pluginId);
- Set<String> bucket = new HashSet<>();
+ final Set<String> bucket = new HashSet<>();
try {
URL url = ((PluginClassLoader) plugin.getPluginClassLoader()).findResource(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, StandardCharsets.UTF_8);
ServiceProviderExtensionStorage.read(reader, bucket);
+ return FileVisitResult.CONTINUE;
}
- }
+
+ });
} else {
log.debug("Cannot find '{}'", getExtensionsResource());
}