验证调解员

时间:2018-07-11 17:02:24

标签: wso2 wso2-am

我可以使用Validate mediator来验证同一API中的不同资源(不同的json方案)吗?

2 个答案:

答案 0 :(得分:0)

是的,您可以使用它。您需要按照https://docs.wso2.com/display/AM210/Adding+Mediation+Extensions中的说明使用自定义序列。最好将API管理器中进行的冥想最小化。如果您需要进行大量调解,最好将调解部分移至另一个调解引擎,例如WSO2 ESB。

答案 1 :(得分:0)

经过研究,我设法构建了以下调解器。

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="validateSomething" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log level="custom">
        <property expression="get-property('API_ELECTED_RESOURCE')" name="API_ELECTED_RESOURCE"/>
        <property expression="get-property('api.ut.HTTP_METHOD')" name="api.ut.HTTP_METHOD"/>
    </log>
    <switch source="get-property('API_ELECTED_RESOURCE')">
        <case regex="/v1/myResource/\{id\}">
            <filter regex="GET" source="get-property('api.ut.HTTP_METHOD')">
                <then>
                    <validate>
                        <schema key="conf:/schema/ObjectSchema.json"/>
                        <on-fail>
                            <payloadFactory media-type="json">
                                <format>{"Error validating JSON returned by the Backend":$1}</format>
                                <args>
                                    <arg evaluator="xml" expression="$ctx:ERROR_MESSAGE"/>
                                </args>
                            </payloadFactory>
                            <property name="HTTP_SC" scope="axis2" type="STRING" value="500"/>
                            <respond/>
                        </on-fail>
                    </validate>
                </then>
                <else/>
            </filter>
        </case>
        <default>
            <respond/>
        </default>
    </switch>
</sequence>