<Message>
<Header>
.....some more nodes.....
</Header>
<Element>
.....some more nodes.....
</Element>
<Element>
.....some more nodes.....
</Element>
.....more Element nodes......
</Message>
我想通過節點元素分裂,但保留消息(頭)的其餘部分包括每個消息中。例如使用此XML我想獲得2等,它看起來像:
<Message> <!--root node is alive -->
<Header> <!--header included in every message -->
.....some more nodes.....
</Header>
<Element> <!--only one -->
.....some more nodes.....
</Element>
</Message>
使用分配器我只能得到:
<Element>
.....some more nodes.....
</Element>
我試圖用JAXB封送遍歷元素節點,但這個想法失敗,原因是:不能編組類型「java.lang.String中」爲元素,因爲它缺少一個@XmlRootElement註釋
另外,我試圖用
.split(xpath("//Element"), new MyAgreggatorStrategy())
希望我可以自己處理消息,但每次收到的oldMessage都會得到空值。
你能分享你的想法嗎?
如果我將「in」消息存儲爲某種格式,然後進行拆分然後通過定製處理器將構造我需要的所有東西?我希望,駱駝有更好的溶劑。 謝謝
更新。現在我已經實現了這個功能,就像我之前問的那樣。 (存儲標題作爲屬性,使分裂,恢復消息:像串接「+標題+轉換體+
但我必須包裹我的額外的處理器(分裂之前和之後)所有我的路線。Stil認爲我的問題應該是典型和普遍,我想我錯過了一些東西。
UPDATE2。 更換2個處理器,1個分流豆
public String[] splitBody(Exchange exchange) {
String header = XPathBuilder.xpath("//Header").evaluate(exchange, String.class);
String element = XPathBuilder.xpath("//Element").evaluate(exchange, String.class);
String[] arr = element.split("</Element>");
for (int i = 0; i < arr.length; i++) {
arr[i] = "<Message>" + header + arr[i] + "</Message>";
}
return arr;
}
我想正是這樣做,在過去也沒有找到很多搜索後,任何現成的組件。由於我正在處理大量消息,我最終使用stax編寫了一個自定義組件,該stax足以處理任何類型的消息。我認爲定製解決方案是這裏的一種方式。 –
是的,幸運的是現成的分配器現在還不足以配置 – user1424119