On 05/17/2012 10:40 AM, Jacopo Cappellato wrote:
>
> On May 17, 2012, at 5:32 PM, Adam Heath wrote:
>>
>> * It's not just related to Static['foo']; again, based on my reading
>> of the code.
>
> I can confirm that Static is not involved in the issue
See attached, very simple. It *should* call the first m(), but it
really calls the second.
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import freemarker.core.Environment;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.Configuration;
import freemarker.template.Template;
public final class FreemarkerBug {
protected static BeansWrapper defaultWrapper = BeansWrapper.getDefaultInstance();
protected static Configuration defaultConfig = makeConfiguration(defaultWrapper);
// based on ofbiz
public static Configuration makeConfiguration(BeansWrapper wrapper) {
Configuration newConfig = new Configuration();
newConfig.setObjectWrapper(wrapper);
newConfig.setSharedVariable("Static", wrapper.getStaticModels());
newConfig.setLocalizedLookup(false);
return newConfig;
}
public static String renderTemplate(String location, String templateBody, Map<String, Object> context) throws Exception {
Template template = new Template(location, new StringReader(templateBody), defaultConfig);
StringWriter out = new StringWriter();
Environment env = template.createProcessingEnvironment(context, out);
env.process();
return out.toString();
}
public static String m(String name, List<? extends Object> list) {
return "<(" + name + "):" + (list != null ? list.toString() : null) + ">";
}
public static String m(Object... args) {
return "<+" + (args != null ? Arrays.asList(args).toString() : null) + ">";
}
public static void main(String[] args) throws Exception {
String badTemplate = "${Static['FreemarkerBug'].m('foo', null)}";
Map<String, Object> context = new HashMap<String, Object>();
String result = renderTemplate("bad-template", badTemplate, context);
System.out.println("result=" + result);
}
}