【发布时间】:2018-08-16 21:31:02
【问题描述】:
我正在开发一个简单的处理器来验证路由中是否存在强制属性。 在调用处理器之前,我需要在路由定义中添加该列表。
<route id="test1">
<from uri="/v1/test1" />
<setProperty propertyName="mandatoryProperties">
<simple resultType="java.util.List">${[A,B,C]}</simple>
</setProperty>
<bean ref="propertiesProcessor" />
</route>
我的处理器是:
@Component
public class MandatoryPropertiesProcessor {
@Handler
public void process(final Exchange exchange, final @Properties Map properties, final @ExchangeProperty("mandatoryProperties") List<String> mandatoryProperties) {
List<String> missingPropertiesList = new ArrayList<>();
if (!CollectionUtils.isEmpty(mandatoryProperties)) {
for (String mandatoryProperty : mandatoryProperties) {
if (!properties.containsKey(mandatoryProperty)) {
missingPropertiesList.add(mandatoryProperty);
}
}
}
exchange.setProperty(MISSING_PROPERTIES, missingPropertiesList);
}
}
当我尝试调用这条路线时,我得到:
Caused by: org.apache.camel.language.simple.types.SimpleParserException: Unknown function: ["A","B","C"]
at org.apache.camel.language.simple.ast.SimpleFunctionExpression.createSimpleExpression(SimpleFunctionExpression.java:216)
at org.apache.camel.language.simple.ast.SimpleFunctionExpression.createExpression(SimpleFunctionExpression.java:40)
at org.apache.camel.language.simple.ast.SimpleFunctionStart.doCreateLiteralExpression(SimpleFunctionStart.java:58)
at org.apache.camel.language.simple.ast.SimpleFunctionStart.createExpression(SimpleFunctionStart.java:48)
at org.apache.camel.language.simple.SimpleExpressionParser.createExpressions(SimpleExpressionParser.java:163)
at org.apache.camel.language.simple.SimpleExpressionParser.doParseExpression(SimpleExpressionParser.java:86)
at org.apache.camel.language.simple.SimpleExpressionParser.parseExpression(SimpleExpressionParser.java:53)
有可能在 XML 中实现吗?
【问题讨论】:
-
你为什么用 $.删除那个
-
@pvpkiran 我已经删除了 $,现在我没有任何错误,但标题不存在。
-
试试这个
<simple resultType="java.util.List">A,B,C</simple> -
那个表达式还是不行。
-
你想要一个 ArrayList 有 3 个值:A、B 和 C。你可以使用 groovy 或一些更强大的脚本语言来初始化这样的东西
标签: xml spring apache-camel spring-dsl