Конвертация SOAP в Rest с коллекцией предметов - PullRequest
1 голос
/ 27 октября 2019

Я разрабатываю посреднический поток в WSO2 Integration Studio. Конечная точка indbound - это api rest, конечные точки - мыльный веб-сервис.

Клиент запрашивает список медицинских специальностей. Внутренний сервис отвечает этим списком в ответе SOAP. Простое преобразование ответа SOAP в JSON с помощью посредника свойства не вариант, так как клиент ожидает определенного формата JSON.

Я пробовал посредник сценария без какого-либо успеха. Более того, я прочитал, что посредник сценариев должен использоваться только в качестве решения для последней возможности.

Какова наилучшая практика для выполнения этого вида работы? (преобразовать soap в json со сбором данных в нем)

SOAP Response выглядит примерно так:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetSpecialtiesResponse xmlns="http://tempuri.org/">
<GetSpecialtiesResult xmlns:a="http://schemas.datacontract.org/2004/07/WsAgenda.DataContracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Specialty>
<a:code>cardiology</a:code>
<a:name>Cardiologie</a:name>
</a:Specialty>
<a:Specialty>
<a:code>neurology</a:code>
<a:name>Neurologie</a:name>
</a:Specialty>
</GetSpecialtiesResult>
</GetSpecialtiesResponse>
</s:Body>
</s:Envelope>

Специальный необходимый формат ответа REST выглядит примерно так:

{
  "specialities": [
    {
      "id": "cardiology",
      "name": "Cardiologie"
    },
    {
      "id": "neurology",
      "name": "Neurologie"
    }
  ]
}

1 Ответ

0 голосов
/ 28 октября 2019

Вы можете конвертировать SOAP в JSON, используя следующие 2 свойства.

<property name="ContentType"
               scope="axis2"
               type="STRING"
               value="application/json"/>
<property name="messageType"
               scope="axis2"
               type="STRING"
               value="application/json"/>

Вывод

{ 
   "GetSpecialtiesResponse":{ 
      "GetSpecialtiesResult":{ 
         "Specialty":[ 
            { 
               "code":"cardiology",
               "name":"Cardiologie"
            },
            { 
               "code":"neurology",
               "name":"Neurologie"
            }
         ]
      }
   }
}
...