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

以编程方式在WSO2 API管理器中添加自定义处理程序,wso2,wso2-am,Wso2,Wso2 Am,我通过一个分别使用WSO2 API管理器和HTTP API的自动化流程创建和订阅新API。我有自定义处理程序,然后通过编辑/repository/deployment/server/synapse configs/default/api中的XML文件将其映射到我的api 有没有一种方法可以通过编程将处理程序映射到新创建的API,这样我就不必手动编辑XML了?换言之,使用API或其他方法查看API的当前处理程序,并添加/删除?我假设您不希望手动编辑所有API的API XML以使用自定义处理程序。相

我通过一个分别使用WSO2 API管理器和HTTP API的自动化流程创建和订阅新API。我有自定义处理程序,然后通过编辑
/repository/deployment/server/synapse configs/default/api
中的XML文件将其映射到我的api


有没有一种方法可以通过编程将处理程序映射到新创建的API,这样我就不必手动编辑XML了?换言之,使用API或其他方法查看API的当前处理程序,并添加/删除?

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

## 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
##打印处理程序
#如果($handlers.size()>0)
#foreach($handlers中的$handlers)
#if($handler.hasProperties())
#set($map=$handler.getProperties())
#foreach($map.entrySet()中的属性)
#结束
#结束
#结束
#结束

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

在我的例子中,我有许多处理程序和许多API。并非所有处理程序都适用于所有API,也没有任何处理程序适用于所有API


我在一个WAR文件中创建了一个独立的HTTP API,并将其部署到API Manager的Carbon实例中,从而解决了这个问题。调用WSO2发布者API的服务随后调用我的HTTP API。API接受处理程序类名作为参数,并将适当的元素注入本地文件系统(我使用JDOM)上的API定义XML文件中。API管理器会自动检测并重新加载修改后的XML,这很好

那很有趣。你能在这里分享你的自定义代码吗?