You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2013/04/11 22:29:29 UTC

svn commit: r1467077 - /geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/GeronimoApplicationManager.java

Author: gawor
Date: Thu Apr 11 20:29:29 2013
New Revision: 1467077

URL: http://svn.apache.org/r1467077
Log:
GERONIMO-6448: Make sure we always close input stream - work-around a bug in Aries' BundleManfiest

Modified:
    geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/GeronimoApplicationManager.java

Modified: geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/GeronimoApplicationManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/GeronimoApplicationManager.java?rev=1467077&r1=1467076&r2=1467077&view=diff
==============================================================================
--- geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/GeronimoApplicationManager.java (original)
+++ geronimo/server/branches/3.0/plugins/aries/geronimo-aries/src/main/java/org/apache/geronimo/aries/GeronimoApplicationManager.java Thu Apr 11 20:29:29 2013
@@ -17,6 +17,7 @@
 package org.apache.geronimo.aries;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -196,7 +197,7 @@ public class GeronimoApplicationManager 
         for (File file : baseDir.listFiles()) {
             if (file.isDirectory()) {
                 if (file.getName().endsWith(".jar")) {
-                    BundleManifest bm = BundleManifest.fromBundle(file);
+                    BundleManifest bm = fromBundle(file);
                     if (bm != null && bm.isValid()) {
                         bundleInfos.add(new SimpleBundleInfo(applicationMetadataFactory, bm, "reference:" + file.toURI().toString()));                
                     }
@@ -205,7 +206,7 @@ public class GeronimoApplicationManager 
                     continue;
                 }
             } else {
-                BundleManifest bm = BundleManifest.fromBundle(file);
+                BundleManifest bm = fromBundle(file);
                 if (bm != null && bm.isValid()) {
                     /*
                      * Pass file:// url instead of reference:file:// as bundle location to make sure
@@ -219,6 +220,47 @@ public class GeronimoApplicationManager 
         }
     }
     
+    private BundleManifest fromBundle(File file) {
+        if (file.isFile()) {
+            // it's a jar file
+            FileInputStream in = null;
+            try {
+                in = new FileInputStream(file);
+                return BundleManifest.fromBundle(in);
+            } catch (IOException e) {
+                LOG.debug("Error reading file: " + file, e);
+            } finally {
+                IOUtils.close(in);
+            }
+            return null;
+        } else if (file.isDirectory()) {
+            // it's a jar directory
+            File manifestFile = new File(file, JarFile.MANIFEST_NAME);
+            if (manifestFile.isFile()) {
+                FileInputStream in = null;
+                try {
+                    in = new FileInputStream(manifestFile);
+                    return new BundleManifest(in);
+                } catch (IOException e) {
+                    LOG.debug("Error reading manifest file: " + file, e);
+                } finally {
+                    IOUtils.close(in);
+                }
+            }
+            return null;
+        } else {
+            throw new IllegalArgumentException("Unsupported file type: " + file);
+        }
+    }
+    
+    private BundleManifest fromBundle(InputStream jarInputStream) {
+        try {
+            return BundleManifest.fromBundle(jarInputStream);
+        } finally {
+            IOUtils.close(jarInputStream);
+        }
+    }
+    
     private Set<BundleInfo> getBundleInfos(Bundle bundle) throws IOException, ManagementException {
         ApplicationMetadataFactory applicationMetadataFactory = getApplicationMetadataFactory();
         Set<BundleInfo> bundleInfos = new HashSet<BundleInfo>();
@@ -228,7 +270,7 @@ public class GeronimoApplicationManager 
             if (url.getPath().endsWith("/")) {
                 continue;
             }
-            BundleManifest bm = BundleManifest.fromBundle(url.openStream());
+            BundleManifest bm = fromBundle(url.openStream());
             if (bm != null && bm.isValid()) {
                 bundleInfos.add(new SimpleBundleInfo(applicationMetadataFactory, bm, url.toExternalForm()));
             }