Reputation: 11550
When using the exec
component is it possible to specify args inline rather than having to set them in the ExecBinding.EXEC_COMMAND_ARGS
?
For example I have this Route:
from("seda:getPolicyListStart")
.process(new Processor() {
public void process(Exchange e) {
ClientRequestBean requestBean = (ClientRequestBean)e.getIn().getBody();
List<String> args = new ArrayList<String>();
args.add(requestBean.getClient());
args.add(requestBean.getSort());
e.getOut().setHeader(ExecBinding.EXEC_COMMAND_ARGS, args);
}
})
.to("exec:some_command?useStderrOnEmptyStdout=true")
.convertBodyTo(String.class)
.log("Executed OS cmd and received: ${body}")
However I would have thought that I could use the Simple Expression Language to simplify it like so:
from("seda:getPolicyListStart")
.to("exec:some_command?useStderrOnEmptyStdout=true&args=${body.client} ${body.sort}")
.convertBodyTo(String.class)
.log("Executed OS cmd and received: ${body}")
Similar to how you can use File Language (a subset of Simple) when you use the File Component.
Is it possible? If not, can the first example be simplified?
Upvotes: 5
Views: 6955
Reputation: 1322
This took me far longer to understand than it should of done, so for others that stumble here and get confused.
In Spring XML the above looks like
<recipientList>
<simple>exec:/usr/bin/php?args=yii individual-participant-report/runreport ${body[assessment_id]} ${body[scope_id]} ${body[participation_id]} ${body[participation_email]}&workingDir={{reporting.folder}}</simple>
</recipientList>
In this example I'm creating a dynamic request to run some php ( specifically a yii 2 command ) which is populated via variables in the hashmap/$body which was generated from a sql query earlier on in the route.
Upvotes: 2
Reputation: 55550
The answer is in the EIP patterns. You need to use the dynamic recipient list EIP pattern when you compute an endpoint destination at runtime.
http://camel.apache.org/recipient-list.html
The recipient list accepts an expression which means you can use the Simple language to construct the parameters at runtime
Upvotes: 7