Служба прокси WSO2 генерирует неправильный ответ - PullRequest
0 голосов
/ 19 мая 2018

Я создаю прокси-сервис, используя служебную шину WSO2.Эта служба принимает и XML

<GetBookInfo>
    <isbn>someibnnumberhere</isbn>
</GetBookInfo>

Вот файл XML или фактическая служба прокси

Код для параметров: ?

<inSequence>
<log level="full" description="Log SOAP request"/> 
<property xmlns:ns="http://waa.swin.edu.au" 
     name="uri.var.isbn" 
     xpression="//ns:GetBookInfo/isbn" 
     scope="default"
     type="STRING"/>
 <property name="messageType" 
     value="application/json"
     scope="axis2"
     type="STRING"
     description="Transform message format to JSON"/>

Код для отправки запроса: 101

<send>
    <endpoint name="GeoLocationProxyService">
        <http method="GET" uri-template="https://www.googleapis.com/books/v1/volumes?q=isbn:{uri.var.isbn}&amp;key=AIzaSyBBJis6L2DK2PROIy2SsFBdgTJohR7GuFg&amp;fields=items(volumeInfo/title,volumeInfo/authors,volumeInfo/publisher,volumeInfo/publishedDate,volumeInfo/industryIdentifiers,saleInfo/country,saleInfo/saleability,volumeInfo/averageRating)" />
    </endpoint>
</send>
</inSequence>

Код для отправки и получения ответа: ?

<outSequence>
     <log description="Log returned JSON payload">
        <property name="JSON‐Payload" expression="json-eval($.)"/>
     </log>
     <payloadFactory media-type="xml" description="Generate response data">
        <format>
           <GetGeoLocationResponse xmlns="http://waa.swin.edu.au">
              <title>$1</title>
              <authors>$2</authors>
              <publisher>$3</publisher>
              <publishedDate>$4</publishedDate>
              <type>$5</type>
              <identifier>$6</identifier>
              <country>$7</country>
              <saleability>$8</saleability>
           </GetGeoLocationResponse>
        </format>
        <args>
           <arg evaluator="json" expression="$.items[0].volumeInfo.title"/>
           <arg evaluator="json" expression="$.items[0].volumeInfo.authors"/> 
           <arg evaluator="json" expression="$.items[0].volumeInfo.publisher"/> 
           <arg evaluator="json" expression="$.items[0].volumeInfo.publishedDate"/> 
           <arg evaluator="json" expression="$.items[0].volumeInfo.industryIdentifiers[1].type"/> 
           <arg evaluator="json" expression="$.items[0].volumeInfo.industryIdentifiers[1].identifier"/> 
           <arg evaluator="json" expression="$.items[0].saleInfo.country"/> 
           <arg evaluator="json" expression="$.items[0].saleInfo.saleability"/> 
        </args>
     </payloadFactory>
     <property name="messageType"
        value="application/xml"
        scope="axis2"
        type="STRING"
        description="Transform message format to SOAP"/>
     <send/>
  </outSequence>

Ответ, который создает этот сервис, - все случайные числа, но одного типа.Вот то, о чем я говорю: ?‍♂️

<GetGeoLocationResponse xmlns="http://waa.swin.edu.au">
   <title>ISBN Review</title>
   <authors>
      <jsonElement>International ISBN Agency</jsonElement>
   </authors>
   <publisher/>
   <publishedDate>1998</publishedDate>
   <type/>
   <identifier/>
   <country>AU</country>
   <saleability>NOT_FOR_SALE</saleability>
</GetGeoLocationResponse>

Все вышеперечисленные пропущенные поля являются результатами нескольких iitems [i], где i: <= 10 (я думаю) вернулось с разным мусором /мусорная стоимость.Итак, да, либо поля отсутствуют, либо они неверны?‍♂️ </p>

Если я запрашиваю ту же услугу через браузер / почтальон ?

{
items: [
    {
        volumeInfo: {
            title: "If At First You Don't Conceive",
            authors: [
                "Liz Ellis"
            ],
            publisher: "Macmillan Publishers Aus.",
            publishedDate: "2018-04-24",
            industryIdentifiers: [
                {
                    type: "ISBN_13",
                    identifier: "9781760780364"
                },
                {
                    type: "ISBN_10",
                    identifier: "1760780367"
                }
            ]
        },
        saleInfo: {
            country: "AU",
            saleability: "FOR_SALE"
        }
    }
    ]
}

1 Ответ

0 голосов
/ 20 мая 2018

Можно использовать свойство REST_URL_POSTFIX, значение которого добавляется в конец URL-адреса конечной точки.

<property name="REST_URL_POSTFIX" expression="fn:concat('?q=isbn:',$ctx:isbn_no,'&amp;key=',$ctx:key)" scope="axis2"/>

Затем определите конечную точку без параметров запроса.

<send>
    <endpoint name="GeoLocationProxyService">
        <http method="GET" uri-template="https://www.googleapis.com/books/v1/volumes" />
    </endpoint>
</send>
...