Author: davsclaus
Date: Thu Aug 4 09:45:21 2011
New Revision: 1153812
URL: http://svn.apache.org/viewvc?rev=1153812&view=rev
Log:
CAMEL-4305: Fixed xslt component not being able to load the stylesheet from a
file system.
Added:
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteFileTest.java
- copied, changed from r1153781,
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteFileTest.xml
- copied, changed from r1153781,
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/camelContext.xml
Modified:
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
Modified:
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java?rev=1153812&r1=1153811&r2=1153812&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
(original)
+++
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
Thu Aug 4 09:45:21 2011
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.xslt;
+import java.io.File;
+import java.io.FileNotFoundException;
import java.util.Map;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
@@ -31,6 +33,7 @@ import org.apache.camel.converter.jaxp.X
import org.apache.camel.impl.ProcessorEndpoint;
import org.apache.camel.util.ObjectHelper;
import org.springframework.core.io.Resource;
+import org.springframework.core.io.UrlResource;
/**
* An <a href="http://camel.apache.org/xslt.html">XSLT Component</a>
@@ -149,7 +152,23 @@ public class XsltComponent extends Resou
private void loadResource(XsltBuilder xslt, Resource resource) throws
TransformerConfigurationException {
log.trace("{} loading schema resource: {}", this, resource);
try {
- xslt.setTransformerInputStream(resource.getInputStream());
+ if (resource instanceof UrlResource) {
+ // prefer to use file when a file based url
+ File file = resource.getFile();
+ if (file != null) {
+ // check if the file exists and report a better error as
the XSLT
+ // will just say it cannot compile the stylesheet file
+ if (!file.exists()) {
+ throw new FileNotFoundException("File: " + file + "
not found.");
+ }
+ xslt.setTransformerFile(file);
+ } else {
+ xslt.setTransformerURL(resource.getURL());
+ }
+ } else {
+ // fallback and use input stream
+ xslt.setTransformerInputStream(resource.getInputStream());
+ }
} catch (Exception e) {
// include information about the resource in the caused exception,
so its easier for
// end users to know which resource failed
Copied:
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteFileTest.java
(from r1153781,
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteFileTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteFileTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java&r1=1153781&r2=1153812&rev=1153812&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java
(original)
+++
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteFileTest.java
Thu Aug 4 09:45:21 2011
@@ -16,48 +16,15 @@
*/
package org.apache.camel.component.xslt;
-import java.util.List;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.SpringTestSupport;
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @version
*/
-public class XsltRouteTest extends SpringTestSupport {
-
- public void testSendMessageAndHaveItTransformed() throws Exception {
- MockEndpoint endpoint = getMockEndpoint("mock:result");
- endpoint.expectedMessageCount(1);
-
- template.sendBody("direct:start",
- "<mail><subject>Hey</subject><body>Hello
world!</body></mail>");
-
- assertMockEndpointsSatisfied();
-
- List<Exchange> list = endpoint.getReceivedExchanges();
- Exchange exchange = list.get(0);
- String xml = exchange.getIn().getBody(String.class);
-
- assertNotNull("The transformed XML should not be null", xml);
- assertTrue(xml.indexOf("transformed") > -1);
- // the cheese tag is in the transform.xsl
- assertTrue(xml.indexOf("cheese") > -1);
- assertTrue(xml.indexOf("<subject>Hey</subject>") > -1);
- assertTrue(xml.indexOf("<body>Hello world!</body>") > -1);
-
- TestBean bean = getMandatoryBean(TestBean.class, "testBean");
- assertEquals("bean.subject", "Hey", bean.getSubject());
- }
-
- protected int getExpectedRouteCount() {
- return 0;
- }
+public class XsltRouteFileTest extends XsltRouteTest {
protected AbstractXmlApplicationContext createApplicationContext() {
- return new
ClassPathXmlApplicationContext("org/apache/camel/component/xslt/camelContext.xml");
+ return new
ClassPathXmlApplicationContext("org/apache/camel/component/xslt/XsltRouteFileTest.xml");
}
}
Copied:
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteFileTest.xml
(from r1153781,
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/camelContext.xml)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteFileTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteFileTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/camelContext.xml&r1=1153781&r2=1153812&rev=1153812&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/camelContext.xml
(original)
+++
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteFileTest.xml
Thu Aug 4 09:45:21 2011
@@ -26,7 +26,7 @@
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:start"/>
- <to uri="xslt:org/apache/camel/component/xslt/transform.xsl"/>
+ <to
uri="xslt:file:src/test/resources/org/apache/camel/component/xslt/transform.xsl"/>
<multicast>
<bean ref="testBean"/>
<to uri="mock:result"/>