Camel - 在Spring DSL中使用属性

时间:2016-04-28 10:27:31

标签: spring apache-camel

我正在尝试在我的流程方法中设置一些属性,但我无法弄清楚如何在xml中使用这些属性,就像我可以使用语法在$ xml中轻松使用头文件:$ {in。 header.myKey}

这是我的代码:

    <route>
        <from uri="activemq:queue:start.queue" />
            <to uri="stream:out" />
            <process ref="jsonProcessor"></process>
             <to uri="bean:validateInputIdentifiers?method=validation(${in.property.SourceMap}, ${in.property.DestinationMap})" />
    </route>

这里in.property.SourceMap是未知函数。什么是正确的方法? 如果它类似于标题会很棒。此外,我想只使用属性而不是标题,因为标题的值可能不会在我的路径中保留。

这是流程方法代码:

@Override
public void process(Exchange exchange) throws Exception {
    List<Map<String, String>> body = exchange.getIn().getBody(List.class);
    Map<String, String> sourceMap = body.get(0);
    Map<String, String> destinationMap = body.get(1);
    exchange.setProperty("SourceMap", sourceMap);
    exchange.setProperty("DestinationMap", destinationMap);

}

请提供解决方案。

2 个答案:

答案 0 :(得分:6)

您的问题可能有多种解决方案组合。

示例属性键和值。

<cm:property name="app.user" value="PROD008"/>

如果你想用属性值设置标题,请在路由中。使用下面的代码段。

<setHeader headerName="password">
    <simple>${properties:app.user}</simple>
</setHeader>

如果您想使用属性,可以使用以下代码段。

<to uri="{{some.endpoint}}"/>

对于您的示例:如果Properties是SourceMap和DestinationMap,您可以使用以下任何一种。

1. <to uri="bean:validateInputIdentifiers?method=validation(${property.SourceMap}, ${property.DestinationMap})" />

2. <to uri="bean:validateInputIdentifiers?method=validation({{SourceMap}},{{DestinationMap}})" />

如果您想使用标题而不是属性,请使用下面的代码段。

<to uri="bean:validateInputIdentifiers?method=validation(${header.SourceMap}, ${header.DestinationMap})" />

答案 1 :(得分:2)

在点击和试用后,我得到了工作解决方案:

<route>
        <from uri="activemq:queue:start.queue" />
            <to uri="stream:out" />
            <process ref="jsonProcessor"></process>
             <to uri="bean:validateInputIdentifiers?method=validation(${property.SourceMap}, ${property.DestinationMap})" />
    </route>