在Camel Freemarker ftl中访问RequestParameters

时间:2014-02-04 14:28:44

标签: java spring apache-camel freemarker

我正在使用运行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']},如以下链接所示。但是,每次我的代码错误时都会出现相同的错误消息。

对上述问题的任何见解都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

如果没有可提供帮助的文档,请尝试:

<#list .data_model?keys as varName>
  ${varName}
</#list>

如果它有效并且通过返回所有变量,那么它是特定于数据模型的。因此,如果失败,您可以在freemarker.template.Template.process放置一个断点,以查看作为数据模型传递给模板的内容。