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"/>


Reply via email to