如何在WSO2序列中触发错误?

时间:2017-05-24 12:24:50

标签: error-handling sequence mediator wso2ei

我想创建一个输入序列,用交换机中介检查一个参数。如果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>

1 个答案:

答案 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>