gpt4 book ai didi

java - 为什么我的 Apache Camel 条件路由总是执行第一个选项?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:42 26 4
gpt4 key购买 nike

我有一个 Camel 路由(除其他外)应该运行 validator ,但前提是设置了某个属性,即 com.acme.ValidatorOn .

路线的相关部分如下所示:

<choice>
<when>
<simple>{{com.acme.ValidatorOn}} == true</simple>
<to uri="validator:MyWebService.xsd" />
</when>
</choice>

当我注意到即使属性设置为 false 时, validator 也总是被执行, 我开始试验这种情况。

<choice>
<when>
<simple>{{com.blahblahthiswillnotwork.ValidatorOn}} == true</simple>
<to uri="validator:MyWebService.xsd" />
</when>
</choice>

即使使用伪造的属性名称,验证程序仍在执行。所以我更进一步,还添加了一个 <otherwise> :

<choice>
<when>
<simple>5 == 6</simple>
<log message="first choice" />
</when>
<otherwise>
<log message="second choice"/>
</otherwise>
</choice>

这会打印“first choice”。无论我在 <simple> 中输入什么表达式, 第一个选择被执行。我试过显然不正确的表达式,例如 'foo' == 'bar'甚至只是胡言乱语。

我查看了有关基于内容的路由的 Camel 文档,我的设置方式似乎没有错误。我正在使用 Camel 2.8.1 和 Java 8 update 45。

以下是完整的路线,以防 route 可能有其他东西搞砸了(名称已更改以保护无辜者):

<route autoStartup="false" id="com.acme.doStuffRoute">
<from uri="spring-ws:rootqname:{namepace}doStuff?endpointMapping=#com.acme.EndpointMapping"/>
<setHeader headerName="Exchange.HTTP_QUERY">
<simple>certainProperty=${ref:certainProperty}</simple>
</setHeader>
<setHeader headerName="CamelHttpMethod">
<constant>POST</constant>
</setHeader>
<policy ref="com.acme.Administrators">
<choice>
<when>
<simple>{{com.acme.ValidatorOn}} == true</simple>
<to uri="validator:MyWebService.xsd"/>
</when>
</choice>
<to pattern="InOut" uri="xslt:/xslt/do-stuff-request.xsl?transformerFactory=transformerFactory&amp;uriResolver=uriResolver"/>
<to ref="com.acme.ToLogging"/>
<transform>
<method bean="msgTransform" method="encrypt"/>
</transform>
<to uri="ref:doMoreStuffEndpoint"/>
<transform>
<method bean="msgTransform" method="decrypt"/>
</transform>
<to ref="com.acme.FromLogging"/>
<to uri="xslt:/xslt/do-stuff-request.xsl?transformerFactory=transformerFactory&amp;uriResolver=uriResolver"/>
<process ref="com.acme.MetricsProcessor"/>
</policy>
</route>

最佳答案

迟到的答案,但将来可能会有所帮助。来自 documentation :

解析器仅限于支持单个运算符。
要启用它,必须将左值包含在 ${ } 中.语法是:

${leftValue} OP rightValue

你必须使用 Camel 简单表达式。 IE。使用您的属性值设置 header ,然后使用 ${headers.yourHeader}里面<when> .

编辑:我找到了一个更好的解决方案:使用 Camel 简单的方法来获取属性:${properties:com.acme.ValidatorOn}

关于java - 为什么我的 Apache Camel 条件路由总是执行第一个选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32466592/

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