为什么 Synapse 不扩展 uri 模板中的变量?
Why is Synapse not expanding a variable in a uri-template?
我有一个 WSO2 ESB 4.8.1 序列,它将消息发送到定义为
的 HTTP 端点
<http method="get" uri-template="http://host.example.com/v1/entity/{uri.var.id}/attributes/foo">
属性 之前由 XPath 设置:
<property xmlns:ns="http://org.apache.synapse/xsd" name="uri.var.id" expression="//id" scope="default" type="STRING" />
有时它调用正确的 URL,有时它直接调用 http://host.example.com/v1/entity/{uri.var.id}/attributes/foo
而没有替换变量。为什么?
可能还有其他可能的原因,但似乎是我的问题的原因是逃避。如果 ID 是纯字母数字字符串,则它可以工作,但如果它包含 space 字符,则不会被替换。记录错误消息并转到故障序列会更有帮助,但这是 WSO2 提出的问题。
我找到的修复方法是 enable XPath 2.0,方法是编辑 repository/conf/synapse.properties
并取消注释 synapse.xpath.dom.failover.enabled=true
;然后使用 XPath 2.0 的转义功能:
<property xmlns:ns="http://org.apache.synapse/xsd" name="uri.var.id" expression="encode-for-uri(//id)" scope="default" type="STRING"/>
我有一个 WSO2 ESB 4.8.1 序列,它将消息发送到定义为
的 HTTP 端点<http method="get" uri-template="http://host.example.com/v1/entity/{uri.var.id}/attributes/foo">
属性 之前由 XPath 设置:
<property xmlns:ns="http://org.apache.synapse/xsd" name="uri.var.id" expression="//id" scope="default" type="STRING" />
有时它调用正确的 URL,有时它直接调用 http://host.example.com/v1/entity/{uri.var.id}/attributes/foo
而没有替换变量。为什么?
可能还有其他可能的原因,但似乎是我的问题的原因是逃避。如果 ID 是纯字母数字字符串,则它可以工作,但如果它包含 space 字符,则不会被替换。记录错误消息并转到故障序列会更有帮助,但这是 WSO2 提出的问题。
我找到的修复方法是 enable XPath 2.0,方法是编辑 repository/conf/synapse.properties
并取消注释 synapse.xpath.dom.failover.enabled=true
;然后使用 XPath 2.0 的转义功能:
<property xmlns:ns="http://org.apache.synapse/xsd" name="uri.var.id" expression="encode-for-uri(//id)" scope="default" type="STRING"/>