killbill-uncached

Modified schema logic so that schema is constructed on the fly

11/2/2011 7:00:12 PM

Details

catalog/pom.xml 2(+1 -1)

diff --git a/catalog/pom.xml b/catalog/pom.xml
index a327ddd..cd42fb4 100644
--- a/catalog/pom.xml
+++ b/catalog/pom.xml
@@ -49,7 +49,7 @@
                         <configuration>
                             <mainClass>com.ning.billing.catalog.io.XMLSchemaGenerator</mainClass>
                             <arguments>
-                                <argument>${project.basedir}/src/main/resources</argument>
+                                <argument>${project.basedir}/src/test/resources</argument>
                             </arguments>
                         </configuration>
                     </execution>
diff --git a/catalog/src/main/java/com/ning/billing/catalog/Case.java b/catalog/src/main/java/com/ning/billing/catalog/Case.java
index a26c4ba..2d92df0 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/Case.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/Case.java
@@ -20,9 +20,6 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlIDREF;
 
 import com.ning.billing.catalog.api.BillingPeriod;
-import com.ning.billing.catalog.api.PhaseType;
-import com.ning.billing.catalog.api.PlanAlignmentChange;
-import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PlanSpecifier;
 import com.ning.billing.catalog.api.ProductCategory;
 
diff --git a/catalog/src/main/java/com/ning/billing/catalog/CaseCreateAlignment.java b/catalog/src/main/java/com/ning/billing/catalog/CaseCreateAlignment.java
index 3a1ba1f..69a64ca 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/CaseCreateAlignment.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/CaseCreateAlignment.java
@@ -19,7 +19,6 @@ package com.ning.billing.catalog;
 import javax.xml.bind.annotation.XmlElement;
 
 import com.ning.billing.catalog.api.BillingPeriod;
-import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.PlanAlignmentCreate;
 import com.ning.billing.catalog.api.ProductCategory;
 
diff --git a/catalog/src/main/java/com/ning/billing/catalog/io/ICatalogLoader.java b/catalog/src/main/java/com/ning/billing/catalog/io/ICatalogLoader.java
index 426f7c6..f9163e2 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/io/ICatalogLoader.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/io/ICatalogLoader.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.net.URL;
 
 import javax.xml.bind.JAXBException;
+import javax.xml.transform.TransformerException;
 
 import org.xml.sax.SAXException;
 
@@ -29,6 +30,6 @@ import com.ning.billing.catalog.api.InvalidConfigException;
 public interface ICatalogLoader {
 
 	public abstract VersionedCatalog load(URL url) throws IOException,
-			SAXException, InvalidConfigException, JAXBException;
+			SAXException, InvalidConfigException, JAXBException, TransformerException;
 
 }
\ No newline at end of file
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 59bffa3..fcda9d7 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
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Scanner;
 
 import javax.xml.bind.JAXBException;
+import javax.xml.transform.TransformerException;
 
 import org.xml.sax.SAXException;
 
@@ -43,7 +44,7 @@ public class VersionedCatalogLoader implements ICatalogLoader {
 	 * @see com.ning.billing.catalog.io.ICatalogLoader#load(java.net.URL)
 	 */
 	@Override
-	public  VersionedCatalog load(URL url) throws IOException, SAXException, InvalidConfigException, JAXBException {
+	public  VersionedCatalog load(URL url) throws IOException, SAXException, InvalidConfigException, JAXBException, TransformerException {
 		String directoryContents = pullContentsFrom(url);
 		List<URL> xmlURLs = findXmlReferences(directoryContents, url);
 		VersionedCatalog result = new VersionedCatalog();
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 c0e5b2e..2a82a71 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
@@ -16,14 +16,14 @@
 
 package com.ning.billing.catalog.io;
 
-import java.io.InputStream;
+import java.io.IOException;
 import java.net.URL;
 
 import javax.xml.XMLConstants;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.stream.StreamSource;
+import javax.xml.transform.TransformerException;
 import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
 
@@ -38,20 +38,14 @@ import com.ning.billing.catalog.api.InvalidConfigException;
 public class XMLReader {
 	public static Logger log = LoggerFactory.getLogger(XMLReader.class);
 
-    public static Catalog getCatalogFromName(URL url) throws SAXException, InvalidConfigException, JAXBException {
+    public static Catalog getCatalogFromName(URL url) throws SAXException, InvalidConfigException, JAXBException, IOException, TransformerException {
         JAXBContext context =JAXBContext.newInstance(Catalog.class);
 
-        InputStream resourceStream = XMLReader.class.getResourceAsStream("/CatalogSchema.xsd");
         SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI );
         Unmarshaller um = context.createUnmarshaller();
-        
-        if(resourceStream == null) {
-        	log.error("Can't find XML Schema resource to validate content - if you are seeing " +
-        			"this as part of the release build process its OK to ignore, otherwie it needs attention");
-        } else {
-        	Schema schema = factory.newSchema(new StreamSource(resourceStream));
-            um.setSchema(schema);
-       }
+
+        Schema schema = factory.newSchema(XMLSchemaGenerator.xmlSchema());
+        um.setSchema(schema);
         
         Object o = um.unmarshal(url);
 
diff --git a/catalog/src/main/java/com/ning/billing/catalog/io/XMLSchemaGenerator.java b/catalog/src/main/java/com/ning/billing/catalog/io/XMLSchemaGenerator.java
index 3ad88fc..db61c1b 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/io/XMLSchemaGenerator.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/io/XMLSchemaGenerator.java
@@ -16,6 +16,8 @@
 
 package com.ning.billing.catalog.io;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -33,12 +35,14 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
 
 import org.w3c.dom.Document;
 
 import com.ning.billing.catalog.Catalog;
 
 public class XMLSchemaGenerator {
+	final private static  int MAX_SCHEMA_SIZE_IN_BYTES = 100000;
 
 	//Note: this main method is called by the maven build to generate the schema for the jar
 	public static void main(String[] args) throws IOException, TransformerException, JAXBException {
@@ -51,6 +55,13 @@ public class XMLSchemaGenerator {
 		pojoToXSD(context, s);
 	}
 
+	public static StreamSource xmlSchema() throws IOException, TransformerException, JAXBException {
+		ByteArrayOutputStream output = new ByteArrayOutputStream(MAX_SCHEMA_SIZE_IN_BYTES);
+		JAXBContext context =JAXBContext.newInstance(Catalog.class);
+		pojoToXSD(context, output);
+		StreamSource source = new StreamSource(new ByteArrayInputStream(output.toByteArray()));
+		return source;
+	}
 
 	public static void pojoToXSD(JAXBContext context, OutputStream out)
 		    throws IOException, TransformerException
diff --git a/catalog/src/main/java/com/ning/billing/catalog/Plan.java b/catalog/src/main/java/com/ning/billing/catalog/Plan.java
index a220cf7..bfdd093 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/Plan.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/Plan.java
@@ -27,7 +27,6 @@ import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlID;
 import javax.xml.bind.annotation.XmlIDREF;
 
-import com.ning.billing.catalog.api.BillingAlignment;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.IPlan;
 import com.ning.billing.catalog.api.IPlanPhase;
diff --git a/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java b/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java
index 46188af..e858b82 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java
@@ -18,7 +18,6 @@ package com.ning.billing.catalog.io;
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertTrue;
 
-import java.io.File;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -26,12 +25,13 @@ import java.util.Iterator;
 import java.util.List;
 
 import javax.xml.bind.JAXBException;
+import javax.xml.transform.TransformerException;
 
-import com.google.common.io.Resources;
 import org.joda.time.DateTime;
 import org.testng.annotations.Test;
 import org.xml.sax.SAXException;
 
+import com.google.common.io.Resources;
 import com.ning.billing.catalog.Catalog;
 import com.ning.billing.catalog.VersionedCatalog;
 import com.ning.billing.catalog.api.InvalidConfigException;
@@ -126,7 +126,7 @@ public class TestVersionedCatalogLoader {
 	}
 	
 	@Test(enabled=true)
-	public void testLoad() throws MalformedURLException, IOException, SAXException, InvalidConfigException, JAXBException {
+	public void testLoad() throws MalformedURLException, IOException, SAXException, InvalidConfigException, JAXBException, TransformerException {
 		VersionedCatalog c = loader.load(Resources.getResource("versionedCatalog"));
 		assertEquals(4, c.size());
 		Iterator<Catalog> it = c.iterator();
diff --git a/catalog/src/test/java/com/ning/billing/catalog/io/TestXMLReader.java b/catalog/src/test/java/com/ning/billing/catalog/io/TestXMLReader.java
index 97dbc3b..1d08c31 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/io/TestXMLReader.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/io/TestXMLReader.java
@@ -16,16 +16,15 @@
 
 package com.ning.billing.catalog.io;
 
-import java.io.File;
 import java.io.IOException;
 
 import javax.xml.bind.JAXBException;
 import javax.xml.transform.TransformerException;
 
-import com.google.common.io.Resources;
 import org.testng.annotations.Test;
 import org.xml.sax.SAXException;
 
+import com.google.common.io.Resources;
 import com.ning.billing.catalog.api.InvalidConfigException;
 
 public class TestXMLReader {
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestCaseChange.java b/catalog/src/test/java/com/ning/billing/catalog/TestCaseChange.java
index ed2972d..ed48ccf 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestCaseChange.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestCaseChange.java
@@ -25,8 +25,8 @@ import org.testng.annotations.Test;
 
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PhaseType;
-import com.ning.billing.catalog.api.PlanPhaseSpecifier; 
-import com.ning.billing.catalog.api.PlanSpecifier; 
+import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.PlanSpecifier;
 import com.ning.billing.catalog.api.ProductCategory;
 
 public class TestCaseChange {
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java b/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java
index 8a7b07f..ee4d094 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java
@@ -16,20 +16,19 @@
 package com.ning.billing.catalog;
 
 import static org.testng.AssertJUnit.assertEquals;
-import java.io.File;
+
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.util.Date;
 
 import javax.xml.bind.JAXBException;
+import javax.xml.transform.TransformerException;
 
-import com.google.common.io.Resources;
 import org.joda.time.DateTime;
 import org.testng.annotations.Test;
 import org.xml.sax.SAXException;
 
-import com.ning.billing.catalog.Catalog;
-import com.ning.billing.catalog.VersionedCatalog;
+import com.google.common.io.Resources;
 import com.ning.billing.catalog.api.InvalidConfigException;
 import com.ning.billing.catalog.io.ICatalogLoader;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
@@ -38,14 +37,14 @@ public class TestVersionedCatalog {
 	private final ICatalogLoader loader = new VersionedCatalogLoader();
 
 	@Test(enabled=true)
-	public void testAddCatalog() throws MalformedURLException, IOException, SAXException, InvalidConfigException, JAXBException {
+	public void testAddCatalog() throws MalformedURLException, IOException, SAXException, InvalidConfigException, JAXBException, TransformerException {
 		VersionedCatalog vc = loader.load(Resources.getResource("versionedCatalog"));
 		vc.add(new Catalog(new Date()));
 		assertEquals(5, vc.size());
 	}
 	
 	@Test(enabled=true)
-	public void testApplyEffectiveDate() throws MalformedURLException, IOException, SAXException, InvalidConfigException, JAXBException {
+	public void testApplyEffectiveDate() throws MalformedURLException, IOException, SAXException, InvalidConfigException, JAXBException, TransformerException {
 		VersionedCatalog vc = loader.load(Resources.getResource("versionedCatalog"));
 		Date d = new Date(1L);
 		vc.configureEffectiveDate(d);