You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2013/06/05 12:38:07 UTC
svn commit: r1489801 -
/ofbiz/trunk/framework/base/src/org/ofbiz/base/config/ResourceLoader.java
Author: adrianc
Date: Wed Jun 5 10:38:06 2013
New Revision: 1489801
URL: http://svn.apache.org/r1489801
Log:
More work on ResourceLoader.java:
1. ResourceLoader instances are now thread-safe, though the static methods that cache DOM objects are not.
2. Code cleanup and better XML validation.
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/config/ResourceLoader.java
Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/config/ResourceLoader.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/config/ResourceLoader.java?rev=1489801&r1=1489800&r2=1489801&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/config/ResourceLoader.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/config/ResourceLoader.java Wed Jun 5 10:38:06 2013
@@ -23,7 +23,6 @@ import java.net.URL;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilURL;
-import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilXml;
import org.ofbiz.base.util.cache.UtilCache;
import org.w3c.dom.Document;
@@ -62,18 +61,21 @@ public abstract class ResourceLoader {
Element rootElement = null;
URL xmlUrl = UtilURL.fromResource(xmlFilename);
if (xmlUrl == null) {
- throw new GenericConfigException("ERROR: could not find the [" + xmlFilename + "] XML file on the classpath");
+ throw new GenericConfigException("Could not find the " + xmlFilename + " file");
}
try {
rootElement = UtilXml.readXmlDocument(xmlUrl, true, true).getDocumentElement();
} catch (Exception e) {
- throw new GenericConfigException("Error reading " + xmlFilename + ": ", e);
+ throw new GenericConfigException("Exception thrown while reading " + xmlFilename + ": ", e);
}
Element loaderElement = UtilXml.firstChildElement(rootElement, "resource-loader", "name", loaderName);
- loader = makeLoader(loaderElement);
- if (loader != null) {
- loader = loaderCache.putIfAbsentAndGet(cacheKey, loader);
+ if (loaderElement == null) {
+ throw new GenericConfigException("The " + xmlFilename + " file is missing the <resource-loader> element with the name " + loaderName);
+ }
+ if (loaderElement.getAttribute("class").isEmpty()) {
+ throw new GenericConfigException("The " + xmlFilename + " file <resource-loader> element with the name " + loaderName + " is missing the class attribute");
}
+ loader = loaderCache.putIfAbsentAndGet(cacheKey, makeLoader(loaderElement));
}
return loader;
}
@@ -125,52 +127,29 @@ public abstract class ResourceLoader {
return document;
}
- public static ResourceLoader makeLoader(Element loaderElement) throws GenericConfigException {
- if (loaderElement == null)
- return null;
-
+ private static ResourceLoader makeLoader(Element loaderElement) throws GenericConfigException {
String loaderName = loaderElement.getAttribute("name");
String className = loaderElement.getAttribute("class");
ResourceLoader loader = null;
-
try {
Class<?> lClass = null;
-
- if (UtilValidate.isNotEmpty(className)) {
- try {
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- lClass = classLoader.loadClass(className);
- } catch (ClassNotFoundException e) {
- throw new GenericConfigException("Error loading Resource Loader class \"" + className + "\"", e);
- }
- }
-
- try {
- loader = (ResourceLoader) lClass.newInstance();
- } catch (IllegalAccessException e) {
- throw new GenericConfigException("Error loading Resource Loader class \"" + className + "\"", e);
- } catch (InstantiationException e) {
- throw new GenericConfigException("Error loading Resource Loader class \"" + className + "\"", e);
- }
- } catch (SecurityException e) {
- throw new GenericConfigException("Error loading Resource Loader class \"" + className + "\"", e);
- }
-
- if (loader != null) {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ lClass = classLoader.loadClass(className);
+ loader = (ResourceLoader) lClass.newInstance();
loader.init(loaderName, loaderElement.getAttribute("prefix"), loaderElement.getAttribute("prepend-env"));
+ return loader;
+ } catch (Exception e) {
+ throw new GenericConfigException("Exception thrown while loading ResourceLoader class \"" + className + "\" ", e);
}
-
- return loader;
}
- // FIXME: This class is not thread-safe.
- protected String name;
- protected String prefix;
- protected String envName;
+ private String name;
+ private String prefix;
+ private String envName;
protected ResourceLoader() {}
- public void init(String name, String prefix, String envName) {
+ private void init(String name, String prefix, String envName) {
this.name = name;
this.prefix = prefix;
this.envName = envName;
@@ -183,8 +162,7 @@ public abstract class ResourceLoader {
*/
public String fullLocation(String location) {
StringBuilder buf = new StringBuilder();
-
- if (UtilValidate.isNotEmpty(envName)) {
+ if (!envName.isEmpty()) {
String propValue = System.getProperty(envName);
if (propValue == null) {
String errMsg = "The Java environment (-Dxxx=yyy) variable with name " + envName + " is not set, cannot load resource.";
@@ -193,9 +171,7 @@ public abstract class ResourceLoader {
}
buf.append(propValue);
}
- if (UtilValidate.isNotEmpty(prefix)) {
- buf.append(prefix);
- }
+ buf.append(prefix);
buf.append(location);
return buf.toString();
}