diff options
author | Bruno Harbulot <bruno@distributedmatter.net> | 2016-02-12 10:48:58 +0000 |
---|---|---|
committer | Bruno Harbulot <bruno@distributedmatter.net> | 2016-02-12 10:48:58 +0000 |
commit | ecf2d73fd5908534c7e0fe1c494e62a3fabdb138 (patch) | |
tree | e8774fcef6844f81d1760d5a5b2f827346ffdd51 | |
parent | fc0eb44426a6e4e8e2c78533c131f1ef7718bc25 (diff) | |
download | pf4j-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.java | 24 |
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()); } |