簡體   English   中英

以編程方式在WSO2 API Manager中添加自定義處理程序

[英]Programmatically add custom handler in WSO2 API Manager

我通過分別使用WSO2 API Manager的PublisherStore HTTP API的自動化流程創建和訂閱新API。 我有自定義處理程序,然后通過編輯<APIM_HOME>/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接合。 在此文件中,最后,您將找到一個處理程序部分。 您需要編輯此文件並在其中添加處理程序,如下所示。

## 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 Manager的Carbon實例的WAR文件中創建獨立的HTTP API來解決這個問題。 調用WSO2 Publisher API的相同服務隨后調用我的HTTP API。 API將處理程序類名稱作為參數,並將適當的元素注入到本地文件系統上的API定義XML文件中(我使用了JDOM)。 API Manager會自動檢測並重新加載修改后的XML,這樣做很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM