Onno Huijgen created FREEMARKER-233:
---------------------------------------
Summary: Using Freemarker in Native compiled app cannot handle POJO
Key: FREEMARKER-233
URL: https://issues.apache.org/jira/browse/FREEMARKER-233
Project: Apache Freemarker
Issue Type: Bug
Components: engine
Affects Versions: 2.3.32
Reporter: Onno Huijgen
Processing Freemarker templates from {{public static void main}} works as
expected:
{{template.process(root, output);}}
Given this POJO class
{code:java}
public class Code {
private String groupId;
private String artifactId;
private String version;
...
// getters/setters
...
}{code}
and an object
# root as Map<String, Object>
# root as Map<String, Object> with Code also as Map<String, Object> (map in
map)
# root with map.put("code", Code) (object in map)
# root as Code
all yield in a proper rendered template.
After native compilation however options 3 and 4 (using the Code object) do not
work:
{code:java}
Caused by: freemarker.core.InvalidReferenceException: The following has
evaluated to null or missing:==> code.groupId [in template
"templates/java/micronaut/pom.xml.ftl" at line 6, column 16]
----Tip: It's the step after the last dot that caused this error, not those
before it.----Tip: If the failing expression is known to legally refer to
something that's sometimes null or missing, either specify a default value like
myOptionalVar!myDefault, or use <#if
myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the
last step of the expression; to cover the whole expression, use parenthesis:
(myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??----
----FTL stack trace ("~" means nesting-related): - Failed at:
${code.groupId} [in template "templates/java/micronaut/pom.xml.ftl" at line 6,
column 14]---- {code}
Any suggestions on how to fix this are welcome ;-)
Workaround for now of course is just to populate one or more maps and not use
POJOs, but it's a bit unexpected.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)