Author: ningjiang
Date: Fri Jan 29 03:24:06 2010
New Revision: 904365

URL: http://svn.apache.org/viewvc?rev=904365&view=rev
Log:
CAMEL-2423 Applied patch with thanks to Frank

Modified:
    
camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java

Modified: 
camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java?rev=904365&r1=904364&r2=904365&view=diff
==============================================================================
--- 
camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java
 (original)
+++ 
camel/trunk/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerComponent.java
 Fri Jan 29 03:24:06 2010
@@ -16,23 +16,35 @@
  */
 package org.apache.camel.component.freemarker;
 
+import java.net.URL;
 import java.util.Map;
 
-import freemarker.cache.ClassTemplateLoader;
-import freemarker.template.Configuration;
 import org.apache.camel.Endpoint;
 import org.apache.camel.impl.DefaultComponent;
 import org.apache.camel.util.ObjectHelper;
-import org.springframework.core.io.Resource;
+import org.springframework.beans.factory.BeanClassLoaderAware;
+
+import freemarker.cache.URLTemplateLoader;
+import freemarker.template.Configuration;
 
 /**
  * Freemarker component.
  */
-public class FreemarkerComponent extends DefaultComponent {
+public class FreemarkerComponent extends DefaultComponent implements 
BeanClassLoaderAware {
 
     private Configuration configuration;
     private Configuration noCacheConfiguration;
 
+    private ClassLoader beanClassLoader; 
+
+    public void setBeanClassLoader(ClassLoader classLoader) {
+        this.beanClassLoader = classLoader;
+    }
+
+    public ClassLoader getBeanClassLoader() {
+        return beanClassLoader;
+    }
+
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
         FreemarkerEndpoint endpoint = new FreemarkerEndpoint(uri, this, 
remaining);
 
@@ -56,8 +68,25 @@
     public synchronized Configuration getConfiguraiton() {
         if (configuration == null) {
             configuration = new Configuration();
-            // use class template loader using Spring Resource class and / as 
root in classpath
-            configuration.setTemplateLoader(new 
ClassTemplateLoader(Resource.class, "/"));
+            configuration.setTemplateLoader(new URLTemplateLoader() {
+                @Override
+                protected URL getURL(String name) {
+                    ClassLoader[] loaders = {
+                            beanClassLoader, 
+                            Thread.currentThread().getContextClassLoader(), 
+                            this.getClass().getClassLoader()
+                            };
+                    for (ClassLoader classLoader : loaders) {
+                        if (classLoader != null) {
+                            URL resource = classLoader.getResource(name);
+                            if (resource != null) {
+                                return resource;
+                            }
+                        }
+                    }
+                    return null;
+                }
+            });
         }
         return (Configuration) configuration.clone();
     }


Reply via email to