簡體   English   中英

XMLTokenizeLanguage on camel split EIP

[英]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表達式以根據其模式定義包含其所有潛在子項,即LinksLocation

split的正確代碼應該是.split(body().xtokenize("/ns1:LocationMessages/ns1:*", 'i', ns)).streaming()

暫無
暫無

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

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