我正在构建一个路由,该路由调用一个groovy脚本,该脚本的路径是动态计算的,如果找不到该脚本,则默认为一个通用的静态脚本:
.doTry()
.toD("language://groovy:resource:classpath:scripts/${exchangeProperty.consumerType}ResponseHandler.groovy")
.doCatch(FileNotFoundException.class)
.script().groovy("resource:classpath:scripts/defaultResponseHandler.groovy")
.end()
问题是交换属性consumerType
没有被解析,因为toD
的uri字符串参数是使用groovy计算的,而不是简单的。
MultipleCompilationErrorsException -> startup failed:
Script_09b4150584d9e2c979353feee06897b5.groovy: 1: Unexpected input: 'scripts/${exchangeProperty.consumerType}' @ line 1, column 20.
resource:classpath:scripts/${exchangeProperty.consumerType}ResponseHandler.groovy
^
1 error
我怎样才能获得想要的行为?
1条答案
按热度按时间y0u0uwnf1#
根据此处显示的错误,Camel似乎无法解析您在
toD()
中提供的字符串。默认情况下,传递给动态to的表达式被计算为Simple语言,但是,如To Dynamic Camel documentation中所述,您可以为动态计算指定其他语言。
在您的示例中,您尝试使用groovy语言计算端点,但随后使用Simple语言替换了脚本的一部分名称。
我找到的一个解决方案(但不是最好的)是将解释字符串的语言指定为简单的,然后使用
language:groovy
指定需要调用的端点。你可以这样写:
看起来很有效,但我希望其他人能想出更好的解决方案。