我正在使用运行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处放置一个断点,以查看作为数据模型传递给模板的内容。

10-02 09:51