如何调用读取文件的骆驼路线?

时间:2018-06-29 18:41:11

标签: java apache-camel enterprise-integration

我有骆驼路线来读取文件,如下所示:

@Component
public class MessageRoute extends RouteBuilder {

    public static final String ROUTE_ID = "message.route";
    public static final String ROUTE_URI = "{{message.route.uri}}";

    @Override
    public void configure() throws Exception {

        from("file:://target/test.txt")
                .convertBodyTo(String.class)
                .process(exchange -> {
                    log.info("Body {}", exchange.getIn().getBody(String.class));
                });
    }
}

现在,问题是如何拨打此路线?我的最终目标是从producerTemplate调用并处理文件内容。

我在Camel Docs

上找不到任何相关信息

此外,我尝试使用this answer中提到的pollEnrich,但在调试时,聚合器根本无法执行。

如果有任何解决方案,建议或想法,我将感谢上百万美元。

3 个答案:

答案 0 :(得分:1)

我不得不做类似的事情。以下内容适用于骆驼2.18+-

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.orbisgis</groupId>
            <artifactId>h2gis-functions</artifactId>
            <version>1.3.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-spatial</artifactId>
            <version>5.4.17.Final</version>
        </dependency>

答案 1 :(得分:0)

您想测试什么?文件组件已经由Camel测试过。为了测试路由中涉及的处理器和bean,您基本上不需要文件组件,因此建议使用路由来将from部分替换为direct:start,这是推荐的方法。

如果您坚持要测试可在文件或目录上使用的文件组件,则应将测试文件写入测试中的测试目录,然后开始路由,查看文件是否被正确使用和处理。 JUnit提供了一个TemporaryFolder,它可以帮助您创建和清理测试目录。您可以看到my answer to a similar question来了解如何使用骆驼来实现。

答案 2 :(得分:0)

我实际上是在尝试从另一条路线调用此路线或将其级联到一条路线中。我发现这可行:

public static final String FILE_ROUTE_ID = "file.route";
public static final String FILE_ROUTE_URI = "{{file.route.uri}}";

@Override
public void configure() throws Exception {

    from(FILE_ROUTE_URI)
            .routeId(FILE_ROUTE_ID)
            .log(LoggingLevel.INFO, "Header {}", String.valueOf(simple("${header.purpose}")))
            .from("file:apache-camel-spring-boot?fileName=printing.key&noop=true")
            .convertBodyTo(String.class)
            .process(exchange -> {
                log.info("Processing file . . .");
                KeyBody keyBody = new KeyBody(exchange.getIn().getBody(String.class));
                exchange.getIn().setBody(keyBody);
            });
}

谢谢大家调查!!干杯!