Pregunta

Cuando se utiliza el componente exec es posible especificar argumentos en línea en lugar de tener que ajustarlas en el ExecBinding.EXEC_COMMAND_ARGS?

Por ejemplo tengo esta ruta:

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}")

Sin embargo, habría pensado que podría utilizar la expresión simple lenguaje de simplificarlo así:

from("seda:getPolicyListStart")
.to("exec:some_command?useStderrOnEmptyStdout=true&args=${body.client} ${body.sort}")
.convertBodyTo(String.class)
.log("Executed OS cmd and received: ${body}")

Al igual que cómo se puede utilizar archivos de idioma (un subconjunto de simple) cuando se utiliza el archivo de componentes.

¿Es posible? Si no es así, se puede simplificar el primer ejemplo?

Actualizar [solución]:

    from(requestNode)
    .routeId(routeId)
    .recipientList(simple("exec:"+osCmd+"?useStderrOnEmptyStdout=true&args=${body.client}"))
    .convertBodyTo(String.class)
    .log("Executed OS cmd and received: ${body}")
    .to(responseNode);

Gracias.

¿Fue útil?

Solución

La respuesta está en los patrones de EIP. Es necesario utilizar el patrón de la lista EIP dinámico receptor cuando se calcule un destino de punto final en tiempo de ejecución.

http://camel.apache.org/recipient-list.html

La lista de destinatarios acepta una expresión que significa que puede utilizar el lenguaje simple para construir los parámetros en tiempo de ejecución

Otros consejos

Esto me llevó mucho más tiempo para entender de lo que debería de hacer, por lo que para otros que tropiezo y no entenderá nada.

En la primavera de XML como las miradas por encima

<recipientList>
   <simple>exec:/usr/bin/php?args=yii individual-participant-report/runreport ${body[assessment_id]} ${body[scope_id]} ${body[participation_id]} ${body[participation_email]}&amp;workingDir={{reporting.folder}}</simple>
</recipientList>

En este ejemplo estoy creando una petición dinámica para ejecutar algunos php (en concreto un comando yü 2) que está poblada por medio de las variables en el mapa hash / $ cuerpo que se genera a partir de una consulta SQL antes en la ruta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top