以编程方式在 WSO2 API 管理器中添加自定义处理程序

Programmatically add custom handler in WSO2 API Manager

我通过分别使用 WSO2 API 经理的 Publisher and Store HTTP API 的自动化流程创建和订阅新的 API。我有自定义处理程序,然后通过编辑 <APIM_HOME>/repository/deployment/server/synapse-configs/default/api.

中的 XML 文件映射到我的 APIs

有没有办法以编程方式将处理程序映射到新创建的 API,这样我就不必手动编辑 XML?换句话说,API 或其他方法可以查看 API 和 add/remove?

的当前处理程序

我假设您不想为所有 API 手动编辑 API XML 以使用自定义处理程序。相反,您希望能够在发布 API 时自动让处理程序处理所有 API。您可以通过编辑 $APIM_HOME/repository/resources/api_templates/velocity_template.xml 来完成。这是模板文件,它决定默认使用 APIs 处理哪些处理程序。在此文件的末尾,您将找到一个处理程序部分。您需要编辑此文件并在其中添加您的处理程序,如下所示。

## print the handlers
#if($handlers.size() > 0)
<handlers xmlns="http://ws.apache.org/ns/synapse">
    <handler class="org.wso2.carbon.samples.handlers.MyCustomHandler"/>
    #foreach($handler in $handlers)
    <handler xmlns="http://ws.apache.org/ns/synapse" class="$handler.className">
        #if($handler.hasProperties())
            #set ($map = $handler.getProperties() )
            #foreach($property in $map.entrySet())
                <property name="$!property.key" value="$!property.value"/>
            #end
        #end
    </handler>
    #end
</handlers>
#end

如您所见,我已经添加了我的处理程序 org.wso2.carbon.samples.handlers.MyCustomHandler。这就是你应该做的。如果您现在创建并发布 API,MyCustomHandler 将自动与您的 API 互动。但是,即使您更新 velocity_templates.xml,已经发布的 API 也不会生效。您需要重新发布它们才能获得效果。

就我而言,我有很多处理程序和很多 API。并非所有处理程序都适用于所有 API,也没有处理程序适用于所有 API。

我通过在部署到 API 管理器的 Carbon 实例的 WAR 文件中创建一个独立的 HTTP API 来解决这个问题。调用 WSO2 Publisher API 的同一服务随后调用我的 HTTP API。 API 将处理程序 class 名称作为参数,并将适当的元素注入到本地文件系统(我使用 JDOM)上的 API 定义 XML 文件中。 API 管理器自动检测并重新加载修改后的 XML,一切顺利。