Тип конечной точки посредника вызова (XPath) - PullRequest
1 голос
/ 05 апреля 2019

В посреднике вызовов мы можем сформировать конечную точку, используя 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 голосов
/ 25 апреля 2019

Попробуй это.Я получил необходимый ответ в Почтальоне, но вы должны использовать метод POST, так как ваш запрос имеет тело.

<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

0 голосов
/ 05 апреля 2019

Во-первых, при использовании разрешающей конечной точки (с помощью ключевого выражения) мы не можем дать URL-адрес напрямую [1] . Мы должны заранее определить конечную точку и дать только ключ конечной точки в полезной нагрузке.

Во-вторых, чтобы ключевое выражение анализировало xpath, сообщение должно быть создано заранее. Поскольку посредник вызовов не осведомлен о содержимом, он не будет создавать сообщение. Поэтому мы должны использовать контент-зависимый посредник для создания сообщения.

Ниже приведен пример последовательности, который будет работать.

<inSequence>
     <log level="full"/>
     <call>
        <endpoint key-expression="//a"/>
     </call>
     <respond/>
  </inSequence>

Теперь полезная нагрузка должна быть такой, как

<root>
    <a>testEndpoint</a>
</root>

Изменить: Конечная точка с именем 'testEndpoint' должна быть определена с URL-адресом бэкэнда.

Вам необходимо определить конечную точку [2] . Например, я использую конечную точку адреса .

<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>
...