我通过分别使用WSO2 API Manager的Publisher和Store HTTP API的自动化流程创建和订阅新API。我有自定义处理程序,然后通过编辑<APIM_HOME>/repository/deployment/server/synapse-configs/default/api
中的XML文件来映射到我的API。
有没有办法以编程方式将处理程序映射到新创建的API,这样我就不必手动编辑XML了?换句话说,API或其他方法来查看API的当前处理程序,并添加/删除?
答案 0 :(得分:3)
我假设您不想手动编辑所有API的API XML以使用自定义处理程序。相反,您希望在发布API时能够自动将处理程序引用到所有API。您可以通过编辑$ APIM_HOME / repository / resources / api_templates / velocity_template.xml来完成此操作。这是模板文件,它默认决定哪些处理程序与API接合。在此文件中,最后,您将找到一个处理程序部分。您需要编辑此文件并在其中添加处理程序,如下所示。
## 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也不起作用。您需要重新发布它们才能获得效果。
答案 1 :(得分:1)
就我而言,我有很多处理程序和许多API。并非所有处理程序都适用于所有API,并且任何处理程序都不适用于所有API。
我通过在部署到API Manager的Carbon实例的WAR文件中创建独立的HTTP API来解决这个问题。调用WSO2 Publisher API的相同服务随后调用我的HTTP API。 API将处理程序类名称作为参数,并将适当的元素注入到本地文件系统上的API定义XML文件中(我使用了JDOM)。 API Manager会自动检测并重新加载修改后的XML,这样做很有用。