基于Camel拆分EIP的XMLTokenize语言

w80xi6nr  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(163)

我有一个关于XMLTokenizeLanguage的问题,更具体地说是关于XMLTokenExpressionIterator.java的问题:

this.splitpath接受以“/"分隔的多个标记。
我试着这样使用它:==〉

.split(body().xtokenize("/ns1:[some type]/ns1:[another type]" 'i', ns))
    .streaming()

其中ns和ns 1是命名空间
但还没有结果
你能和我分享更多关于XMLTokenizeLanguage的内容吗?
Camel网站中的例子是关于按1个类型[JAXB java POJO]拆分XML,那么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()

当我一次使用1个类型(链接或位置)时,拆分xtokenize对我有效,但我不想使用(.multicast())来复制管道。
我想通过2种类型(链接和位置)进行令牌化,然后应用内容路由EIP(选择())为每种令牌类型选择路由。
链接和位置是xjc从xsd模式生成的JAXB pojo类型。下面是它们结构的一部分:
第一个

2izufjch

2izufjch1#

根据its schema definition,您需要使用通配符*更改xtokenize表达式,以包括其所有可能的子代,即LinksLocation
split的正确代码应该是.split(body().xtokenize("/ns1:LocationMessages/ns1:*", 'i', ns)).streaming()

相关问题