Как передать значение из службы отдыха в верблюжий маршрут? - PullRequest
0 голосов
/ 30 октября 2018

Я выставил в качестве услуги, как показано ниже

restConfiguration().component("servlet").bindingMode(RestBindingMode.json);
    rest("/batchFile").consumes("application/json").post("/routeStart").type(BatchFileRouteConfig.class).to("startRouteProcessor");

На основании запроса от службы отдыха, я бы запустил верблюжий маршрут в процессоре, как показано ниже

@Component("startRouteProcessor")
public class StartRouteProcessor implements Processor {


    public void process(Exchange exchange) throws Exception {
        BatchFileRouteConfig config = exchange.getIn().getBody(BatchFileRouteConfig.class);
        String routeId = config.getRouteId();
        String sourceLocation = config.getSourceLocation();
        exchange.getContext().startRoute(routeId);
    }
}

Мне нужно передать исходное местоположение сверху bean-компонента ниже маршрута

@Component
public class FileReaderRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("file:sourceLocation")
       .log("File Reader Route route started");
    }

}

Выше приведен пример кода .. попросите вас помочь мне передать исходное местоположение из StartRouteProcessor в FileReaderRoute

1 Ответ

0 голосов
/ 31 октября 2018

Это невозможно, так как в вашем примере FileReaderRoute уже запущен во время вызова batchFile конечной точки.

Вы можете сделать это немного по-другому.

Извлеките ваши FileReaderRoute до direct. Что-то вроде:

@Component
public class FileReaderRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("direct:fileReaderCommon")
       .log("File Reader Route route started");
    }
}

А затем вы можете создать новый маршрут во время выполнения:

@Component("startRouteProcessor")
public class StartRouteProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        BatchFileRouteConfig config = exchange.getIn().getBody(BatchFileRouteConfig.class);

        exchange.getContext().addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("file:"+config.getSourceLocation())
                    .routeId(config.getRouteId())
                    .to("direct:fileReaderCommon");
            }
        });
    }
}

Не забудьте провести достаточную дезинфекцию ввода, поскольку вы разрешаете пользователю создавать приемник файлов на основе пользовательского ввода. В вашем подходе существует высокий риск атаки обхода пути.

...