0

我有以下。参数“g”允许为“on”或“off”,否则进入错误策略。但是,从不调用异常情况。相反,如果不是“on”或“off”的东西作为“g”传递,则调用“on”情况。这是为什么?或者,有没有更好的表达方式?

<PreFlow name="PreFlow">
    <Request>
        <Step>
            <Condition>message.queryparam.g := "on"</Condition>
            <Name>GOn</Name>
        </Step>
        <Step>
            <Condition>message.queryparam.g := "off"</Condition>
            <Name>GOff</Name>
        </Step>
        <Step>
            <Condition>!((message.queryparam.g := "off") || (message.queryparam.g := "on"))</Condition>
            <Name>GError</Name>
        </Step>
    </Request>
4

3 回答 3

1

我同意迈克尔的观点,显示的代码是正确的。

考虑可能导致此代码无法按预期工作的可能问题:

  1. 确保 GOn、GOff 和 GError 策略中的名称正确。(如果您离线工作,文件名与调用哪个策略无关。)例如,GOn 策略的外部元素应该类似于

    <AssignMessage name="GOn">

  2. 如果 GOn 使用 AssignMessage 修改消息,您可能会在一个步骤中吹走 g 查询参数,并且您以后的检查可能会失败。如果您正在修改消息,请在进行检查之前将 message.queryparam.g 存储到不同的变量中。

  3. 我会使用跟踪工具Postman之类的工具来查看每个请求发生了什么。跟踪应该告诉您已检查的变量及其值,您可能能够看到哪里出错了。

于 2014-01-21T16:51:36.050 回答
1

我刚刚测试了你的条件,它们工作正常。如果请求具有以下查询参数值:

g=ong=ON,将执行 GOn 策略。

g=offg=OFF,将执行 GOff 策略。

g={anythingelse},将执行 GError 策略。

:=运算符是不区分大小写的等于运算符。您如何确定这些条件不起作用?使用您的示例,我将每个策略都设为具有不同故障响应负载的 RaiseFault。这使我能够根据g.

于 2014-01-21T16:29:15.503 回答
1

如果您有多个条件检查,请尝试使用 javascritp。在 java 脚本中检查各种条件并设置标志。并在基于标志值的流程中执行所需的策略。但是对于上述实例,正如迈克尔指出的那样,条件应该按预期工作。

于 2014-01-22T08:26:31.987 回答