You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by "Aniruddha (Jira)" <ji...@apache.org> on 2021/08/04 13:20:00 UTC

[jira] [Updated] (FREEMARKER-185) eval_json fails

     [ https://issues.apache.org/jira/browse/FREEMARKER-185?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Aniruddha updated FREEMARKER-185:
---------------------------------
    Description: 
 
{code:java}
public static void main(String[] args) throws Throwable{
        Configuration cfg = new Configuration(new Version("2.3.31"));
        StringTemplateLoader stringLoader = new StringTemplateLoader();
        cfg.setTemplateLoader(stringLoader);
        StringBuilder sb = new StringBuilder();
        sb.append("<#assign vals = '{  \"success\":true,  \"timestamp\":1627886463,  \"base\":\"Data1\",  \"date\":\"2021-08-02\",  \"values\":{    \"data2\":7.5,    \"data3\":44,    \"data4\":33  }}'?eval_json>");
        sb.append("${vals}");
        stringLoader.putTemplate("sample", sb.toString());
        Map<String, Object> input = new HashMap<String, Object>();
        Template template = cfg.getTemplate("sample");
        Writer consoleWriter = new OutputStreamWriter(System.out);
        template.process(input, consoleWriter);
    }
{code}
The above code fails with below error

 
  FreeMarker template error (DEBUG mode; use RETHROW in production!):
 For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), or "template output" , but this has evaluated to an extended_hash (wrapper: f.t.SimpleHash):
 ==> vals [in template "sample" at line 1, column 175]
----
FTL stack trace ("~" means nesting-related):
 - Failed at: ${vals} [in template "sample" at line 1, column 173]
----
{{}}

 

  was:
 
{code:java}
// public static void main(String[] args) throws Throwable{
        Configuration cfg = new Configuration(new Version("2.3.31"));
        StringTemplateLoader stringLoader = new StringTemplateLoader();
        cfg.setTemplateLoader(stringLoader);
        StringBuilder sb = new StringBuilder();
        sb.append("<#assign vals = '{  \"success\":true,  \"timestamp\":1627886463,  \"base\":\"Data1\",  \"date\":\"2021-08-02\",  \"values\":{    \"data2\":7.5,    \"data3\":44,    \"data4\":33  }}'?eval_json>");
        sb.append("${vals}");
        stringLoader.putTemplate("sample", sb.toString());
        Map<String, Object> input = new HashMap<String, Object>();
        Template template = cfg.getTemplate("sample");
        Writer consoleWriter = new OutputStreamWriter(System.out);
        template.process(input, consoleWriter);
    }
{code}
The above code fails with below error

 
 FreeMarker template error (DEBUG mode; use RETHROW in production!):
For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), or "template output" , but this has evaluated to an extended_hash (wrapper: f.t.SimpleHash):
==> vals  [in template "sample" at line 1, column 175]

----
FTL stack trace ("~" means nesting-related):
    - Failed at: ${vals}  [in template "sample" at line 1, column 173]
----
{{}}

 


> eval_json fails
> ---------------
>
>                 Key: FREEMARKER-185
>                 URL: https://issues.apache.org/jira/browse/FREEMARKER-185
>             Project: Apache Freemarker
>          Issue Type: Bug
>          Components: engine
>    Affects Versions: 2.3.31
>            Reporter: Aniruddha
>            Priority: Major
>              Labels: features
>
>  
> {code:java}
> public static void main(String[] args) throws Throwable{
>         Configuration cfg = new Configuration(new Version("2.3.31"));
>         StringTemplateLoader stringLoader = new StringTemplateLoader();
>         cfg.setTemplateLoader(stringLoader);
>         StringBuilder sb = new StringBuilder();
>         sb.append("<#assign vals = '{  \"success\":true,  \"timestamp\":1627886463,  \"base\":\"Data1\",  \"date\":\"2021-08-02\",  \"values\":{    \"data2\":7.5,    \"data3\":44,    \"data4\":33  }}'?eval_json>");
>         sb.append("${vals}");
>         stringLoader.putTemplate("sample", sb.toString());
>         Map<String, Object> input = new HashMap<String, Object>();
>         Template template = cfg.getTemplate("sample");
>         Writer consoleWriter = new OutputStreamWriter(System.out);
>         template.process(input, consoleWriter);
>     }
> {code}
> The above code fails with below error
>  
>   FreeMarker template error (DEBUG mode; use RETHROW in production!):
>  For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), or "template output" , but this has evaluated to an extended_hash (wrapper: f.t.SimpleHash):
>  ==> vals [in template "sample" at line 1, column 175]
> ----
> FTL stack trace ("~" means nesting-related):
>  - Failed at: ${vals} [in template "sample" at line 1, column 173]
> ----
> {{}}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)