From ad37446a7b3c241686f6cd3e7af5fc3414fda7dd Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 4 Jun 2015 16:35:34 +0000 Subject: [PATCH] Allow PropertiesUtil to read from jar files. PropertiesUtil has code for reading from jar files, but the findConfigFile method will prevent it from ever returning a file in a jar on the classpath since it always wants to have a "file:" URL and use the File class. This commit moves the jar file loading attempt from a catch block to an else clause, executed if a config file:// URL could not be found. --- utils/src/com/cloud/utils/PropertiesUtil.java | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/utils/src/com/cloud/utils/PropertiesUtil.java b/utils/src/com/cloud/utils/PropertiesUtil.java index fe5a366033ea..4cb89f7531d6 100644 --- a/utils/src/com/cloud/utils/PropertiesUtil.java +++ b/utils/src/com/cloud/utils/PropertiesUtil.java @@ -21,7 +21,6 @@ import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -44,6 +43,7 @@ public class PropertiesUtil { public static File findConfigFile(String path) { ClassLoader cl = PropertiesUtil.class.getClassLoader(); URL url = cl.getResource(path); + if (url != null && "file".equals(url.getProtocol())) { return new File(url.getFile()); } @@ -124,6 +124,15 @@ public static InputStream openStreamFromURL(String path) { return null; } + public static void loadFromJar(Properties properties, String configFile) throws IOException { + InputStream stream = PropertiesUtil.openStreamFromURL(configFile); + if (stream != null) { + properties.load(stream); + } else { + s_logger.error("Unable to find properties file: " + configFile); + } + } + // Returns key=value pairs by parsing a commands.properties/config file // with syntax; key=cmd;value (with this syntax cmd is stripped) and key=value public static Map processConfigFile(String[] configFiles) { @@ -134,22 +143,18 @@ public static Map processConfigFile(String[] configFiles) { if (commandsFile != null) { try { loadFromFile(preProcessedCommands, commandsFile); - } catch (FileNotFoundException fnfex) { - // in case of a file within a jar in classpath, try to open stream using url - InputStream stream = PropertiesUtil.openStreamFromURL(configFile); - if (stream != null) { - try { - preProcessedCommands.load(stream); - } catch (IOException e) { - s_logger.error("IO Exception, unable to find properties file:", fnfex); - } - } else { - s_logger.error("Unable to find properites file", fnfex); - } } catch (IOException ioe) { s_logger.error("IO Exception loading properties file", ioe); } } + else { + // in case of a file within a jar in classpath, try to open stream using url + try { + loadFromJar(preProcessedCommands, configFile); + } catch (IOException e) { + s_logger.error("IO Exception loading properties file from jar", e); + } + } } for (Object key : preProcessedCommands.keySet()) { @@ -158,6 +163,7 @@ public static Map processConfigFile(String[] configFiles) { String value = preProcessedCommand.substring(splitIndex + 1); configMap.put((String)key, value); } + return configMap; }