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();
}