diff --git a/entitlement/src/test/resources/entitlement.properties b/entitlement/src/test/resources/entitlement.properties
index fb7a7c5..d149d78 100644
--- a/entitlement/src/test/resources/entitlement.properties
+++ b/entitlement/src/test/resources/entitlement.properties
@@ -1,4 +1,4 @@
-killbill.catalog.uri=src/test/resources/testInput.xml
+killbill.catalog.uri=file:src/test/resources/testInput.xml
killbill.entitlement.dao.claim.time=60000
killbill.entitlement.dao.ready.max=1
killbill.entitlement.engine.notifications.sleep=500
diff --git a/util/src/main/java/com/ning/billing/util/config/XMLLoader.java b/util/src/main/java/com/ning/billing/util/config/XMLLoader.java
index 707d00c..e465ee6 100644
--- a/util/src/main/java/com/ning/billing/util/config/XMLLoader.java
+++ b/util/src/main/java/com/ning/billing/util/config/XMLLoader.java
@@ -40,27 +40,29 @@ import com.ning.billing.catalog.api.InvalidConfigException;
public class XMLLoader {
private static final String URI_SCHEME_FOR_CLASSPATH = "jar";
+ private static final String URI_SCHEME_FOR_FILE = "file";
public static Logger log = LoggerFactory.getLogger(XMLLoader.class);
public static <T extends ValidatingConfig<T>> T getObjectFromProperty(String property, Class<T> objectType) throws Exception {
if (property == null) {
return null;
}
- //TODO: fix this! - yuk!
- URI uri = (property.startsWith(URI_SCHEME_FOR_CLASSPATH)) ?
- new URI(property) :
- new File("src/test/resources/testInput.xml").toURI();
- return getObjectFromURI(uri, objectType);
+ log.info("Initializing an object of class " + objectType.getName() + " from xml file at: " + property);
+
+ return getObjectFromURI(new URI(property), objectType);
}
-
- public static <T extends ValidatingConfig<T>> T getObjectFromURI(URI uri, Class<T> objectType) throws SAXException, InvalidConfigException, JAXBException, IOException, TransformerException, URISyntaxException {
+ public static <T extends ValidatingConfig<T>> T getObjectFromURI(final URI uri, final Class<T> objectType) throws SAXException, InvalidConfigException, JAXBException, IOException, TransformerException, URISyntaxException {
String scheme = uri.getScheme();
+ URI uriToCall = uri;
if (scheme.equals(URI_SCHEME_FOR_CLASSPATH)) {
InputStream resourceStream = XMLLoader.class.getResourceAsStream(uri.getPath());
return getObjectFromStream(uri, resourceStream, objectType);
+ } else if (scheme.equals(URI_SCHEME_FOR_FILE) &&
+ !uri.getSchemeSpecificPart().startsWith("/")) { // interpret URIs of this form as relative path uris
+ uriToCall = new File("src/test/resources/testInput.xml").toURI();
}
- return getObjectFromURL(uri.toURL(), objectType);
+ return getObjectFromURL(uriToCall.toURL(), objectType);
}
public static <T extends ValidatingConfig<T>> T getObjectFromURL(URL url, Class<T> clazz) throws SAXException, InvalidConfigException, JAXBException, IOException, TransformerException, URISyntaxException {
@@ -93,7 +95,7 @@ public class XMLLoader {
public static <T extends ValidatingConfig<T>> void validate(URI uri, T c) {
c.initialize(c);
ValidationErrors errs = c.validate(c, new ValidationErrors());
- System.out.println("Errors: " + errs.size() + " for " + uri);
+ log.info("Errors: " + errs.size() + " for " + uri);
}
public static Unmarshaller unmarshaller(Class<?> clazz) throws JAXBException, SAXException, IOException, TransformerException {