]> source.dussan.org Git - pf4j.git/commitdiff
Fix issue with listing files from the jar file in readPluginsStorages().
authorBruno Harbulot <bruno@distributedmatter.net>
Fri, 12 Feb 2016 10:48:58 +0000 (10:48 +0000)
committerBruno Harbulot <bruno@distributedmatter.net>
Fri, 12 Feb 2016 10:48:58 +0000 (10:48 +0000)
pf4j/src/main/java/ro/fortsoft/pf4j/ServiceProviderExtensionFinder.java

index 80bb4126ee19cd5c650f853ec2233134cc4efaab..2a32c55fb97e54a739b476f2b00001f484990a8f 100644 (file)
@@ -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());
                 }