[
https://issues.apache.org/jira/browse/FREEMARKER-24?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Dekany resolved FREEMARKER-24.
-------------------------------------
Resolution: Fixed
Assignee: Daniel Dekany
Fix Version/s: 2.3.26-incubating
Quoting from the version history: Added workaround (not enabled by default) to
expose Java 8 default methods (and the bean properties they define) to
templates, despite that java.beans.Introspector (the official JavaBeans
introspector) ignores them, at least as of JRE 1.8.0_66. To enable this
workaround, either increase the value of the incompatibleImprovements
constructor argument of DefaultObjectWrapper or BeansWrapper the used to
2.3.26, or set its treatDefaultMethodsAsBeanMembers setting to true. Note that
if you leave the object_wrapper setting of the Configuration on its default,
it's enough to increase the incompatibleImprovements setting of the
Configuration to 2.3.26, as that's inherited by the default object_wrapper.
> Support of default methods in object model
> ------------------------------------------
>
> Key: FREEMARKER-24
> URL: https://issues.apache.org/jira/browse/FREEMARKER-24
> Project: Apache Freemarker
> Issue Type: Improvement
> Components: engine
> Affects Versions: 2.3.24-incubating
> Reporter: Emmanuel Keller
> Assignee: Daniel Dekany
> Priority: Minor
> Fix For: 2.3.26-incubating
>
>
> The default object method model currently does not support default methods:
> https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
> Here is the current error:
> {noformat}
> FTL stack trace ("~" means nesting-related):
> - Failed at: #if task.switchable [in template "...../home.ftl" at line
> 43, column 25]
> ----
> at
> freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:131)
> at
> freemarker.core.UnexpectedTypeException.newDesciptionBuilder(UnexpectedTypeException.java:77)
> at
> freemarker.core.UnexpectedTypeException.<init>(UnexpectedTypeException.java:40)
> at
> freemarker.core.NonBooleanException.<init>(NonBooleanException.java:44)
> at freemarker.core.Expression.modelToBoolean(Expression.java:142)
> at freemarker.core.Expression.evalToBoolean(Expression.java:125)
> at freemarker.core.Expression.evalToBoolean(Expression.java:110)
> at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:46)
> at freemarker.core.Environment.visit(Environment.java:324)
> at freemarker.core.MixedContent.accept(MixedContent.java:54)
> at
> freemarker.core.Environment.visitByHiddingParent(Environment.java:345)
> at
> freemarker.core.IteratorBlock$IterationContext.executeNestedBlockInner(IteratorBlock.java:240)
> at
> freemarker.core.IteratorBlock$IterationContext.executeNestedBlock(IteratorBlock.java:220)
> at
> freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:194)
> at freemarker.core.Environment.visitIteratorBlock(Environment.java:572)
> at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:78)
> at freemarker.core.IteratorBlock.accept(IteratorBlock.java:64)
> at freemarker.core.Environment.visit(Environment.java:324)
> at freemarker.core.MixedContent.accept(MixedContent.java:54)
> at freemarker.core.Environment.visit(Environment.java:324)
> at freemarker.core.Environment.process(Environment.java:302)
> at freemarker.template.Template.process(Template.java:325)
> at com.qwazr.tools.FreeMarkerTool.template(FreeMarkerTool.java:86)
> at com.qwazr.tools.FreeMarkerTool.template(FreeMarkerTool.java:101)
> {noformat}
> To reproduce this.
> 1. Use an interface
> {code:java}
> public interface UpdatableTask extends Runnable {
> default boolean isSwitchable() {
> return false;
> }
> }
> {code}
> 2. Use an object that implements this interface with the following template:
> {code}
> <#if task.switchable>
> ...
> </#if>
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)