[英]XMLTokenizeLanguage on camel split EIP
我有一個關於XMLTokenizeLanguage
的問題,更具體地說是關於XMLTokenExpressionIterator.java
:
this.splitpath
接受以“/”分隔的多個標記。
我嘗試以這種方式使用它:==>
.split(body().xtokenize("/ns1:[some type]/ns1:[another type]" 'i', ns))
.streaming()
其中 ns 和 ns1 是命名空間
但管道中沒有結果
你能和我分享更多關於XMLTokenizeLanguage
的內容嗎?
駱駝網站中的示例是關於將 XML 拆分為 1 種 [JAXB java POJO],那么 2 種或更多類型 [JAXB java POJO] 呢? 有可能嗎?
https://camel.apache.org/components/3.18.x/eips/split-eip.html
這是我的 XML 內容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LocationMessages xmlns="http://standards.iso.org/iso/15143/-3">
<Links>
<rel>self</rel>
<href>https://[source domain name ]/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/[equipement id]/Locations/2021-01-01T00:00/2022-09-28T09:34:06.439553/1</href>
</Links>
<Links>
<rel>last</rel>
<href>https://[source domain
name]/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/[equipement
id]/Locations/2021-01-01T00:00/2022-09-
28T09:34:06.439553/1</href>
</Links>
<Location datetime="2022-04-05T09:52:53Z">
<Latitude>43.290143</Latitude>
<Longitude>5.491987</Longitude>
<Altitude>102.375</Altitude>
<AltitudeUnits>metre</AltitudeUnits>
</Location>
<Location datetime="2022-05-04T13:50:57Z">
<Latitude>43.289926</Latitude>
<Longitude>5.492582</Longitude>
<Altitude>77.0</Altitude>
<AltitudeUnits>metre</AltitudeUnits>
</Location>
</LocationMessages>
這是命名空間聲明:
Namespaces ns = new Namespaces("ns1", "http://standards.iso.org/iso/15143/-3");
這是 xtokenize 語言定義的拆分:
.split(body().xtokenize("/ns1:Links/ns1:Location", 'i', ns)).streaming()
當我一次使用一種類型(鏈接或位置)時,拆分 xtokenize 對我有用,但我不想使用 (.multicast()) 來復制管道。
我想通過 2 種類型(鏈接和位置)進行標記化,然后應用內容路由 EIP (choice()) 為每種標記類型選擇路由。
鏈接和位置是 xjc 從 xsd 模式生成的 JAXB pojo 類型。 這里簡要介紹一下它們的結構:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Links", propOrder = {
"rel",
"href"
})
@Generated(value = "com.sun.tools.xjc.Driver", comments = "JAXB RI v3.0.2", date = "2022-08-23T15:17:27+02:00")
public class Links {
@XmlElement(required = true)
@Generated(value = "com.sun.tools.xjc.Driver", comments = "JAXB RI v3.0.2", date = "2022-08-23T15:17:27+02:00")
protected String rel;
@XmlElement(required = true)
@Generated(value = "com.sun.tools.xjc.Driver", comments = "JAXB RI v3.0.2", date = "2022-08-23T15:17:27+02:00")
protected String href;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Location", propOrder = {
"latitude",
"longitude",
"altitude",
"altitudeUnits"
})
@Generated(value = "com.sun.tools.xjc.Driver", comments = "JAXB RI v3.0.2", date = "2022-08-23T15:17:27+02:00")
public class Location {
@XmlElement(name = "Latitude", required = true)
@Generated(value = "com.sun.tools.xjc.Driver", comments = "JAXB RI v3.0.2", date = "2022-08-23T15:17:27+02:00")
protected BigDecimal latitude;
@XmlElement(name = "Longitude", required = true)
@Generated(value = "com.sun.tools.xjc.Driver", comments = "JAXB RI v3.0.2", date = "2022-08-23T15:17:27+02:00")
protected BigDecimal longitude;
@XmlElement(name = "Altitude")
@Generated(value = "com.sun.tools.xjc.Driver", comments = "JAXB RI v3.0.2", date = "2022-08-23T15:17:27+02:00")
protected BigDecimal altitude;
@XmlElement(name = "AltitudeUnits")
@XmlSchemaType(name = "string")
@Generated(value = "com.sun.tools.xjc.Driver", comments = "JAXB RI v3.0.2", date = "2022-08-23T15:17:27+02:00")
protected Altitudeuom altitudeUnits;
@XmlAttribute(name = "datetime", required = true)
@XmlSchemaType(name = "dateTime")
@Generated(value = "com.sun.tools.xjc.Driver", comments = "JAXB RI v3.0.2", date = "2022-08-23T15:17:27+02:00")
protected XMLGregorianCalendar datetime;
您需要使用通配符*
更改xtokenize
表達式以根據其模式定義包含其所有潛在子項,即Links
和Location
。
split
的正確代碼應該是.split(body().xtokenize("/ns1:LocationMessages/ns1:*", 'i', ns)).streaming()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.