文件端点中的条件fileName表达式

时间:2018-06-22 12:17:45

标签: apache-camel

在Apache Camel的file://端点的fileName参数中是否可以有条件表达式?

我正在使用Java DSL(无法更改)来构建路由,并且以下定义似乎不起作用

myroute.to("file://my-file-out?fileName=${header[myheader] eq 'EXPECTED_VALUE' ? 'EXPECTED' : 'UNEXPECTED'}")

不幸的是,由于我使用的是预定义的(自定义)应用程序框架,因此必须在单个.to()方法调用中完成此操作。

2 个答案:

答案 0 :(得分:1)

您可以这样做

myroute
   .choice()
   .when(header("myHeader").isEqualTo("EXPECTED_VALUE"))
     .to("file://my-file-out?fileName=EXPECTED_VALUE")
   .otherwise()
     .to("file://my-file-out?fileName=UNEXPECTED")
   .endChoice(); 

另一种略有不同的方法

myroute
   .choice()
   .when(header("myHeader").isEqualTo("EXPECTED_VALUE"))
     .setHeader("finalFileName", simple("EXPECTED_VALUE"))
   .otherwise()
     .setHeader("finalFileName", simple("UNEXPECTED"))
   .endChoice()
   .to("file:///tmp?fileName=${header.finalFileName}")
   .end()
 ;

答案 1 :(得分:0)

filenname值可以引用标题或属性,而标题或属性又可以是表达式。我以前没有尝试过,但也许公式可以使用任何可用的表达语言,例如Groovy。这是您所能解决的问题吗?