gpt4 book ai didi

java - Camel 路线xpath过滤器

转载 作者:行者123 更新时间:2023-12-01 09:04:31 28 4
gpt4 key购买 nike

我在 Camel route 被xpath过滤器卡住了,我找不到解决方案......

这是我的 xml 消息

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
xmlns:ct="http://com/fr/test">
<env:Header>
<receptionTime xmlns="http://com/fr/test">2016-02-12T14:40:56+0100
</receptionTime>
<correlationId xmlns="http://com/fr/test">944689bc-9605-4292-929a-3b2e8a5eddd7
</correlationId>
<equipmentType xmlns="http://com/fr/test">WCA</equipmentType>
<messageType xmlns="http://com/fr/test">Reservation</messageType>
</env:Header>
<env:Body>
<content xmlns="http://com/fr/test"></content>
</env:Body>

我的路线是这样的:

 from("activemq-ext-in:queue:" + queueName)
.id("amq-transfert-downward-route")
.filter().xpath("/env:Envelope/env:Header/equipmentType/text()='WCA'")
//.when(body().contains("WCA"))
.to("activemq-ext-out:topic:" + topicName);

我的消息从未到达我的主题:(如果我取消注释when子句,并注释过滤器,我的消息已正确发送,但我想使用过滤器

有人可以帮助我如何找到好的 xpath 表达式吗?

也许我可以使用.choice().when(xpath...).to(...)?

我只需要一个正确的解决方案:)

非常感谢!

最佳答案

看起来像是命名空间前缀问题。您可以使用“env:”限定 Envelope,只要该前缀映射到正确的命名空间就可以了。但是,您在 EquipmentTest 上缺少合适的限定符,该限定符位于不同的命名空间中。

请参阅Camel docs关于如何配置命名空间。

Namespaces ns = new Namespaces("ct", "http://com/fr/test")
.add("env", "http://www.w3.org/2003/05/soap-envelope");

from("activemq-ext-in:queue:" + queueName)
.id("amq-transfert-downward-route")
.filter(
ns.xpath("/env:Envelope/env:Header/ct:equipmentType/text()='WCA'")
).to("activemq-ext-out:topic:" + topicName);

更新:更改为使用 OP 示例,而不是 Camel 文档中的示例。我还没有测试过,但看起来差不多。

关于java - Camel 路线xpath过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41398116/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com