调用调解器端点类型(XPath)

时间:2019-04-05 04:43:32

标签: wso2 wso2esb wso2is wso2-am wso2carbon

在呼叫中介器中,我们可以使用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>

2 个答案:

答案 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>

Postman screeshot