killbill-uncached

Details

diff --git a/catalog/src/main/java/com/ning/billing/catalog/Catalog.java b/catalog/src/main/java/com/ning/billing/catalog/Catalog.java
index c66b411..d96aee8 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/Catalog.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/Catalog.java
@@ -53,7 +53,7 @@ public class Catalog extends ValidatingConfig implements ICatalog {
 	@XmlElement(required=true)
 	private String catalogName;
 
-	private URL catalogURL;
+	private String catalogURL;
 
 	@XmlElementWrapper(name="currencies", required=true)
 	@XmlElement(name="currency", required=true)
@@ -274,11 +274,11 @@ public class Catalog extends ValidatingConfig implements ICatalog {
 		this.effectiveDate = effectiveDate;
 	}
 
-	public URL getCatalogURL() {
+	public String getCatalogURL() {
 		return catalogURL;
 	}
 
-	public void setCatalogURL(URL catalogURL) {
+	public void setCatalogURL(String catalogURL) {
 		this.catalogURL = catalogURL;
 	}
 
diff --git a/catalog/src/main/java/com/ning/billing/catalog/io/XMLReader.java b/catalog/src/main/java/com/ning/billing/catalog/io/XMLReader.java
index 2a82a71..d36f4c4 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/io/XMLReader.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/io/XMLReader.java
@@ -17,6 +17,7 @@
 package com.ning.billing.catalog.io;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URL;
 
 import javax.xml.XMLConstants;
@@ -39,26 +40,44 @@ public class XMLReader {
 	public static Logger log = LoggerFactory.getLogger(XMLReader.class);
 
     public static Catalog getCatalogFromName(URL url) throws SAXException, InvalidConfigException, JAXBException, IOException, TransformerException {
-        JAXBContext context =JAXBContext.newInstance(Catalog.class);
-
-        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI );
-        Unmarshaller um = context.createUnmarshaller();
-
-        Schema schema = factory.newSchema(XMLSchemaGenerator.xmlSchema());
-        um.setSchema(schema);
-        
-        Object o = um.unmarshal(url);
-
+        Object o = unmarshaller().unmarshal(url);
         if(o instanceof Catalog) {
             Catalog c = (Catalog)o;
-            c.setCatalogURL(url);
-            c.initialize(c);
-            ValidationErrors errs = c.validate();
-            System.out.println("Errors: " + errs.size() + " for " + url);
+            c.setCatalogURL(url.toString());
             return (Catalog) o;
         } else {
             return null;
         }
     }
+    
+    public static Catalog getCatalogFromName(InputStream stream) throws SAXException, InvalidConfigException, JAXBException, IOException, TransformerException {
+        Object o = unmarshaller().unmarshal(stream);
+        if(o instanceof Catalog) {
+            Catalog c = (Catalog)o;
+            c.setCatalogURL("embedded catalog");
+            return (Catalog) o;
+        } else {
+            return null;
+        }
+    }
+
+    
+    public static void validate(Catalog c) {
+            c.initialize(c);
+            ValidationErrors errs = c.validate();
+            System.out.println("Errors: " + errs.size() + " for " + c.getCatalogURL());       
+    }
+    
+    public static Unmarshaller unmarshaller() throws JAXBException, SAXException, IOException, TransformerException {
+    	 JAXBContext context =JAXBContext.newInstance(Catalog.class);
+
+         SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI );
+         Unmarshaller um = context.createUnmarshaller();
+
+         Schema schema = factory.newSchema(XMLSchemaGenerator.xmlSchema());
+         um.setSchema(schema);
+         
+         return um;
+    }
 	
 }
diff --git a/catalog/src/main/java/com/ning/billing/catalog/ValidatingConfig.java b/catalog/src/main/java/com/ning/billing/catalog/ValidatingConfig.java
index 532a063..5a8c3e4 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/ValidatingConfig.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/ValidatingConfig.java
@@ -27,7 +27,7 @@ public abstract class ValidatingConfig {
 	public static class ValidationErrors extends ArrayList<ValidationError>{
 		private static final long serialVersionUID = 1L;
 
-		public void add(String description, URL catalogURL,
+		public void add(String description, String catalogURL,
 				Class<? extends ValidatingConfig> objectType, String objectName) {
 			add(new ValidationError(description, catalogURL, objectType, objectName));
 			
diff --git a/catalog/src/main/java/com/ning/billing/catalog/ValidationError.java b/catalog/src/main/java/com/ning/billing/catalog/ValidationError.java
index 6498307..084d5bd 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/ValidationError.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/ValidationError.java
@@ -19,10 +19,10 @@ import java.net.URL;
 
 public class ValidationError {
 	private final String description;
-	private final URL catalogURL;
+	private final String catalogURL;
 	private final Class<? extends ValidatingConfig> objectType;
 	private final String objectName;
-	public ValidationError(String description, URL catalogURL,
+	public ValidationError(String description, String catalogURL,
 			Class<? extends ValidatingConfig> objectType, String objectName) {
 		super();
 		this.description = description;
@@ -33,7 +33,7 @@ public class ValidationError {
 	public String getDescription() {
 		return description;
 	}
-	public URL getCatalogURL() {
+	public String getCatalogURL() {
 		return catalogURL;
 	}
 	public Class<? extends ValidatingConfig> getObjectType() {