我正在使用运行2.8.0.fuse-06-11版本的骆驼免费标记的Servicemix 4.4.1。在我的ftl文件中,我需要根据查询URL中是否存在查询字符串来使用条件路由。
例如:
如果url中附加了查询字符串“?wsdl”->,则ftl应该路由到其他处理器,而不是正常情况。为此,我在ftl文件中具有以下配置。
<choice>
<when>
<#list RequestParameters?keys as key>
<#if key == '_wsdl'>
<to uri="wsdlProviderProcessor">
</#if>
</#list>
</when>
<otherwise>
//do something else here
</otherwise>
</choice>
但是,我的问题是,在构建编译ftl以创建路由xml时,出现以下异常。
程序员的Java回溯:
freemarker.core.InvalidReferenceException: Expression RequestParameters is undefined on line 216, column 40 in ftl/META-INF/spring/route-context.xml.ftl.
at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)
at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:135)
at freemarker.core.BuiltIn$keysBI._getAsTemplateModel(BuiltIn.java:667)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.Environment.process(Environment.java:199)
at freemarker.template.Template.process(Template.java:237)
据我了解,它无法访问RequestParameters变量。我尝试使用多种方法,包括“请求”和$ {RequestParameters ['_ wsdl']}之类的变量,如以下链接所示。但是,每次我的代码出错时,都会出现相同的错误消息。
对于以上问题的任何见解将不胜感激。
最佳答案
如果没有文档可以帮助,请尝试:
<#list .data_model?keys as varName>
${varName}
</#list>
它是否有效以及是否返回所有变量完全取决于数据模型。因此,如果失败,则可以在
freemarker.template.Template.process
处放置一个断点,以查看作为数据模型传递给模板的内容。