Apigee - Как отправить полезные данные XML с помощью метода POST с использованием платформы разработки API Apigee

Я должен получить доступ к общедоступному API (https://ABCInsuranceCoreApp.ng.bluemix.net/ABCInsurance/ProductService) с помощью метода POST. Он принимает полезные данные XML в форме

<Customer>
   <Age>40</Age>
   <Gender>M</Gender>
   <Location>IBM</Location>
</Customer>

и возвращает список продуктов. API работает в REST-клиенте и протестирован.

На платформе Apigee API Dev я сделал следующее.

ProxyEndpoint по умолчанию:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Flows>
        <Flow name="default">
            <Request>
                <Step>
                    <Name>AssignCustomerData</Name>
                </Step>
                <Step>
                    <Name>ExecuteProductService</Name>
                </Step>
            </Request>
            <Response>
                <Step>
                    <Name>ParseProductList</Name>
                </Step>
          </Response>
        </Flow>
    </Flows>
    <HTTPProxyConnection>
        <BasePath>/v1/abcinsproductservice</BasePath>
        <VirtualHost>default</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="default"/>
</ProxyEndpoint>

AssignCustomerData - это политика AssignMessage, которая выглядит так ...

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignCustomerData">
    <DisplayName>AssignCustomerData</DisplayName>
    <AssignTo createNew="true" type="request">CustomerData</AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <Customer>
        <Age>40</Age>
        <Gender>M</Gender>
        <Location>IBM</Location>
      </Customer>
    </Payload>
    <Verb>POST</Verb>
  </Set>
</AssignMessage>

ExecuteProductService - это вызов службы, и он выглядит так ..

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout async="false" continueOnError="false" enabled="true" name="ExecuteProductService">
  <!-- Send the message we just made to the target, and save the result -->
  <Request variable="CustomerData"/>
  <Response>ProductList</Response>
  <HTTPTargetConnection>
    <URL>https://ABCInsuranceCoreApp.ng.bluemix.net/ABCInsurance/ProductService</URL>
  </HTTPTargetConnection>
</ServiceCallout>

а ParseProductList - это политика ExtractVriable, которая выглядит как ..

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="ParseProductList">
    <DisplayName>ParseProductList</DisplayName>
    <FaultRules/>
    <Properties/>
  <VariablePrefix>products</VariablePrefix>
  <XMLPayload>
    <Variable name="name" type="string">
      <XPath>//Products/Product[1]/Name</XPath>
    </Variable>
  </XMLPayload>
</ExtractVariables>

Я внимательно следил за образцами, но аранжировка не работает. Я не понимаю, где ошибка. Трассировка тоже не работает .. Не могли бы вы помочь ..

Заранее большое спасибо Амитаве


person user3539974    schedule 16.04.2014    source источник


Ответы (2)


Похоже, вам нужно добавить Источник в свою политику ExtractVariables, например:

<Source clearPayload="false">ProductList</Source>

Кроме того, мне любопытно, почему вы делаете это с помощью ServiceCallout (а не просто выполняете маршрутизацию к целевой службе через TargetEndpoint)? Я не вижу RouteRule в вашем ProxyEndpoint. Без RouteRule вы создаете Echo Server, который будет просто отражать все, что входит. Чтобы этого не произошло, вам нужно будет добавить политику RaiseFault после вашей политики ExtractVariables для завершения вызова.

Или, может быть, вы просто показываете нам отрывок, и в нем действительно есть нечто большее?

person Randy Solton    schedule 16.04.2014

Как я это вижу,

<Step>
                    <Name>ParseProductList</Name>
                </Step>

Должен быть шаг запроса.

Итак, ваш прокси становится,

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Flows>
        <Flow name="default">
            <Request>
                <Step>
                    <Name>AssignCustomerData</Name>
                </Step>
                <Step>
                    <Name>ExecuteProductService</Name>
                </Step>
                <Step>
                    <Name>ParseProductList</Name>
                </Step>
            </Request>
            <Response/>
        </Flow>
    </Flows>
    <HTTPProxyConnection>
        <BasePath>/v1/abcinsproductservice</BasePath>
        <VirtualHost>default</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="default"/>
</ProxyEndpoint>
person Abhishek Tyagi    schedule 18.04.2014