0

我正在开发一个简单的处理器来验证路由中是否存在强制属性。在调用处理器之前,我需要在路由定义中添加该列表。

    <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 中实现这一点吗?

4

1 回答 1

0

您似乎使用 Spring Framework 并且强制属性似乎是一个静态列表,对吧?

如果是这样,只需使用 Spring 配置来创建列表或任何其他强制属性集合并将其注入到您的MandatoryPropertiesProcessorbean 中。这部分根本没有骆驼。

如果列表改变,只有配置和 bean 改变,而不是你的骆驼路线。这是合理的,因为通过您的路线实施的“处理工作流程”不会改变。

于 2018-03-09T12:38:19.503 回答