我有以下内容。允许参数“g”为“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>
答案 0 :(得分:1)
我刚刚测试了你的条件并且它们正常工作。如果请求具有以下查询参数值:
g=on
或g=ON
,GOn政策将会执行。
g=off
或g=OFF
,GOff政策将会执行。
g={anythingelse}
,GError政策将会执行。
:=
运算符是equals不区分大小写的运算符。你是如何确定条件不起作用的?使用您的示例,我将每个策略设置为具有不同故障响应有效负载的RaiseFault。这使我可以根据g
的值验证执行了哪个策略。
答案 1 :(得分:1)
我同意Michael的看法,所示的代码是正确的。
考虑可能导致此代码无法按预期工作的可能问题:
确保GOn,GOff和GError政策中的名称正确无误。 (如果您正在脱机工作,则文件名与调用哪个策略无关。)例如,GOn策略的外部元素应该类似于
&lt; AssignMessage name =“GOn”&gt;
如果GOn使用AssignMessage修改消息,您可能会在一个步骤中吹走g查询参数,以后的检查可能会失败。如果要修改消息,请在执行检查之前将message.queryparam.g存储到其他变量中。
我会使用trace tool和Postman之类的工具来查看每个请求的内容。跟踪应告诉您已检查的变量及其值,您可能会看到出错的地方。
答案 2 :(得分:1)
如果你有多个条件检查,请尝试使用javascritp。在java脚本中检查各种条件并设置flag.And在基于flag值的流程中执行所需的策略。但是对于上面的实例,正如迈克尔指出的那样,条件应该按预期工作。