WSO2:避免在地址端点中对URI端口进行硬编码

时间:2019-07-02 08:32:13

标签: wso2

我在carbon.xml文件上为我的ESB服务器配置了偏移量“ 10”。现在所有已部署的API都指向端口8290。

在我的API中,我正在通过Http端点调用另一个API。我将URI模板手动设置为:http://localhost:8290/paramAPI,如下所示:

<send>
   <endpoint>
      <http method="get" uri-template="http://localhost:8290/paramAPI"/>
   </endpoint>
</send>

但是,我也想部署到其他服务器实例。例如,我想部署到偏移量为'20'的服务器,因此'/ paramAPI'在端口'8290'而不是在'8300'上不再可用。

在这种情况下,发送介体内部的Http端点必须变为:

<send>
   <endpoint>
      <http method="get" uri-template="http://localhost:8300/paramAPI"/>
   </endpoint>
</send>

我正在寻找一种参数化端口值的方法。

我试图通过在服务器上通过名称APIPort定义一个字符串变量来使用本地条目。引用它时,我对HTTP端点进行了如下修改:

<send>
    <endpoint>
       <http method="get" uri-template="http://localhost:{APIPort}/paramAPI"/>
    </endpoint>
 </send>

但是我得到了:java.net.MalformedURLException:对于输入字符串:“ {APIPort}”

参数化URI的最佳方法是什么?如果使用本地条目,那么将它们用作参数并在URI中引用它们的正确方法是什么?

非常感谢和亲切的问候,

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,应该将uri.var用于uri-template属性。尝试改为命名您的媒体资源uri.var.APIPort

为确保创建了一个简单的API,请参见以下示例:

<api xmlns="http://ws.apache.org/ns/synapse" name="testapi" context="/test" version="1" version-type="context">
   <resource methods="POST GET">
      <inSequence>
         <property name="uri.var.version" value="v2"/>
         <send>
            <endpoint>
               <http uri-template="http://mocky.io/{uri.var.version}/5d1dec2a3000006a00d7239d"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </resource>
</api>