diff --git a/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java b/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
index 95f5590..4bc57e3 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
@@ -22,6 +22,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import com.google.common.io.Resources;
import com.google.inject.Inject;
import com.ning.billing.catalog.StandaloneCatalog;
import com.ning.billing.catalog.VersionedCatalog;
@@ -48,10 +49,23 @@ public class VersionedCatalogLoader implements ICatalogLoader {
try {
List<URI> xmlURIs = null;
- if (uriString.endsWith(XML_EXTENSION)) { //assume its an xml file
+ if (uriString.endsWith(XML_EXTENSION)) { // Assume its an xml file
xmlURIs = new ArrayList<URI>();
- xmlURIs.add(new URI(uriString));
- } else { //assume its a directory
+ URI uri = new URI(uriString);
+
+ // Try to expand the full path, if possible
+ final String schemeSpecificPart = uri.getSchemeSpecificPart();
+ if (schemeSpecificPart != null) {
+ final String[] split = schemeSpecificPart.split("/");
+ final String fileName = split[split.length - 1];
+ try {
+ uri = new URI(Resources.getResource(fileName).toExternalForm());
+ } catch (IllegalArgumentException ignored) {
+ }
+ }
+
+ xmlURIs.add(uri);
+ } else { // Assume its a directory
final String directoryContents = UriAccessor.accessUriAsString(uriString);
xmlURIs = findXmlReferences(directoryContents, new URL(uriString));
}
@@ -61,6 +75,7 @@ public class VersionedCatalogLoader implements ICatalogLoader {
final StandaloneCatalog catalog = XMLLoader.getObjectFromUri(u, StandaloneCatalog.class);
result.add(catalog);
}
+
return result;
} catch (Exception e) {
throw new ServiceException("Problem encountered loading catalog", e);