Camel - 在Spring DSL中使用属性

Sid*_*eva 2 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>
Run Code Online (Sandbox Code Playgroud)

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

这是流程方法代码:

@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);

}
Run Code Online (Sandbox Code Playgroud)

请提供解决方案.

Pra*_*ngh 6

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

示例属性键和值.

<cm:property name="app.user" value="PROD008"/>
Run Code Online (Sandbox Code Playgroud)

在Route中,如果你想设置带有属性值的标题.使用下面的代码段.

<setHeader headerName="password">
    <simple>${properties:app.user}</simple>
</setHeader>
Run Code Online (Sandbox Code Playgroud)

如果您想使用属性,可以使用下面的代码段.

<to uri="{{some.endpoint}}"/>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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