我想创建一个输入序列,用交换机中介检查一个参数。如果param的值与特定字符串不对应,则应抛出错误并在Fault序列中移动流。
例如,我创建了这个序列:
<sequence name="testEquivalence" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<switch source="$ctx:uri.var.myParam">
<case regex="hello">
<log description="DISPLAY" level="full">
<property name="value" value="RIGHT VALUE FOR THE PARAM myParam"/>
</case>
<default>
<log description="FAULT" level="full">
<property name="FAULT" value="WRONG VALUE FOR THE PARAM myParam"/>
</log>
<makefault version="pox">
<reason value="Wrong value"/>
<detail expression="'Wrong value. Try with hello.'"/>
</makefault>
</default>
</switch>
</sequence>
正如您所看到的,如果可以的话,我想显示一条日志“PARAM myParam的正确值”。或者,我想显示一个日志,然后在默认部分中停止该过程以传递故障序列。
但是,我创建了一个makefault介体来“模型化”我的错误,但有可能用更多的东西替换它......执行程序停止进程并在故障序列中重定向流,就像抛出异常一样? / p>
答案 0 :(得分:1)
无法在WSO2 ESB / EI中抛出异常。通常在创建SOAPFault之后,您希望将其返回给服务的调用者。解决方案是在Fault介体之后使用Response Mediator:
<sequence name="testEquivalence" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<switch source="$ctx:uri.var.myParam">
<case regex="hello">
<log description="DISPLAY" level="full">
<property name="value" value="RIGHT VALUE FOR THE PARAM myParam"/>
</case>
<default>
<log description="FAULT" level="full">
<property name="FAULT" value="WRONG VALUE FOR THE PARAM myParam"/>
</log>
<makefault version="pox">
<reason value="Wrong value"/>
<detail expression="'Wrong value. Try with hello.'"/>
</makefault>
<respond/>
</default>
</switch>
</sequence>