diff --git a/pom.xml b/pom.xml
index 6d8b628..e0b69ef 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,9 +63,9 @@
- com.rackspace.papi.components
- translation
- 2.9.0
+ org.springframework
+ spring-web
+ 3.1.1.RELEASE
diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/AbstractPipeline.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/AbstractPipeline.java
index 9ebb3d4..63cea48 100644
--- a/src/main/java/com/rackspace/cloud/api/docs/pipeline/AbstractPipeline.java
+++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/AbstractPipeline.java
@@ -1,14 +1,15 @@
package com.rackspace.cloud.api.docs.pipeline;
-import com.rackspace.papi.components.translation.resolvers.InputStreamUriParameterResolver;
-
+import com.rackspace.cloud.api.docs.pipeline.resolvers.InputStreamUriParameterResolver;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
public abstract class AbstractPipeline implements Pipeline {
- private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(AbstractPipeline.class);
+ private static final Logger LOG = Logger.getLogger(AbstractPipeline.class.getName());
private final InputStreamUriParameterResolver resolver;
public AbstractPipeline(InputStreamUriParameterResolver resolver) {
@@ -57,7 +58,7 @@ public abstract class AbstractPipeline implements Pipeline {
try {
((InputStream)source).close();
} catch (IOException ex) {
- LOG.error("Unable to close input stream. Reason: " + ex.getMessage(), ex);
+ LOG.log(Level.SEVERE, "Unable to close input stream. Reason: " + ex.getMessage(), ex);
}
resolver.removeStream((InputStream)source);
}
diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipeline.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipeline.java
index 688c7ac..254f10f 100644
--- a/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipeline.java
+++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipeline.java
@@ -1,6 +1,6 @@
package com.rackspace.cloud.api.docs.pipeline;
-import com.rackspace.papi.components.translation.resolvers.InputStreamUriParameterResolver;
+import com.rackspace.cloud.api.docs.pipeline.resolvers.InputStreamUriParameterResolver;
import com.xmlcalabash.core.XProcRuntime;
import com.xmlcalabash.io.ReadablePipe;
import com.xmlcalabash.model.RuntimeValue;
diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipelineBuilder.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipelineBuilder.java
index 73ee7c7..1542392 100644
--- a/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipelineBuilder.java
+++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipelineBuilder.java
@@ -1,7 +1,7 @@
package com.rackspace.cloud.api.docs.pipeline;
-import com.rackspace.papi.components.translation.resolvers.ClassPathUriResolver;
-import com.rackspace.papi.components.translation.resolvers.InputStreamUriParameterResolver;
+import com.rackspace.cloud.api.docs.pipeline.resolvers.ClassPathUriResolver;
+import com.rackspace.cloud.api.docs.pipeline.resolvers.InputStreamUriParameterResolver;
import com.xmlcalabash.core.XProcConfiguration;
import com.xmlcalabash.core.XProcMessageListener;
import com.xmlcalabash.core.XProcRuntime;
diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/ClassPathUriResolver.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/ClassPathUriResolver.java
new file mode 100644
index 0000000..a9efc2e
--- /dev/null
+++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/ClassPathUriResolver.java
@@ -0,0 +1,41 @@
+package com.rackspace.cloud.api.docs.pipeline.resolvers;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.URIResolver;
+import javax.xml.transform.stream.StreamSource;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+
+public class ClassPathUriResolver extends SourceUriResolver {
+
+ public static final String CLASSPATH_PREFIX = "classpath://";
+
+ public ClassPathUriResolver() {
+ super();
+ }
+
+ public ClassPathUriResolver(URIResolver parent) {
+ super(parent);
+ }
+
+ @Override
+ public Source resolve(String href, String base) throws TransformerException {
+
+ if (href != null && href.toLowerCase().startsWith(CLASSPATH_PREFIX)) {
+ String path = href.substring(CLASSPATH_PREFIX.length());
+ InputStream resource = getClass().getResourceAsStream(path);
+ if (resource == null) {
+ return null;
+ }
+
+ try {
+ return new StreamSource(resource, getClass().getResource(path).toURI().toString());
+ } catch (URISyntaxException ex) {
+ return new StreamSource(resource);
+ }
+ }
+
+ return super.resolve(href, base);
+ }
+}
diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/InputStreamUriParameterResolver.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/InputStreamUriParameterResolver.java
new file mode 100644
index 0000000..a62195b
--- /dev/null
+++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/InputStreamUriParameterResolver.java
@@ -0,0 +1,95 @@
+package com.rackspace.cloud.api.docs.pipeline.resolvers;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.URIResolver;
+import javax.xml.transform.stream.StreamSource;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.springframework.web.util.UriUtils;
+
+public class InputStreamUriParameterResolver extends SourceUriResolver {
+
+ private static final String PREFIX = "reference:jio:";
+ private final Map streams = new HashMap();
+ private final List resolvers = new ArrayList();
+
+ public InputStreamUriParameterResolver() {
+ super();
+ }
+
+ public InputStreamUriParameterResolver(URIResolver parent) {
+ super(parent);
+ }
+
+ public void addResolver(URIResolver resolver) {
+ resolvers.add(resolver);
+ }
+
+ public String addStream(InputStream inputStreamReference) {
+ String key = getHref(inputStreamReference);
+ streams.put(key, inputStreamReference);
+ return key;
+ }
+
+ public String addStream(InputStream inputStreamReference, String name) {
+ String key = getHref(name);
+ streams.put(key, inputStreamReference);
+ return key;
+ }
+
+ public void removeStream(InputStream inputStreamReference) {
+ String key = getHref(inputStreamReference);
+ removeStream(key);
+ }
+
+ public void removeStream(String name) {
+ streams.remove(name);
+ }
+
+ public String getHref(InputStream inputStreamReference) {
+ try {
+ return PREFIX + UriUtils.encodePathSegment(inputStreamReference.toString(), "utf-8");
+ } catch (UnsupportedEncodingException ex) {
+ return PREFIX + inputStreamReference.toString();
+ }
+ }
+
+ public String getHref(String name) {
+ return PREFIX + name;
+ }
+
+ public void clearStreams() {
+ streams.clear();
+ }
+
+ @Override
+ public Source resolve(String href, String base) throws TransformerException {
+ InputStream stream = streams.get(href);
+ if (stream != null) {
+ try {
+ return new StreamSource(stream, new URI(href).toString());
+ } catch (URISyntaxException ex) {
+ return new StreamSource(stream);
+ }
+ }
+
+ if (!resolvers.isEmpty()) {
+ for (URIResolver resolver : resolvers) {
+ Source source = resolver.resolve(href, base);
+ if (source != null) {
+ return source;
+ }
+ }
+
+ }
+
+ return super.resolve(href, base);
+ }
+}
diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/SourceUriResolver.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/SourceUriResolver.java
new file mode 100644
index 0000000..2d68f8a
--- /dev/null
+++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/SourceUriResolver.java
@@ -0,0 +1,32 @@
+package com.rackspace.cloud.api.docs.pipeline.resolvers;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.URIResolver;
+
+public class SourceUriResolver implements URIResolver {
+
+ private final URIResolver parent;
+
+ public SourceUriResolver() {
+ this.parent = null;
+ }
+
+ public SourceUriResolver(URIResolver parent) {
+ this.parent = parent;
+ }
+
+ public URIResolver getParent() {
+ return parent;
+ }
+
+ @Override
+ public Source resolve(String href, String base) throws TransformerException {
+
+ if (parent != null) {
+ return parent.resolve(href, base);
+ }
+
+ return null;
+ }
+}