我在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中引用它们的正确方法是什么?
非常感谢和亲切的问候,
答案 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>