2014-04-16 2 views
0

POST 메서드를 사용하여 공개적으로 액세스 할 수있는 API (https://ABCInsuranceCoreApp.ng.bluemix.net/ABCInsurance/ProductService)에 액세스해야합니다.Apigee - Apigee API 개발 플랫폼을 사용하여 POST 메서드를 사용하여 XML 페이로드를 보내는 방법

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

의 XML Payload를 승인하고 제품 목록을 리턴합니다. API는 REST-Client에서 작동하며 테스트되었습니다.

Apigee API Dev Platform에서 수행 한 작업은 다음과 같습니다.

기본 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> 

나는 샘플을 조심스럽게 따라 갔지만, 배열은 효과가 없다. 나는 그 오류가 어디에 있는지 혼란 스럽다. 추적 사전에

많은 감사합니다 .. 하나 .. 당신이 PLS 도와 줄래 작동하지 Amitava

답변

0

당신이 같이 당신의 ExtractVariables 정책에 소스를 추가해야처럼 보이는 :

또한 왜 ServiceCallout (TargetEndpoint를 통해 대상 서비스로 라우팅하지 않고)에서이 작업을 수행하고 있는지 궁금합니다. ProxyEndpoint에 RouteRule이 표시되지 않습니다. RouteRule이 없으면 에코 서버를 만듭니다.은 들어오는 모든 것을 다시 반영하기 만합니다. 그 일을 막으려면 ExtractVariables 정책 다음에 RaiseFault 정책을 추가하여 통화를 종료해야합니다.

또는 아마도 당신은 단지 우리에게 미리보기를 보여 주며 실제로 그것에 더 많은 것이 있습니까?

0

나는 그것이 보는 방법,

<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> 
관련 문제