Java Mailing List Archive

http://www.junlu.com/

Home » FreeMarker-user »

Re: [FreeMarker-user] Detect invalid directives

Denis

2011-10-19

Replies: Find Java Web Hosting

Author LoginPost Reply

On 19 Oct 2011, at 14:46, Daniel Dekany <ddekany@(protected):

> Wednesday, October 19, 2011, 2:11:51 PM, John Todd wrote:
>
>> On 10/19/11 04:29, Daniel Dekany wrote:
>>> Wednesday, October 19, 2011, 5:55:18 AM, John Todd wrote:
>>>
>>>> Hello,
>>>>
>>>> I would like to handle invalid directives however they are just
>>>> passing through the templating engine as text, e.g. using the following
>>>> FTL "blah.ftl":
>>>>
>>>> This is [#blah]content[/#blah]. This is [#fu] content.
>>> That's not possible, unless you pre-process the templates with a
>>> custom TemplateLoader that replaces "[#blah]" with "[[#-- --]#blah]"
>>> or like.
>>>
>>> Out of curiosity, why do you need this?
>> We use the templating engine extensively for on-demand personalization
>> of content and would like to reject templating requests at the time the
>> template is passed to our system if the template contains unknown
>> directives and just reject the request.
>>
>> So, you're saying it's not possible to catch such exceptions or the
>> behavior I'm seeing is not possible?
>
> Sorry, I was hasty and misread your question. FreeMarker should throw
> exception for invalid # tags always and everywhere. However, now that
> I have tried this, it seems it bypasses the # tags until it finds one
> that it knows. It's astonishing that I have never ran into this bug
> myself, and it's quite concerning that the author didn't have a test
> case that catches this. I suppose it slipped in when tag-syntax
> detection was added. It can't be straight fixed in 2.3.x as it would
> be non-BC, except by adding some new option. The workaround for this
> right now is starting all templates with [#ftl]...

Is this only for the square bracket syntax? It makes sense to start the template with [#ftl] anyway, instead of relying on auto-detection...

-- Denis.

>
>> thx,
>> jt
>>
>>>> and the code:
>>>>
>>>> public class App {
>>>>
>>>>   public static void main(String[] args) throws Exception {
>>>>     Configuration cfg = new Configuration();
>>>>     cfg.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX);
>>>>
>>>>     cfg.setDirectoryForTemplateLoading(new
>>>> File(System.getProperty("user.dir")));
>>>>
>>>>     System.out.println("Compiling template: blah.ftl");
>>>>     FileReader reader = new
>>>> FileReader(System.getProperty("user.dir") + "/blah.ftl");
>>>>     // Expect ParseException
>>>>     Template template = new Template("blah.ftl", reader, cfg);
>>>>
>>>>     System.out.println("Getting template from Configuration.");
>>>>     // Also expect ParseException
>>>>     template = cfg.getTemplate("blah.ftl");
>>>>     StringWriter writer = new StringWriter();
>>>>     template.process(new HashMap(), writer);
>>>>     System.out.println("Output: " + writer.toString());
>>>>   }
>>>> }
>>>>
>>>> I get the output:
>>>>
>>>> This is [#blah]content[/#blah]. This is [#fu] content.
>>>>
>>>> In each Template reference, I'm expecting a compilation error w/
>>>> "Unknown directive" per the FMParser.jj grammar. Any suggestions?
>>>>
>>>> Thanks,
>>>>
>>>> John T.
>>
>>
>> ------------------------------------------------------------------------------

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
_______________________________________________
FreeMarker-user mailing list
FreeMarker-user@(protected)
https://lists.sourceforge.net/lists/listinfo/freemarker-user
©2008 junlu.com - Jax Systems, LLC, U.S.A.