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);
}