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 2010/02/12 08:50:45 UTC

svn commit: r909280 - in /camel/branches/camel-1.x: ./ camel-core/src/main/java/org/apache/camel/builder/xml/ camel-core/src/main/java/org/apache/camel/util/ components/camel-spring/src/main/java/org/apache/camel/component/xslt/ components/camel-spring...

Author: davsclaus
Date: Fri Feb 12 07:50:43 2010
New Revision: 909280

URL: http://svn.apache.org/viewvc?rev=909280&view=rev
Log:
Merged revisions 909028 via svnmerge from 
https://svn.apache.org/repos/asf/camel/trunk

........
  r909028 | davsclaus | 2010-02-11 16:40:28 +0100 (Thu, 11 Feb 2010) | 1 line
  
  CAMEL-2463: xslt component now supports using xsl:include where the included files is loaded from classpath and relative according to the endpoint configured location.
........

Added:
    camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java
      - copied, changed from r909028, camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java
    camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeClasspathTest.java
      - copied, changed from r909028, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeClasspathTest.java
    camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeOtherTest.java
      - copied, changed from r909028, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeOtherTest.java
    camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java
      - copied, changed from r909028, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java
    camel/branches/camel-1.x/components/camel-spring/src/test/resources/org/apache/camel/component/staff_other_template.xsl
      - copied unchanged from r909028, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/staff_other_template.xsl
    camel/branches/camel-1.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/staff_include_classpath.xsl
      - copied unchanged from r909028, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/staff_include_classpath.xsl
    camel/branches/camel-1.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/staff_include_relative.xsl
      - copied unchanged from r909028, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/staff_include_relative.xsl
    camel/branches/camel-1.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/staff_include_relative_other.xsl
      - copied unchanged from r909028, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/staff_include_relative_other.xsl
Modified:
    camel/branches/camel-1.x/   (props changed)
    camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
    camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
    camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
    camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java

Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Feb 12 07:50:43 2010
@@ -1 +1 @@
-/camel/trunk:736980,739733,739904,740251,740295,740306,740596,740663,741848,742231,742705,742739,742854,742856,742898,742906,743613,743762,743773,743920,743959-743960,744123,745105,745367,745541,745751,745826,745978,746269,746872,746895,746962,747258,747678-747704,748392,748436,748821,749563-749564,749574,749628-749629,749936,749956,750017,750334,750396,750761,750796,752068,752117,752418,752751-752755,752764-752773,752956,753087,753101,753175,755136,755487,756313,756348,756870,756939,757636,757693,757743,757865,758539,758563,758600,758617,758692,758990,759362,759453,759887,759931,760003,760890,760909,760937,761194,761536,761583,761607,762047,762633,762650,762935,763095,763484,763551,765154,765686,765729,765743,765824,766016,766289,766584,766588,766590,766602,766673,767403,767824,768342,769239,769346,769368,769434,770172,770906,771303,773193,773446,773781,774192,774383,774658-774659,776198,776289,776504,776975,778102,778689-778701,779121,779143,779489,781314-781349,781775,781
 923,781974,781993,782557,782594,782681,782886,782918-782923,783204,783248,783363,783639,783704,785564,785584,785599,787206,787581,787598,787605,787928,788393,789121,789703,790560,790936,791379,791476,791767,792038,792381,792398,792899,793359,793518,793547-793555,793862,793935,794237,794368,794550,794967,795790,798027,798052,798063,798489,798864,799252,800340,800785,800797,801084,801196,801960,802307,802478,803559,807476,810751,812937,814493,816105,817654,818063,818182-818354,818744,818747,819475,819956,820152,820168,821272,821290,822655,823013,823018,823031,823102,823177,823575,824218,824721,825760,825765,828288,828333,832647,833285,833289,833350,833370,833381,833419,835511,880655,880667,883713,884525,884750,885876,887196,895119,896772,898201,901634,902688,903638,903970,904365,904440,904442,905171,905241,905585,905883,906013,906068,906342,908925
+/camel/trunk:736980,739733,739904,740251,740295,740306,740596,740663,741848,742231,742705,742739,742854,742856,742898,742906,743613,743762,743773,743920,743959-743960,744123,745105,745367,745541,745751,745826,745978,746269,746872,746895,746962,747258,747678-747704,748392,748436,748821,749563-749564,749574,749628-749629,749936,749956,750017,750334,750396,750761,750796,752068,752117,752418,752751-752755,752764-752773,752956,753087,753101,753175,755136,755487,756313,756348,756870,756939,757636,757693,757743,757865,758539,758563,758600,758617,758692,758990,759362,759453,759887,759931,760003,760890,760909,760937,761194,761536,761583,761607,762047,762633,762650,762935,763095,763484,763551,765154,765686,765729,765743,765824,766016,766289,766584,766588,766590,766602,766673,767403,767824,768342,769239,769346,769368,769434,770172,770906,771303,773193,773446,773781,774192,774383,774658-774659,776198,776289,776504,776975,778102,778689-778701,779121,779143,779489,781314-781349,781775,781
 923,781974,781993,782557,782594,782681,782886,782918-782923,783204,783248,783363,783639,783704,785564,785584,785599,787206,787581,787598,787605,787928,788393,789121,789703,790560,790936,791379,791476,791767,792038,792381,792398,792899,793359,793518,793547-793555,793862,793935,794237,794368,794550,794967,795790,798027,798052,798063,798489,798864,799252,800340,800785,800797,801084,801196,801960,802307,802478,803559,807476,810751,812937,814493,816105,817654,818063,818182-818354,818744,818747,819475,819956,820152,820168,821272,821290,822655,823013,823018,823031,823102,823177,823575,824218,824721,825760,825765,828288,828333,832647,833285,833289,833350,833370,833381,833419,835511,880655,880667,883713,884525,884750,885876,887196,895119,896772,898201,901634,902688,903638,903970,904365,904440,904442,905171,905241,905585,905883,906013,906068,906342,908925,909028

Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java?rev=909280&r1=909279&r2=909280&view=diff
==============================================================================
--- camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java (original)
+++ camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java Fri Feb 12 07:50:43 2010
@@ -23,13 +23,14 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
-
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Result;
 import javax.xml.transform.Source;
 import javax.xml.transform.Templates;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.URIResolver;
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.camel.Exchange;
@@ -53,6 +54,7 @@
     private Templates template;
     private ResultHandlerFactory resultHandlerFactory = new StringResultHandlerFactory();
     private boolean failOnNullBody = true;
+    private URIResolver uriResolver;
 
     public XsltBuilder() {
     }
@@ -157,6 +159,14 @@
         return this;
     }
 
+    /**
+     * Sets a custom URI resolver to be used
+     */
+    public XsltBuilder uriResolver(URIResolver uriResolver) {
+        setUriResolver(uriResolver);
+        return this;
+    }
+
     // Properties
     // -------------------------------------------------------------------------
 
@@ -199,10 +209,15 @@
      * @throws TransformerConfigurationException is thrown if creating a XSLT transformer failed.
      */
     public void setTransformerSource(Source source) throws TransformerConfigurationException {
+        TransformerFactory factory = converter.getTransformerFactory();
+        if (getUriResolver() != null) {
+            factory.setURIResolver(getUriResolver());
+        }
+
         // Check that the call to newTemplates() returns a valid template instance.
         // In case of an xslt parse error, it will return null and we should stop the
         // deployment and raise an exception as the route will not be setup properly.
-        Templates templates = converter.getTransformerFactory().newTemplates(source);
+        Templates templates = factory.newTemplates(source);
         if (templates != null) {
             setTemplate(templates);
         } else {
@@ -243,6 +258,14 @@
         this.converter = converter;
     }
 
+    public URIResolver getUriResolver() {
+        return uriResolver;
+    }
+
+    public void setUriResolver(URIResolver uriResolver) {
+        this.uriResolver = uriResolver;
+    }
+
     // Implementation methods
     // -------------------------------------------------------------------------
 
@@ -270,6 +293,11 @@
      * Configures the transformer with exchange specific parameters
      */
     protected void configureTransformer(Transformer transformer, Exchange exchange) {
+        if (uriResolver == null) {
+            uriResolver = new XsltUriResolver(null);
+        }
+        transformer.setURIResolver(uriResolver);
+
         transformer.clearParameters();
 
         addParameters(transformer, exchange.getProperties());

Copied: camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java (from r909028, camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java)
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java?p2=camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java&r1=909028&r2=909280&rev=909280&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java (original)
+++ camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltUriResolver.java Fri Feb 12 07:50:43 2010
@@ -23,7 +23,6 @@
 import javax.xml.transform.URIResolver;
 import javax.xml.transform.stream.StreamSource;
 
-import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.logging.Log;
@@ -45,11 +44,9 @@
 
     private static final transient Log LOG = LogFactory.getLog(XsltUriResolver.class); 
 
-    private final ClassResolver resolver;
     private final String location;
 
-    public XsltUriResolver(ClassResolver resolver, String location) {
-        this.resolver = resolver;
+    public XsltUriResolver(String location) {
         this.location = location;
     }
 
@@ -68,7 +65,7 @@
             }
 
             String name = ObjectHelper.after(href, ":");
-            InputStream is = resolver.loadResourceAsStream(name);
+            InputStream is = ObjectHelper.loadResourceAsStream(name);
             if (is == null) {
                 throw new TransformerException("Cannot find " + name + " in classpath");
             }

Modified: camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java?rev=909280&r1=909279&r2=909280&view=diff
==============================================================================
--- camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java (original)
+++ camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java Fri Feb 12 07:50:43 2010
@@ -354,6 +354,24 @@
     }
 
     /**
+     * Returns only the leading path (returns <tt>null</tt> if no path)
+     */
+    public static String onlyPath(String name) {
+        if (name == null) {
+            return null;
+        }
+        int pos = name.lastIndexOf('/');
+        if (pos == -1) {
+            pos = name.lastIndexOf(File.separator);
+        }
+        if (pos != -1) {
+            return name.substring(0, pos);
+        }
+        // no path
+        return null;
+    }
+
+    /**
      * Compacts a path by stacking it and reducing <tt>..</tt>
      */
     public static String compactPath(String path) {

Modified: camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java?rev=909280&r1=909279&r2=909280&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java (original)
+++ camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java Fri Feb 12 07:50:43 2010
@@ -17,12 +17,13 @@
 package org.apache.camel.component.xslt;
 
 import java.util.Map;
-
 import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.URIResolver;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.xml.XsltBuilder;
+import org.apache.camel.builder.xml.XsltUriResolver;
 import org.apache.camel.component.ResourceBasedComponent;
 import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.camel.impl.ProcessorEndpoint;
@@ -85,6 +86,11 @@
         if (factory != null) {
             xslt.getConverter().setTransformerFactory(factory);
         }
+
+        // set resolver before input stream as resolver is used when loading the input stream
+        URIResolver resolver = new XsltUriResolver(remaining);
+        xslt.setUriResolver(resolver);
+
         xslt.setTransformerInputStream(resource.getInputStream());
         configureXslt(xslt, uri, remaining, parameters);
         return new ProcessorEndpoint(uri, this, xslt);

Copied: camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeClasspathTest.java (from r909028, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeClasspathTest.java)
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeClasspathTest.java?p2=camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeClasspathTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeClasspathTest.java&r1=909028&r2=909280&rev=909280&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeClasspathTest.java (original)
+++ camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeClasspathTest.java Fri Feb 12 07:50:43 2010
@@ -29,7 +29,7 @@
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMessageCount(1);
         // the include file has the span style so check that its there
-        mock.message(0).constant("<span style=\"font-size=22px;\">Minnie Mouse</span>");
+        mock.message(0).body().contains("<span style=\"font-size=22px;\">Minnie Mouse</span>");
 
         assertMockEndpointsSatisfied();
     }
@@ -39,7 +39,7 @@
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("file:src/test/data/?fileName=staff.xml&noop=true")
+                from("file:src/test/data/staff.xml?noop=true")
                     .to("xslt:org/apache/camel/component/xslt/staff_include_classpath.xsl")
                     .to("log:foo")
                     .to("mock:result");

Copied: camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeOtherTest.java (from r909028, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeOtherTest.java)
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeOtherTest.java?p2=camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeOtherTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeOtherTest.java&r1=909028&r2=909280&rev=909280&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeOtherTest.java (original)
+++ camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeOtherTest.java Fri Feb 12 07:50:43 2010
@@ -29,7 +29,7 @@
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMessageCount(1);
         // the include file has the span style so check that its there
-        mock.message(0).constant("<span style=\"color:yellow;\">48</span>");
+        mock.message(0).body().contains("<span style=\"color:yellow;\">48</span>");
 
         assertMockEndpointsSatisfied();
     }
@@ -39,7 +39,7 @@
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("file:src/test/data/?fileName=staff.xml&noop=true")
+                from("file:src/test/data/staff.xml?noop=true")
                     .to("xslt:org/apache/camel/component/xslt/staff_include_relative_other.xsl")
                     .to("log:foo")
                     .to("mock:result");

Copied: camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java (from r909028, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java)
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java?p2=camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java&r1=909028&r2=909280&rev=909280&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java (original)
+++ camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltIncludeRelativeTest.java Fri Feb 12 07:50:43 2010
@@ -29,7 +29,7 @@
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMessageCount(1);
         // the include file has the span style so check that its there
-        mock.message(0).constant("<span style=\"font-size=22px;\">Minnie Mouse</span>");
+        mock.message(0).body().contains("<span style=\"font-size=22px;\">Minnie Mouse</span>");
 
         assertMockEndpointsSatisfied();
     }
@@ -39,7 +39,7 @@
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("file:src/test/data/?fileName=staff.xml&noop=true")
+                from("file:src/test/data/staff.xml?noop=true")
                     .to("xslt:org/apache/camel/component/xslt/staff_include_relative.xsl")
                     .to("log:foo")
                     .to("mock:result");

Modified: camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java?rev=909280&r1=909279&r2=909280&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java (original)
+++ camel/branches/camel-1.x/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java Fri Feb 12 07:50:43 2010
@@ -49,7 +49,8 @@
         CamelContext camelContext = contextList.get(0);
 
         MockEndpoint endpoint = camelContext.getEndpoint("mock:results", MockEndpoint.class);
-        endpoint.expectedMessageCount(2);
+        // in case we add more files in src/test/data
+        endpoint.expectedMinimumMessageCount(2);
         endpoint.assertIsSatisfied();
         List<Exchange> list = endpoint.getReceivedExchanges();