WSO2 ESB:从 HTTP/Address 端点获取 属性 中的 URI?
WSO2 ESB: Get URI in property from HTTP/Address Endpoint?
我有一个集中定义的端点,它指向 RESTful API。目前它是一个 HTTP 端点,但如果需要,我也可以使用地址端点。
我的问题是我似乎无法在 属性 中介 中找到访问端点 URI 的方法(就像您可以使用本地条目)。我需要在后续请求中嵌入 URI,所以我想做类似的事情:
<property name="api_endpoint" expression="get-property('ApiEndpoint')"/>
其中 ApiEndpoint
是 ESB 中集中定义的端点。我稍后可以使用 PayloadFactory 调解器将其嵌入到进一步的请求中。
如有任何帮助,我们将不胜感激。
紧张
11 月 1 日更新
类似于以下答案的内容会很好:
如果我可以访问配置注册表并获得类似于以下 属性 的端点 XML 配置,那就太棒了:
<property name="test"
expression="string(get-property('registry', 'conf:/endpoints/Drupal_Endpoint.xml')//@uri-template)"/>
根据我的理解,您正在尝试设置动态端点。您可以使用 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-eliyatham 提供有关设置动态端点的提示!事实证明这是一个简单的修复,但我想比 ajanthan 提供的更详细一些(尽管如果有人 - 包括 ajanthan - 想扩展我的答案,我很乐意将其标记为正确).
保存端点时,select“保存在注册表中”(如下图所示)很重要。这将提示您提供用于存储在 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"/>
我有一个集中定义的端点,它指向 RESTful API。目前它是一个 HTTP 端点,但如果需要,我也可以使用地址端点。
我的问题是我似乎无法在 属性 中介 中找到访问端点 URI 的方法(就像您可以使用本地条目)。我需要在后续请求中嵌入 URI,所以我想做类似的事情:
<property name="api_endpoint" expression="get-property('ApiEndpoint')"/>
其中 ApiEndpoint
是 ESB 中集中定义的端点。我稍后可以使用 PayloadFactory 调解器将其嵌入到进一步的请求中。
如有任何帮助,我们将不胜感激。
紧张
11 月 1 日更新
类似于以下答案的内容会很好:
如果我可以访问配置注册表并获得类似于以下 属性 的端点 XML 配置,那就太棒了:
<property name="test"
expression="string(get-property('registry', 'conf:/endpoints/Drupal_Endpoint.xml')//@uri-template)"/>
根据我的理解,您正在尝试设置动态端点。您可以使用 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-eliyatham 提供有关设置动态端点的提示!事实证明这是一个简单的修复,但我想比 ajanthan 提供的更详细一些(尽管如果有人 - 包括 ajanthan - 想扩展我的答案,我很乐意将其标记为正确).
保存端点时,select“保存在注册表中”(如下图所示)很重要。这将提示您提供用于存储在 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"/>