You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/01/13 16:14:01 UTC
svn commit: r1432629 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/builder/xml/ main/java/org/apache/camel/util/
test/java/org/apache/camel/component/xslt/ test/java/org/apache/camel/util/
test/resources/xslt/ test/resources/xslt/common/...
Author: davsclaus
Date: Sun Jan 13 15:14:00 2013
New Revision: 1432629
URL: http://svn.apache.org/viewvc?rev=1432629&view=rev
Log:
CAMEL-5962: When using XSLT includes will use same file or classpath loading as endpoint configuration, if not explicit configured.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeFileSchemeTest.java
- copied, changed from r1432601, camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java
camel/trunk/camel-core/src/test/resources/xslt/
camel/trunk/camel-core/src/test/resources/xslt/common/
camel/trunk/camel-core/src/test/resources/xslt/common/staff_template.xsl
- copied unchanged from r1432601, camel/trunk/camel-core/src/test/resources/org/apache/camel/component/xslt/staff_template.xsl
camel/trunk/camel-core/src/test/resources/xslt/staff/
camel/trunk/camel-core/src/test/resources/xslt/staff/staff.xsl
- copied, changed from r1432601, camel/trunk/camel-core/src/test/resources/org/apache/camel/component/xslt/staff_include_relative.xsl
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java
camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltFileNotFoundTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/util/ResourceHelperTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java?rev=1432629&r1=1432628&r2=1432629&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java Sun Jan 13 15:14:00 2013
@@ -16,7 +16,7 @@
*/
package org.apache.camel.builder.xml;
-import java.io.File;
+import java.io.IOException;
import java.io.InputStream;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
@@ -26,6 +26,7 @@ import javax.xml.transform.stream.Stream
import org.apache.camel.spi.ClassResolver;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.ResourceHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,10 +48,17 @@ public class XsltUriResolver implements
private final ClassResolver resolver;
private final String location;
+ private final String baseScheme;
public XsltUriResolver(ClassResolver resolver, String location) {
this.resolver = resolver;
this.location = location;
+ if (ResourceHelper.hasScheme(location)) {
+ baseScheme = ResourceHelper.getScheme(location);
+ } else {
+ // default to use classpath
+ baseScheme = "classpath:";
+ }
}
public Source resolve(String href, String base) throws TransformerException {
@@ -60,44 +68,41 @@ public class XsltUriResolver implements
LOG.trace("Resolving URI with href: {} and base: {}", href, base);
- if (href.startsWith("classpath:")) {
- LOG.debug("Resolving URI from classpath: {}", href);
-
- String name = ObjectHelper.after(href, ":");
- InputStream is = resolver.loadResourceAsStream(name);
- if (is == null) {
- throw new TransformerException("Cannot find " + name + " in classpath");
- }
- return new StreamSource(is);
+ String scheme = ResourceHelper.getScheme(href);
+ if (scheme != null && "file:".equals(scheme)) {
+ // need to compact paths for file as it can be relative paths using .. to go backwards
+ href = FileUtil.compactPath(href, '/');
}
- if (href.startsWith("file:")) {
- LOG.debug("Resolving URI from file: {}", href);
+ if (scheme != null) {
+ LOG.debug("Resolving URI from {}: {}", scheme, href);
- String name = ObjectHelper.after(href, ":");
- File file = new File(name);
- if (!file.exists()) {
- throw new TransformerException("Cannot find " + name + " in the file system");
+ InputStream is;
+ try {
+ is = ResourceHelper.resolveMandatoryResourceAsInputStream(resolver, href);
+ } catch (IOException e) {
+ throw new TransformerException(e);
}
- return new StreamSource(file);
+ return new StreamSource(is);
}
// if href and location is the same, then its the initial resolve
if (href.equals(location)) {
- // default to use classpath: location
- String path = "classpath:" + href;
+ String path = baseScheme + href;
return resolve(path, base);
}
// okay then its relative to the starting location from the XSLT component
String path = FileUtil.onlyPath(location);
if (ObjectHelper.isEmpty(path)) {
- // default to use classpath: location
- path = "classpath:" + href;
+ path = baseScheme + href;
return resolve(path, base);
} else {
- // default to use classpath: location
- path = "classpath:" + path + "/" + href;
+ if (ResourceHelper.hasScheme(path)) {
+ path = path + "/" + href;
+ } else {
+ path = baseScheme + path + "/" + href;
+ }
return resolve(path, base);
}
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java?rev=1432629&r1=1432628&r2=1432629&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java Sun Jan 13 15:14:00 2013
@@ -55,6 +55,20 @@ public final class ResourceHelper {
}
/**
+ * Gets the scheme from the URI (e.g. file:, classpath: or http:)
+ *
+ * @param uri the uri
+ * @return the scheme, or <tt>null</tt> if no scheme
+ */
+ public static String getScheme(String uri) {
+ if (hasScheme(uri)) {
+ return uri.substring(0, uri.indexOf(":") + 1);
+ } else {
+ return null;
+ }
+ }
+
+ /**
* Resolves the mandatory resource.
* <p/>
* If possible recommended to use {@link #resolveMandatoryResourceAsUrl(org.apache.camel.spi.ClassResolver, String)}
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltFileNotFoundTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltFileNotFoundTest.java?rev=1432629&r1=1432628&r2=1432629&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltFileNotFoundTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltFileNotFoundTest.java Sun Jan 13 15:14:00 2013
@@ -16,6 +16,7 @@
*/
package org.apache.camel.component.xslt;
+import java.io.FileNotFoundException;
import javax.xml.transform.TransformerException;
import org.apache.camel.CamelContext;
@@ -41,7 +42,7 @@ public class XsltFileNotFoundTest extend
} catch (FailedToCreateRouteException e) {
assertIsInstanceOf(ResolveEndpointFailedException.class, e.getCause());
assertIsInstanceOf(TransformerException.class, e.getCause().getCause());
- assertEquals("Cannot find org/apache/camel/component/xslt/notfound.xsl in classpath", e.getCause().getCause().getMessage());
+ assertIsInstanceOf(FileNotFoundException.class, e.getCause().getCause().getCause());
}
}
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeFileSchemeTest.java (from r1432601, camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeFileSchemeTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeFileSchemeTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java&r1=1432601&r2=1432629&rev=1432629&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeFileSchemeTest.java Sun Jan 13 15:14:00 2013
@@ -23,7 +23,7 @@ import org.apache.camel.component.mock.M
/**
*
*/
-public class XsltIncludeRelativeTest extends ContextTestSupport {
+public class XsltIncludeRelativeFileSchemeTest extends ContextTestSupport {
public void testXsltIncludeRelative() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
@@ -40,7 +40,7 @@ public class XsltIncludeRelativeTest ext
@Override
public void configure() throws Exception {
from("file:src/test/data/?fileName=staff.xml&noop=true")
- .to("xslt:org/apache/camel/component/xslt/staff_include_relative.xsl")
+ .to("xslt:file:src/test/resources/xslt/staff/staff.xsl")
.to("log:foo")
.to("mock:result");
}
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/util/ResourceHelperTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ResourceHelperTest.java?rev=1432629&r1=1432628&r2=1432629&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/util/ResourceHelperTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/util/ResourceHelperTest.java Sun Jan 13 15:14:00 2013
@@ -141,6 +141,14 @@ public class ResourceHelperTest extends
assertTrue(ResourceHelper.isHttpUri("https://camel.apache.org"));
}
+ public void testGetScheme() throws Exception {
+ assertEquals("file:", ResourceHelper.getScheme("file:myfile.txt"));
+ assertEquals("classpath:", ResourceHelper.getScheme("classpath:myfile.txt"));
+ assertEquals("http:", ResourceHelper.getScheme("http:www.foo.com"));
+ assertEquals(null, ResourceHelper.getScheme("www.foo.com"));
+ assertEquals(null, ResourceHelper.getScheme("myfile.txt"));
+ }
+
public void testAppendParameters() throws Exception {
Map<String, Object> params = new LinkedHashMap<String, Object>();
params.put("foo", 123);
Copied: camel/trunk/camel-core/src/test/resources/xslt/staff/staff.xsl (from r1432601, camel/trunk/camel-core/src/test/resources/org/apache/camel/component/xslt/staff_include_relative.xsl)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/resources/xslt/staff/staff.xsl?p2=camel/trunk/camel-core/src/test/resources/xslt/staff/staff.xsl&p1=camel/trunk/camel-core/src/test/resources/org/apache/camel/component/xslt/staff_include_relative.xsl&r1=1432601&r2=1432629&rev=1432629&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/resources/org/apache/camel/component/xslt/staff_include_relative.xsl (original)
+++ camel/trunk/camel-core/src/test/resources/xslt/staff/staff.xsl Sun Jan 13 15:14:00 2013
@@ -17,7 +17,7 @@
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
- <xsl:include href="staff_template.xsl"/>
+ <xsl:include href="../common/staff_template.xsl"/>
<xsl:template match="staff/programmer">
<html>