我正在使用运行camel-freemarker版本2.8.0.fuse-06-11的Servicemix 4.4.1。在我的ftl文件中,我需要根据请求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']},如以下链接所示。但是,每次我的代码错误时都会出现相同的错误消息。
对上述问题的任何见解都将受到高度赞赏。
答案 0 :(得分:1)
如果没有可提供帮助的文档,请尝试:
<#list .data_model?keys as varName>
${varName}
</#list>
如果它有效并且通过返回所有变量,那么它是特定于数据模型的。因此,如果失败,您可以在freemarker.template.Template.process
放置一个断点,以查看作为数据模型传递给模板的内容。