WSO2 api 上下文变得太大

WSO2 api context growing too big

我的 api 文件大小随着我不断添加越来越多的开关调解器案例而不断增长......在 wso2 中拆分和组织它们的最佳方式是什么。以下是其中一个文件的示例...

问题是案例越来越多,文件变得太大了。

有时 'CASE' 之一可以像 100 行!在示例中,我当然使用 (...) 进行混淆。

如有任何帮助,我将不胜感激。理想情况下,有一种方法可以将其分块为更小的文件大小。谷歌搜索后很难找到。我很确定我不是第一个 运行 参与其中的人。

您还可以在这里看到函数 fixDate(given_time) 在此文件中重复出现,最好的方法是一次包含此函数并在整个文件中使用它。

感谢您的任何见解!

文件是 \synapse-config\api\Applications.xml ...并且它的大小在增加...

<?xml version="1.0" encoding="UTF-8"?>
<api context="/applications" name="Applications" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET">
        <inSequence>
            <property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
            ....
        ...
        ...

            <property expression="$url:page" name="uri.var.page" scope="default" type="STRING"/>
            <script language="js"><![CDATA[

            ...
        ></script>
            <payloadFactory description="PayloadFactory" media-type="json">
                <format>
                    
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property('uri.var.ats_credentials')"/>
                </args>
            </payloadFactory>
            <property expression="json-eval($.auth_code)" name="uri.var.auth_code" scope="default" type="STRING"/>
            <log level="full">

            </log>
            <switch source="get-property('uri.var.ats_type')">
                <case regex="CASE 1">

                    <payloadFactory media-type="json">
                        <format>{
                            "filters": [
                            {
                            "name": "applicantworkflow.updateddate",
                            "value": [
                            ""
                            ],
                            "secondaryValue": [
                            ""
                            ]
                            },
                            {
                            "name":
                            "applicantworkflow.id",
                            "value": [
                            ""
                            ],
                            "operator": "&gt;"
                            }
                            ] 

                .......

                <case regex="CASE 2">
                    <script language="js"><![CDATA[function fixDate(given_time) {

            ......


        <case regex="CASE 3">
                    <script language="js"><![CDATA[function fixDate(given_time) {

            ......


        <case regex="CASE 4">
                    <script language="js"><![CDATA[function fixDate(given_time) {

            ......


        //FILE SIZE KEEPS GROWING..... with different cases......


                <default>
                    <log description="Fault Log" level="custom">
                        <property expression="fn:concat('Invalid ATS - ', get-property('uri.var.ats_type'))" name="message"/>
                    </log>
                    <payloadFactory media-type="json">
                        <format>{
                            "Error": "Invalid ATS"
                            }
                        </format>
                        <args/>
                    </payloadFactory>
                    <respond description="Respond"/>
                </default>
            </switch>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
        <faultSequence>
            <send/>
        </faultSequence>
    </resource>
    <handlers>
        <handler class="com.tti.security.OpenSourceAuthHandler"/>
    </handlers>
</api>

最简单的解决方案是使用单独的序列。为每个案例创建一个单独的序列(或者至少是那些变得非常大的案例)。并使用序列中介从开关中介调用序列。

首先将序列保存在您添加到项目的序列文件中:

<sequence name="case1_sequence" xmlns="http://ws.apache.org/ns/synapse">
<case regex="CASE 1">

                    <payloadFactory media-type="json">
                        <format>{
                            "filters": [
                            {
                            "name": "applicantworkflow.updateddate",
                            "value": [
                            ""
                            ],
                            "secondaryValue": [
                            ""
                            ]
                            },
                            {
                            "name":
                            "applicantworkflow.id",
                            "value": [
                            ""
                            ],
                            "operator": "&gt;"
                            }
                            ] 
..
</sequence>

然后在 switch 语句中使用序列调解器来调用序列。

<switch source="get-property('uri.var.ats_type')">
  <case regex="CASE 1">
    <sequence key="case1_sequence"/>
  </case>
  ..
</switch>