簡體   English   中英

Apache Camel文件分割器示例

[英]Apache Camel File Splitter by Example

我得到的文件包含用換行符(“ \\n ”)分隔的數字ID:

123948
939904
129384
234049

等等。我想使用Camel將文件轉換為以下POJO的實例:

public class IDFile {
    private String fileName;    // The name of the file
    private List<Long> ids;     // All the IDs in the file (123948, 939904, etc.)

    // Constructor, getters/setters, etc.
}

我正在嘗試查看是否可以使用Camel的Splitter組件來完成此操作,但是感覺就像是我正在試圖將圓釘插入方孔中:

<route>
    <from uri="file://input/idfile"/>
    <split streaming="true">
        <tokenize token="\n" />
        <to uri="bean://idfileProcessor?method=process"/>
    </split>
</route>

上面的代碼看起來像將我的文件分割成List<Long> ,但是我也需要與列表關聯的文件名。 有任何想法嗎?

交換上有一個標題“ CamelFileName”。 您的處理器/ bean被傳遞了一個對交換的引用,您可以從那里獲取標頭並將其與調用您的令牌相關聯。

您的路線可能如下所示:

<camel:route id="splitter_test">
    <camel:from uri="file:///home/steppra1/camel_test?delete=true&amp;idempotent=true" />
    <camel:to uri="bean:splitBean?method=init" />
    <camel:split streaming="true">
        <camel:tokenize token="\n" />
        <camel:to uri="bean:splitBean?method=addToken" />
    </camel:split>
    <camel:to uri="bean:splitBean?method=done" />
    <camel:log message="${in.body}" loggingLevel="INFO" logName="split_test" />
</camel:route>

您用來維護交換對象上狀態的Bean:

public class SplitBean {
    public Object init(Exchange exchange) {
        exchange.setProperty("splitTokens", new ArrayList<Integer>());
        return exchange.getIn().getBody();
    }

    public Object addToken(Exchange exchange) {
        ((List<Integer>)exchange.getProperty("splitTokens")).add(Integer.parseInt((String)exchange.getIn().getBody()));
        return null;
    }

    public Tuple done(Exchange exchange) {
        return new Tuple<String, List<Integer>>((String)exchange.getIn().getHeader("CamelFileName"), (List<Integer>)exchange.getProperty("splitTokens"));
    }
}

包含行的文件

1
2
3
5

以名稱splitter.text和splitter_2.txt的名稱饋入路由會產生以下日志輸出:

2013-12-18 18:20:02,081 INFO  split_test - Tuple [first=splitter.txt, second=[1, 2, 3, 5]]
2013-12-18 18:20:46,610 INFO  split_test - Tuple [first=splitter_2.txt, second=[1, 2, 3, 5]]

HTH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM