我无法从以下肥皂信封中获取clinID的值:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tfom="https://bur.cdmarf.ru/dss/services/tfoms">
<soapenv:Header/>
<soapenv:Body>
<tfom:get_single_inserted_branch_by_id>
<tfom:clinicID>6048820</tfom:clinicID>
</tfom:get_single_inserted_branch_by_id>
</soapenv:Body>
</soapenv:Envelope>
<property xmlns:tfom="https://bur.cdmarf.ru/dss/services/tfoms"
name="CLINIC_ID"
expression="//clinicID/text()"
scope="axis2"
type="STRING"/>
这是我记录CLINIC_ID值的方式:
<log level="custom">
<property name="1" expression="get-property('CLINIC_ID')"/>
</log>
这是CLINIC_ID的值:
1 = null
问题在于你的xpath表达式。如果你使用
<property xmlns:tfom="https://bur.cdmarf.ru/dss/services/tfoms"
name="CLINIC_ID"
expression="//tfom:clinicID/text()"
scope="axis2"
type="STRING"/>
它应该工作。缺少部分是表达式中的名称空间前缀。
您可以使用http://www.freeformatter.com/xpath-tester.html等在线工具尝试xpath表达式的准确性
我确实使用了它,并且能够将clinicID值作为输出。
您可以使用$ body synapse xpath变量来访问有效负载的主体。因此对于属性调解器的表达式将是
$身体/ tfom:get_single_inserted_branch_by_id / tfom:clinicID /测试()
如果您的发送请求如下格式
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd">
<soapenv:Header/>
<soapenv:Body>
<ser:getQuote>
<!--Optional:-->
<ser:request>
<!--Optional:-->
<xsd:symbol>wso2</xsd:symbol>
</ser:request>
</ser:getQuote>
你需要写一个代理
<property xmlns:m1="http://services.samples/xsd"
xmlns:m0="http://services.samples"
name="symbol"
expression="//m0:getQuote/m0:request/m1:symbol"
scope="default"
type="STRING"/>
<property xmlns:ns="http://org.apache.synapse/xsd"
name="REST_URL_POSTFIX"
expression="fn:concat('?symbol=',get-property('symbol1'))"
scope="axis2"
type="STRING"/>