Author: andygumbrecht
Date: Tue Nov 27 14:38:37 2012
New Revision: 1414211

URL: http://svn.apache.org/viewvc?rev=1414211&view=rev
Log:
Prevent File.listFiles null pointer
finals.

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JarCreator.java
    
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
    
openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
    
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java
    
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JarCreator.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JarCreator.java?rev=1414211&r1=1414210&r2=1414211&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JarCreator.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JarCreator.java
 Tue Nov 27 14:38:37 2012
@@ -50,7 +50,8 @@ public final class JarCreator {
 
     private static void jarFile(final JarOutputStream out, final File f, final 
String prefix) throws IOException {
         if (f.isDirectory()) {
-            for (File child : f.listFiles()) {
+            final File[] files = f.listFiles();
+            if (null != files) for (File child : files) {
                 jarFile(out, child, prefix);
             }
         } else {

Modified: 
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java?rev=1414211&r1=1414210&r2=1414211&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
 Tue Nov 27 14:38:37 2012
@@ -172,13 +172,20 @@ public class Files {
     public static void delete(File file) {
         if (file.exists()) {
             if (file.isDirectory()) {
-                for (File f : file.listFiles()) {
-                    delete(f);
-                }
+                               final File[] files = file.listFiles();
+                               if(null != files){
+                                       for (File f : files) {
+                                               delete(f);
+                                       }
+                               }
             }
 
             if(!file.delete()){
-                file.deleteOnExit();
+                try{
+                                       file.deleteOnExit();
+                               }catch(Throwable e){
+                                       //Ignore
+                               }
             }
         }
     }

Modified: 
openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java?rev=1414211&r1=1414210&r2=1414211&view=diff
==============================================================================
--- 
openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
 (original)
+++ 
openejb/trunk/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
 Tue Nov 27 14:38:37 2012
@@ -235,7 +235,8 @@ public abstract class AbstractTomEEMojo 
     private void removeDefaultWebapps(final boolean removeTomee) {
         final File webapps = new File(catalinaBase, webappDir);
         if (webapps.isDirectory()) {
-            for (File webapp : webapps.listFiles()) {
+                       final File[] files = webapps.listFiles();
+            if (null != files) for (File webapp : files) {
                 final String name = webapp.getName();
                 if (webapp.isDirectory() && (removeTomee || 
!name.equals("tomee"))) {
                     try {

Modified: 
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java?rev=1414211&r1=1414210&r2=1414211&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java
 Tue Nov 27 14:38:37 2012
@@ -41,16 +41,16 @@ import java.util.logging.Logger;
 
 /**
  * The sole purpose of this class is to call the {@link TomcatEmbedder#embed} 
method
- *
+ * <p/>
  * This is an alternate way to load the Tomcat integration
  * This approach is mutually exclussive to the {@link LoaderServlet}
- *
+ * <p/>
  * This class does nothing more than scrape around in
  * Tomcat and look for the tomee.war so it can call the embedder
- *
+ * <p/>
  * This class can be installed in the Tomcat server.xml as an alternate
  * way to bootstrap OpenEJB into Tomcat.  The benefit of this is that
- * OpenEJB is guaranteed to start before all webapps. 
+ * OpenEJB is guaranteed to start before all webapps.
  */
 public class OpenEJBListener implements LifecycleListener {
     private static final Logger LOGGER = 
Logger.getLogger(OpenEJBListener.class.getName());
@@ -62,18 +62,19 @@ public class OpenEJBListener implements 
         return listenerInstalled;
     }
 
-    public void lifecycleEvent(LifecycleEvent event) {
+    @Override
+    public void lifecycleEvent(final LifecycleEvent event) {
         // only install once
         if (listenerInstalled || 
!Lifecycle.AFTER_INIT_EVENT.equals(event.getType())) return;
-        
+
         try {
-               File webappDir = findOpenEjbWar();
+            File webappDir = findOpenEjbWar();
             if (webappDir == null && event.getSource() instanceof 
StandardServer) {
                 final StandardServer server = (StandardServer) 
event.getSource();
                 webappDir = tryToFindAndExtractWar(server);
                 if (webappDir != null) { // we are using webapp startup
                     final File exploded = extractDirectory(webappDir);
-                    if (webappDir != null) {
+                    if (exploded != null) {
                         extract(webappDir, exploded);
                     }
                     webappDir = exploded;
@@ -84,7 +85,7 @@ public class OpenEJBListener implements 
                 LOGGER.info("found the tomee webapp on " + 
webappDir.getPath());
                 final Properties properties = new Properties();
                 properties.setProperty("tomee.war", 
webappDir.getAbsolutePath());
-                properties.setProperty("openejb.embedder.source", 
getClass().getSimpleName());
+                properties.setProperty("openejb.embedder.source", 
OpenEJBListener.class.getSimpleName());
                 TomcatEmbedder.embed(properties, 
StandardServer.class.getClassLoader());
                 listenerInstalled = true;
             } else if (logWebappNotFound) {
@@ -111,18 +112,18 @@ public class OpenEJBListener implements 
             return new File(System.getProperty("openejb.war"));
         }
 
-        for (Service service : source.findServices()) {
+        for (final Service service : source.findServices()) {
             final Container container = service.getContainer();
             if (container instanceof StandardEngine) {
                 final StandardEngine engine = (StandardEngine) container;
-                for (Container child : engine.findChildren()) {
+                for (final Container child : engine.findChildren()) {
                     if (child instanceof StandardHost) {
                         final StandardHost host = (StandardHost) child;
                         final File base = 
hostDir(System.getProperty("catalina.base"), host.getAppBase());
 
                         final File[] files = base.listFiles();
                         if (files != null) {
-                            for (File file : files) {
+                            for (final File file : files) {
                                 if (isTomEEWar(file)) {
                                     return file;
                                 }
@@ -150,39 +151,40 @@ public class OpenEJBListener implements 
 
     private static File findOpenEjbWar() {
         // in Tomcat 5.5 the OpenEjb war is in the server/webapps director
-        String catalinaBase = System.getProperty("catalina.base");
-        File serverWebapps = new File(catalinaBase, "server/webapps");
+        final String catalinaBase = System.getProperty("catalina.base");
+        final File serverWebapps = new File(catalinaBase, "server/webapps");
         File openEjbWar = findOpenEjbWar(serverWebapps);
         if (openEjbWar != null) {
             return openEjbWar;
         }
-                       
-               try {
-                       // in Tomcat 6 the OpenEjb war is normally in webapps, 
but we just
-                       // scan all hosts directories
-                       for (Service service : 
TomcatHelper.getServer().findServices()) {
-                               Container container = service.getContainer();
-                               if (container instanceof StandardEngine) {
-                                       StandardEngine engine = 
(StandardEngine) container;
-                                       for (Container child : 
engine.findChildren()) {
-                                               if (child instanceof 
StandardHost) {
-                                                       StandardHost host = 
(StandardHost) child;
-                                                       final File hostDir = 
hostDir(catalinaBase, host.getAppBase());
-
-                                                       openEjbWar = 
findOpenEjbWar(hostDir);
-                                                       if (openEjbWar != null) 
{
-                                                               return 
openEjbWar;
-                                                       } else {
-                                                               return 
findOpenEjbWar(host);
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               } catch (Exception e) {
-               }      
-               
-               return null;
+
+        try {
+            // in Tomcat 6 the OpenEjb war is normally in webapps, but we just
+            // scan all hosts directories
+            for (final Service service : 
TomcatHelper.getServer().findServices()) {
+                final Container container = service.getContainer();
+                if (container instanceof StandardEngine) {
+                    final StandardEngine engine = (StandardEngine) container;
+                    for (final Container child : engine.findChildren()) {
+                        if (child instanceof StandardHost) {
+                            final StandardHost host = (StandardHost) child;
+                            final File hostDir = hostDir(catalinaBase, 
host.getAppBase());
+
+                            openEjbWar = findOpenEjbWar(hostDir);
+                            if (openEjbWar != null) {
+                                return openEjbWar;
+                            } else {
+                                return findOpenEjbWar(host);
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            LOGGER.log(Level.WARNING, "OpenEJBListener.findOpenEjbWar: " + 
e.getMessage());
+        }
+
+        return null;
     }
 
     private static File hostDir(final String catalinaBase, final String 
appBase) {
@@ -193,42 +195,43 @@ public class OpenEJBListener implements 
         return hostDir;
     }
 
-    private static File findOpenEjbWar(StandardHost standardHost) {
-       //look for openejb war in a Tomcat context
-       for(Container container : standardHost.findChildren()) {
-               if(container instanceof StandardContext) {
-                       StandardContext standardContext = 
(StandardContext)container;
-                       File contextDocBase = new 
File(standardContext.getDocBase());
+    private static File findOpenEjbWar(final StandardHost standardHost) {
+        //look for openejb war in a Tomcat context
+        for (final Container container : standardHost.findChildren()) {
+            if (container instanceof StandardContext) {
+                final StandardContext standardContext = (StandardContext) 
container;
+                File contextDocBase = new File(standardContext.getDocBase());
                 if (!contextDocBase.isDirectory() && 
standardContext.getOriginalDocBase() != null) {
                     contextDocBase = new 
File(standardContext.getOriginalDocBase());
                 }
-                       if(contextDocBase.isDirectory()) {
-                               File openEjbWar = 
findOpenEjbWarInContext(contextDocBase);
-                       if (openEjbWar != null) {
-                           return openEjbWar;
-                       }
-                       }
-               }
-       }
-       return null;
+                if (contextDocBase.isDirectory()) {
+                    final File openEjbWar = 
findOpenEjbWarInContext(contextDocBase);
+                    if (openEjbWar != null) {
+                        return openEjbWar;
+                    }
+                }
+            }
+        }
+        return null;
     }
 
-    private static File findOpenEjbWar(File hostDir) {
+    private static File findOpenEjbWar(final File hostDir) {
         if (!hostDir.isDirectory()) {
             return null;
         }
 
         // iterate over the contexts
-        for (File contextDir : hostDir.listFiles()) {
-               File foundContextDir = findOpenEjbWarInContext(contextDir);
-               if(foundContextDir != null) {
-                       return foundContextDir;
-               }
+        final File[] files = hostDir.listFiles();
+        if (null != files) for (final File contextDir : files) {
+            final File foundContextDir = findOpenEjbWarInContext(contextDir);
+            if (foundContextDir != null) {
+                return foundContextDir;
+            }
         }
         return null;
     }
-     
-    private static File findOpenEjbWarInContext(File contextDir) {
+
+    private static File findOpenEjbWarInContext(final File contextDir) {
         // this should be a webapp
         if (!new File(contextDir, "WEB-INF").exists()) {
             return null;
@@ -236,14 +239,14 @@ public class OpenEJBListener implements 
 
         // this should be the openejb war...
         // make sure it has a lib directory
-        File webInfLib = new File(contextDir, "lib");
+        final File webInfLib = new File(contextDir, "lib");
         if (!webInfLib.isDirectory()) {
-             return null;
+            return null;
         }
         // iterate over the libs looking for the openejb-loader-*.jar
         final File[] files = webInfLib.listFiles();
         if (files != null) {
-            for (File file : files) {
+            for (final File file : files) {
                 if (file.getName().startsWith("tomee-catalina-") && 
file.getName().endsWith(".jar")) {
                     return contextDir;
                 }
@@ -260,20 +263,24 @@ public class OpenEJBListener implements 
 
         LOGGER.info("Extracting openejb webapp from " + src.getAbsolutePath() 
+ " to " + dest.getAbsolutePath());
 
-        dest.mkdirs();
+        if (!dest.mkdirs()) {
+            throw new IOException("Failed to create: " + dest);
+        }
 
         JarFile jarFile = null;
         InputStream input = null;
         try {
             jarFile = new JarFile(src);
-            Enumeration jarEntries = jarFile.entries();
+            final Enumeration jarEntries = jarFile.entries();
             while (jarEntries.hasMoreElements()) {
-                JarEntry jarEntry = (JarEntry) jarEntries.nextElement();
-                String name = jarEntry.getName();
-                int last = name.lastIndexOf('/');
+                final JarEntry jarEntry = (JarEntry) jarEntries.nextElement();
+                final String name = jarEntry.getName();
+                final int last = name.lastIndexOf('/');
                 if (last >= 0) {
-                    File parent = new File(dest, name.substring(0, last));
-                    parent.mkdirs();
+                    final File parent = new File(dest, name.substring(0, 
last));
+                    if (!parent.mkdirs()) {
+                        throw new IOException("Failed to create: " + parent);
+                    }
                 }
                 if (name.endsWith("/")) {
                     continue;
@@ -284,9 +291,9 @@ public class OpenEJBListener implements 
                 BufferedOutputStream output = null;
                 try {
                     output = new BufferedOutputStream(new 
FileOutputStream(file));
-                    byte buffer[] = new byte[2048];
+                    final byte[] buffer = new byte[2048];
                     while (true) {
-                        int n = input.read(buffer);
+                        final int n = input.read(buffer);
                         if (n <= 0)
                             break;
                         output.write(buffer, 0, n);
@@ -301,9 +308,11 @@ public class OpenEJBListener implements 
                     }
                 }
 
-                long lastModified = jarEntry.getTime();
+                final long lastModified = jarEntry.getTime();
                 if (lastModified != -1 && lastModified != 0 && file != null) {
-                    file.setLastModified(lastModified);
+                    if (!file.setLastModified(lastModified)) {
+                        LOGGER.log(Level.WARNING, "Failed to set last modified 
time on: " + file.getAbsolutePath());
+                    }
                 }
 
                 input.close();

Modified: 
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java?rev=1414211&r1=1414210&r2=1414211&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
 Tue Nov 27 14:38:37 2012
@@ -39,7 +39,6 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 import java.util.StringTokenizer;
 
@@ -56,34 +55,32 @@ public class TomEEJarScanner extends Sta
 
     static {
         final Set<String> defaultJarsToSkip = new HashSet<String>();
-        String jarList = System.getProperty(Constants.SKIP_JARS_PROPERTY);
+        final String jarList = 
System.getProperty(Constants.SKIP_JARS_PROPERTY);
         if (jarList != null) {
-            StringTokenizer tokenizer = new StringTokenizer(jarList, ",");
+            final StringTokenizer tokenizer = new StringTokenizer(jarList, 
",");
             while (tokenizer.hasMoreElements()) {
                 defaultJarsToSkip.add(tokenizer.nextToken());
             }
         }
 
         final Set<String[]> ignoredJarsTokens = new HashSet<String[]>();
-        for (String pattern : defaultJarsToSkip) {
+        for (final String pattern : defaultJarsToSkip) {
             ignoredJarsTokens.add(Matcher.tokenizePathAsArray(pattern));
         }
         DEFAULT_JARS_TO_SKIP = ignoredJarsTokens;
     }
 
     @Override
-    public void scan(ServletContext context, ClassLoader classLoader, 
JarScannerCallback callback, Set<String> jarsToIgnore) {
+    public void scan(final ServletContext context, final ClassLoader 
classLoader, final JarScannerCallback callback, final Set<String> jarsToIgnore) 
{
         if 
("FragmentJarScannerCallback".equals(callback.getClass().getSimpleName())) {
-            EmbeddedJarScanner embeddedJarScanner = new EmbeddedJarScanner();
+            final EmbeddedJarScanner embeddedJarScanner = new 
EmbeddedJarScanner();
             embeddedJarScanner.scan(context, classLoader, callback, 
jarsToIgnore);
         } else if 
("TldJarScannerCallback".equals(callback.getClass().getSimpleName())) {
 
             // Scan WEB-INF/lib
-            Set<String> dirList = 
context.getResourcePaths(Constants.WEB_INF_LIB);
+            final Set<String> dirList = 
context.getResourcePaths(Constants.WEB_INF_LIB);
             if (dirList != null) {
-                Iterator<String> it = dirList.iterator();
-                while (it.hasNext()) {
-                    String path = it.next();
+                for (final String path : dirList) {
                     if (path.endsWith(Constants.JAR_EXT) &&
                             !Matcher.matchPath(DEFAULT_JARS_TO_SKIP,
                                     path.substring(path.lastIndexOf('/') + 
1))) {
@@ -92,13 +89,13 @@ public class TomEEJarScanner extends Sta
                         try {
                             // File URLs are always faster to work with so use 
them
                             // if available.
-                            String realPath = context.getRealPath(path);
+                            final String realPath = context.getRealPath(path);
                             if (realPath == null) {
                                 url = context.getResource(path);
                             } else {
                                 url = (new File(realPath)).toURI().toURL();
                             }
-                            process(callback, url);
+                            this.process(callback, url);
                         } catch (IOException e) {
                             log.warn(sm.getString("jarScan.webinflibFail", 
url), e);
                         }
@@ -111,7 +108,7 @@ public class TomEEJarScanner extends Sta
             }
 
             // Scan the classpath
-            if (isScanClassPath()) {
+            if (this.isScanClassPath()) {
                 if (log.isTraceEnabled()) {
                     log.trace(sm.getString("jarScan.classloaderStart"));
                 }
@@ -121,10 +118,10 @@ public class TomEEJarScanner extends Sta
                     final ClassLoader loader = 
Thread.currentThread().getContextClassLoader();
                     final Set<URL> tldFileUrls = TldScanner.scan(loader);
 
-                    final Set<URL> jarUlrs = discardFilePaths(tldFileUrls);
+                    final Set<URL> jarUlrs = 
this.discardFilePaths(tldFileUrls);
 
-                    for (URL url : jarUlrs) {
-                        String jarName = getJarName(url);
+                    for (final URL url : jarUlrs) {
+                        final String jarName = this.getJarName(url);
 
                         // Skip JARs known not to be interesting and JARs
                         // in WEB-INF/lib we have already scanned
@@ -134,7 +131,7 @@ public class TomEEJarScanner extends Sta
                                 
log.debug(sm.getString("jarScan.classloaderJarScan", url));
                             }
                             try {
-                                process(callback, url);
+                                this.process(callback, url);
                             } catch (IOException ioe) {
                                 log.warn(sm.getString(
                                         "jarScan.classloaderFail", url), ioe);
@@ -181,15 +178,15 @@ public class TomEEJarScanner extends Sta
 //        super.scan(context, classLoader, callback, newIgnores);
     }
 
-    private Set<URL> discardFilePaths(Set<URL> tldFileUrls) {
+    private Set<URL> discardFilePaths(final Set<URL> tldFileUrls) {
         final Set<String> jarPaths = new HashSet<String>();
 
-        for (URL tldFileUrl : tldFileUrls) {
+        for (final URL tldFileUrl : tldFileUrls) {
             jarPaths.add(URLs.toFilePath(tldFileUrl));
         }
 
         final Set<URL> jars = new HashSet<URL>();
-        for (String jarPath : jarPaths) {
+        for (final String jarPath : jarPaths) {
             try {
                 final URL url = new File(jarPath).toURI().toURL();
                 jars.add(url);
@@ -204,7 +201,7 @@ public class TomEEJarScanner extends Sta
     * Scan a URL for JARs with the optional extensions to look at all files
     * and all directories.
     */
-    private void process(JarScannerCallback callback, URL url) throws 
IOException {
+    private void process(final JarScannerCallback callback, final URL url) 
throws IOException {
 
         if (log.isTraceEnabled()) {
             log.trace(sm.getString("jarScan.jarUrlStart", url));
@@ -231,13 +228,13 @@ public class TomEEJarScanner extends Sta
 
                         final File f = new File(url.toURI());
 
-                        if (f.isFile() && isScanAllFiles()) {
+                        if (f.isFile() && this.isScanAllFiles()) {
 
                             // Treat this file as a JAR
                             final URL jarURL = new URL("jar:" + urlStr + "!/");
                             callback.scan((JarURLConnection) 
jarURL.openConnection());
 
-                        } else if (f.isDirectory() && isScanAllDirectories()) {
+                        } else if (f.isDirectory() && 
this.isScanAllDirectories()) {
 
                             final File metainf = new File(f.getAbsoluteFile() 
+ File.separator + "META-INF");
 
@@ -247,7 +244,7 @@ public class TomEEJarScanner extends Sta
                         }
                     } catch (URISyntaxException e) {
                         // Wrap the exception and re-throw
-                        IOException ioe = new IOException();
+                        final IOException ioe = new IOException();
                         ioe.initCause(e);
                         throw ioe;
                     }
@@ -260,17 +257,17 @@ public class TomEEJarScanner extends Sta
     /*
      * Extract the JAR name, if present, from a URL
      */
-    private String getJarName(URL url) {
+    private String getJarName(final URL url) {
 
         String name = null;
 
-        String path = url.getPath();
-        int end = path.indexOf(Constants.JAR_EXT);
+        final String path = url.getPath();
+        final int end = path.indexOf(Constants.JAR_EXT);
         if (end != -1) {
-            int start = path.lastIndexOf('/', end);
+            final int start = path.lastIndexOf('/', end);
             name = path.substring(start + 1, end + 4);
-        } else if (isScanAllDirectories()) {
-            int start = path.lastIndexOf('/');
+        } else if (this.isScanAllDirectories()) {
+            final int start = path.lastIndexOf('/');
             name = path.substring(start + 1);
         }
 


Reply via email to