为什么Synapse不在uri-template中扩展变量?

时间:2015-09-17 16:01:17

标签: wso2esb synapse uritemplate

我有一个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。为什么呢?

1 个答案:

答案 0 :(得分:0)

可能有其他可能的原因,但似乎是我的问题的原因是逃避。如果ID是纯字母数字字符串,则它可以工作,但如果它包含空格字符,则它不会被替换。记录错误消息并转到故障序列会更有帮助,但这是用WSO2提出的。

我通过修改repository/conf/synapse.properties并取消注释synapse.xpath.dom.failover.enabled=true,找到了我enable XPath 2.0的修正案;然后使用XPath 2.0的转义功能:

<property xmlns:ns="http://org.apache.synapse/xsd" name="uri.var.id" expression="encode-for-uri(//id)" scope="default" type="STRING"/>