在呼叫中介器中,我们可以使用XPath(根据响应)形成端点。但是问题是端点没有在呼叫。
<?xml version="1.0" encoding="UTF-8"?>
<api context="/xpath" name="call"
xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" protocol="http">
<inSequence>
<call>
<endpoint key-expression="/root/a"/>
</call>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
以下回复来自邮递员。
<root>
<a>http://www.mocky.io/v2/5ca6db71340000132f76b192</a>
</root>
预期的响应:
<root>
<name>abcd</name>
<no>82382832</no>
</root>
答案 0 :(得分:0)
首先,当使用解析端点(使用键表达式)时,我们无法直接给URL [1]。我们必须事先定义端点,并且应该仅在有效负载中提供端点的密钥。
第二,对于解析xpath的key-expression,该消息应事先构建。由于呼叫介体不了解内容,因此不会构建消息。因此,我们应该使用内容感知调解器来构建消息。
以下是可以使用的序列示例。
<inSequence>
<log level="full"/>
<call>
<endpoint key-expression="//a"/>
</call>
<respond/>
</inSequence>
现在有效载荷应该像
<root>
<a>testEndpoint</a>
</root>
编辑: 名为“ testEndpoint”的端点应使用后端网址进行定义。
您需要定义端点[2]。例如,我正在使用address endpoint。
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="testEndpoint">
<address uri="http://www.mocky.io/v2/5ca6db71340000132f76b192">
<suspendOnFailure>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
<retryDelay>0</retryDelay>
</markForSuspension>
</address>
</endpoint>
答案 1 :(得分:0)
尝试一下。我在Postman中收到了需要的回复,但是您应该使用POST方法,因为您的请求有一个Body。
<api xmlns="http://ws.apache.org/ns/synapse" name="call" context="/xpath">
<resource methods="POST">
<inSequence>
<property name="uri.var.httpendpointurl" expression="$body/root/a" scope="default" type="STRING"/>
<call>
<endpoint>
<http uri-template="{uri.var.httpendpointurl}"/>
</endpoint>
</call>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>