我正在尝试以下选项并且我收到错误,任何人都可以向我建议解决方案。我添加了synapse.xpath.dom.failover.enabled = true 代码:尝试用属性值
替换~TOKEN~<property name="verificationLink" expression="fn:replace($ctx:reqVerifyUrl , '~TOKEN~', get-property('verification_code'))" scope="default" type="STRING" xmlns:fn="http://www.w3.org/2005/xpath-functions" />
错误:
TID: [-1234] [] [2017-02-15 00:14:19,318] ERROR {org.apache.synapse.util.xpath.SynapseXPath} - Evaluation of the XPath expression fn:replace($ctx:reqVerifyUrl , '~TOKEN~', get-property('verification_code')) resulted in an error {org.apache.synapse.util.xpath.SynapseXPath} net.sf.saxon.trans.XPathException: Unknown system function get-property()
答案 0 :(得分:3)
get-property不是标准的xpath函数,你必须对xpath引擎说这个函数来自synapse:
<property name="verificationLink" expression="fn:replace($ctx:reqVerifyUrl , '~TOKEN~', syn:get-property('verification_code'))" scope="default" type="STRING" xmlns:fn="http://www.w3.org/2005/xpath-functions" />
您不需要添加'syn'命名空间的定义,它在您的中介中是众所周知的(xmlns:syn =“http://ws.apache.org/ns/synapse”)
答案 1 :(得分:0)
需要做两件事:
一个。查看此内容并确保正确设置Synapse配置。 Is there any replace function in wso2esb?
B中。然后你需要添加前缀fn&amp;如果您需要使用带有XPath 2.0的get-property()方法,请使用syn。另请注意,您必须为'syn'和'fn'使用(包括)以下名称空间值。
xmlns:syn=”http://ws.apache.org/commons/ns/payload”
xmlns:fn=”http://www.w3.org/2005/xpath-functions”
以下是使用replace的示例属性介体。
<property xmlns:syn="http://ws.apache.org/commons/ns/payload" xmlns:fn="http://www.w3.org/2005/xpath-functions" name="xmlValue" expression="fn:replace(syn:get-property('textValue'), 'xmlData=', '')></property>;