killbill-memoizeit

Changes

beatrix/pom.xml 6(+6 -0)

entitlement/src/test/resources/catalogTest.xml 1003(+0 -1003)

junction/src/test/resources/catalogTest.xml 1003(+0 -1003)

server/pom.xml 6(+6 -0)

server/src/test/resources/catalogTest.xml 1003(+0 -1003)

subscription/src/test/resources/catalogTest.xml 1003(+0 -1003)

Details

beatrix/pom.xml 6(+6 -0)

diff --git a/beatrix/pom.xml b/beatrix/pom.xml
index 2eaacdd..bb704d7 100644
--- a/beatrix/pom.xml
+++ b/beatrix/pom.xml
@@ -88,6 +88,12 @@
         </dependency>
         <dependency>
             <groupId>org.kill-bill.billing</groupId>
+            <artifactId>killbill-catalog</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.kill-bill.billing</groupId>
             <artifactId>killbill-currency</artifactId>
         </dependency>
         <dependency>
diff --git a/beatrix/src/test/resources/beatrix.properties b/beatrix/src/test/resources/beatrix.properties
index 90f9f65..acc60b4 100644
--- a/beatrix/src/test/resources/beatrix.properties
+++ b/beatrix/src/test/resources/beatrix.properties
@@ -1,3 +1,3 @@
-org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
+org.killbill.catalog.uri=catalogTest.xml
 org.killbill.payment.retry.days=8,8,8,8,8,8,8,8
 org.killbill.osgi.bundle.install.dir=/var/tmp/beatrix-bundles
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/io/TestXMLReader.java b/catalog/src/test/java/org/killbill/billing/catalog/io/TestXMLReader.java
index 3987355..64cccf7 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/io/TestXMLReader.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/io/TestXMLReader.java
@@ -47,6 +47,9 @@ public class TestXMLReader extends CatalogTestSuiteNoDB {
             XMLLoader.getObjectFromString(Resources.getResource("SpyCarAdvanced.xml").toExternalForm(), StandaloneCatalog.class);
             XMLLoader.getObjectFromString(Resources.getResource("WeaponsHire.xml").toExternalForm(), StandaloneCatalog.class);
             XMLLoader.getObjectFromString(Resources.getResource("WeaponsHireSmall.xml").toExternalForm(), StandaloneCatalog.class);
+
+            XMLLoader.getObjectFromString(Resources.getResource("catalogTest.xml").toExternalForm(), StandaloneCatalog.class);
+
             XMLLoader.getObjectFromString(Resources.getResource("UsageExperimental.xml").toExternalForm(), StandaloneCatalog.class);
         } catch (Exception e) {
             Assert.fail(e.toString());
diff --git a/entitlement/src/test/resources/entitlement.properties b/entitlement/src/test/resources/entitlement.properties
index 6fc7e6d..46a797b 100644
--- a/entitlement/src/test/resources/entitlement.properties
+++ b/entitlement/src/test/resources/entitlement.properties
@@ -1 +1 @@
-org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
+org.killbill.catalog.uri=catalogTest.xml
diff --git a/junction/src/test/resources/junction.properties b/junction/src/test/resources/junction.properties
index 6fc7e6d..46a797b 100644
--- a/junction/src/test/resources/junction.properties
+++ b/junction/src/test/resources/junction.properties
@@ -1 +1 @@
-org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
+org.killbill.catalog.uri=catalogTest.xml

server/pom.xml 6(+6 -0)

diff --git a/server/pom.xml b/server/pom.xml
index 7828183..74c6e91 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -190,6 +190,12 @@
         </dependency>
         <dependency>
             <groupId>org.kill-bill.billing</groupId>
+            <artifactId>killbill-catalog</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.kill-bill.billing</groupId>
             <artifactId>killbill-client-java</artifactId>
         </dependency>
         <dependency>
diff --git a/server/src/test/resources/killbill.properties b/server/src/test/resources/killbill.properties
index 1949e5a..1b1e335 100644
--- a/server/src/test/resources/killbill.properties
+++ b/server/src/test/resources/killbill.properties
@@ -14,7 +14,7 @@
 # under the License.
 #
 
-org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
+org.killbill.catalog.uri=catalogTest.xml
 org.killbill.overdue.uri=overdue.xml
 
 org.killbill.payment.retry.days=8,8,8
diff --git a/subscription/src/test/resources/subscription.properties b/subscription/src/test/resources/subscription.properties
index 6fc7e6d..46a797b 100644
--- a/subscription/src/test/resources/subscription.properties
+++ b/subscription/src/test/resources/subscription.properties
@@ -1 +1 @@
-org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
+org.killbill.catalog.uri=catalogTest.xml
diff --git a/util/src/main/java/org/killbill/billing/util/config/catalog/UriAccessor.java b/util/src/main/java/org/killbill/billing/util/config/catalog/UriAccessor.java
index 5b200a3..3b74562 100644
--- a/util/src/main/java/org/killbill/billing/util/config/catalog/UriAccessor.java
+++ b/util/src/main/java/org/killbill/billing/util/config/catalog/UriAccessor.java
@@ -23,11 +23,14 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.Scanner;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
 
 import com.google.common.io.Resources;
 
 public class UriAccessor {
 
+    private static final String URI_SCHEME_FOR_ARCHIVE_FILE = "jar:file";
     private static final String URI_SCHEME_FOR_CLASSPATH = "jar";
     private static final String URI_SCHEME_FOR_FILE = "file";
 
@@ -42,7 +45,11 @@ public class UriAccessor {
         if (scheme == null) {
             uri = new URI(Resources.getResource(uri.toString()).toExternalForm());
         } else if (scheme.equals(URI_SCHEME_FOR_CLASSPATH)) {
-            return UriAccessor.class.getResourceAsStream(uri.getPath());
+            if (uri.toString().startsWith(URI_SCHEME_FOR_ARCHIVE_FILE)) {
+                return getInputStreamFromJarFile(uri.toString());
+            } else {
+                return UriAccessor.class.getResourceAsStream(uri.getPath());
+            }
         } else if (scheme.equals(URI_SCHEME_FOR_FILE) &&
                    !uri.getSchemeSpecificPart().startsWith("/")) { // interpret URIs of this form as relative path uris
             uri = new File(uri.getSchemeSpecificPart()).toURI();
@@ -51,6 +58,23 @@ public class UriAccessor {
         return url.openConnection().getInputStream();
     }
 
+    /**
+     *
+     * @param classPathFile of the form jar:file:/path!/resource
+     * @return
+     * @throws IOException if fail to extract InputStream
+     */
+    private static InputStream getInputStreamFromJarFile(final String classPathFile) throws IOException {
+
+        final String[] partsPathAndResource = classPathFile.split("!");
+        final String resourceInJar = partsPathAndResource[1].substring(1);
+
+        final String[] partsColumns = partsPathAndResource[0].split(":");
+        final String jarFileName = partsColumns[2];
+
+        return new ZipFile(new File(jarFileName)).getInputStream(new ZipEntry(resourceInJar));
+    }
+
     public static String accessUriAsString(final String uri) throws IOException, URISyntaxException {
         return accessUriAsString(new URI(uri));
     }