1
我想編寫一個駱駝批:Apache Camel:構建XML解析批處理的正確方法?
- 過程的特定目錄內,每個文件中的所有文件:
- 驗證XML與XSD架構
- 和解組不同的部分和處理數據
- 沒有停止對異常
- 如果發生至少一個錯誤,將失敗dirrectory末,移動到完成,否則
的困難,我遇到:
- 文件組件允許自動移動上完成文件/失敗目錄,但只要你使用分流/聚合器,該文件是 總是在做,唐遷甚至不會等待聚合完成。
- 管理的例外是不直觀
- 斯普利特和aggretors是噩夢並沒有在文檔足夠的「現實世界」的例子
- 複雜結構的XML標記化給我們帶來了一些超出理解
當然,我遇到這些問題,因爲我是新來的Apache駱駝:)
的什麼,我試圖做的想法:
- 文件組件(OK)
- XSD驗證(好吧,如果錯誤,文件部件移動到失敗)
- 做出了破裂/多播讀取XML,當出現錯誤時,我們忽略了的異常,保持頭錯誤,並繼續(不是真的好,我可以讀,但不管理正確地聚合)
- 我們彙總(其實沒什麼可聚集, 我們只是要檢查所有的頭)
- 如果錯誤,我們明確將 移至失敗的目錄
簡化XML這個例子:
<root>
<library></library>
<books year="2015">
<book></book>
<book></book>
... many
</books>
<books year="2016">
<book></book>
<book></book>
... many
</books>
... many years
</root>
你將如何構建批次這樣的XML? 此外,讓我們假設你必須先閱讀「庫」(並使用管道)。此外,在頭(布爾)保存錯誤的想法是好的?
注意:特別感謝克勞斯·易卜生對SO的許多駱駝帖子作出迴應,但也請儘量不要在Apache Camel文檔中給出一個簡單的鏈接:)對於新手來說,Apache Camel文檔sux是真的。
謝謝
想法恰恰是不加載全部在內存中一次,但使用SAX解析和部分解組:) – user2668735
@ user2668765使用'streaming'分路器與XML標記生成器,然後解組的單個對象。請參閱http://www.davsclaus.com/2011/11/splitting-big-xml-files-with-apache.html –
謝謝您,但是您的鏈接顯示了一個太基本(並且太舊)的示例。最初的需求可能包括多播和嵌套分離器/聚合器。我真的期望看到幾乎確切的答案。我們完全沒有在所有的互聯網上找到關於「如何解析XML」與Apache Camel,我的意思是,至少複雜的XML是瘋狂的。我很快在駱駝行動中搜索,總是一樣的:沒有現實生活中的例子。 – user2668735