我有一个集中定义的端点,指向RESTful API。目前它是一个HTTP端点,但如果需要,我也可以使用地址端点。
我的问题是,我似乎无法找到一种方法来访问属性介体中的端点URI (就像使用LocalEntry一样)。我需要在后续请求中嵌入URI,所以我想做类似的事情:
<property name="api_endpoint" expression="get-property('ApiEndpoint')"/>
其中ApiEndpoint
是ESB中集中定义的端点。然后,我可以使用PayloadFactory介体将其嵌入到更多请求中。
对此的任何帮助将不胜感激。
Strainy
类似于以下答案的东西会做得很好:
https://stackoverflow.com/a/15265345/1784962
如果我可以访问配置注册表并获得类似于以下属性的端点XML配置,那就太棒了:
<property name="test"
expression="string(get-property('registry', 'conf:/endpoints/Drupal_Endpoint.xml')//@uri-template)"/>
答案 0 :(得分:2)
根据我的理解,您正在尝试设置动态端点。您可以使用HTTP端点模板[1]来实现此目的。找到以下示例代理服务。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="DynamicEndPointProxyService"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="endpoint_1"
value="http://ajanthan-ThinkPad-T440p:8089/test/get"
type="STRING"/>
<log level="custom">
<property name="SET ENDPOINT: " expression="get-property('endpoint_1')"/>
</log>
<send>
<endpoint name="endpointName"
template="HttpEndPointTemplate"
uri="${endpoint_1}"/>
</send>
<log level="full"/>
</inSequence>
<outSequence>
<log level="full"/>
<send/>
</outSequence>
</target>
<description/>
</proxy>
[1] https://docs.wso2.com/display/ESB481/Working+with+Templates
如果这是您所期望的,请更新。
感谢。 Ajanthan
答案 1 :(得分:0)
非常感谢@ ajanthan-eliyatham提供有关设置动态端点的提示!事实证明这是一个简单的解决方案,但我想比ajanthan所呈现的更详细一些(尽管如果有人 - 包括ajanthan - 希望扩展我的答案,我很高兴将其标记为正确)。
选择&#34; 保存在注册表中&#34;这一点非常重要保存端点时(如下图所示)。这将提示您在ESB的配置注册表中提供存储密钥。
您可以在序列中引用完整的XML配置,如下所示:
<property name="drupal_ep"
expression="get-property('registry','conf:/Drupal_Endpoint')"
scope="default"
type="OM"/>
但是,和我一样,如果您只对配置的uri-template组件感兴趣,可以使用以下XPATH查询来提取相关属性:
<property name="drupal_ep"
expression="get-property('registry','conf:/Drupal_Endpoint')"
scope="default"
type="OM"/>
<property name="drupal_uri"
expression="get-property('drupal_ep')//@uri-template"/>