как я могу перебрать полезную нагрузку json, полученную прокси-службой wso2 esb

Я создаю прокси-сервис, используя wso2 esb. Он отправляет запрос REST в API Google Книг и получает json. В этом Json есть динамический массив, который мне нужно преобразовать в XML. Я не могу понять, как я могу это сделать.

полученная полезная нагрузка json

"items": [
  {
   "volumeInfo": {
    "title": "Web Services",
    "authors": [
     "Gustavo Alonso",
     "Fabio Casati",
     "Harumi Kuno",
     "Vijay Machiraju"
    ],
    "publisher": "Springer Science & Business Media",
    "publishedDate": "2003-09-04"
   ]
  }

Если вы посмотрите на полученный выше Json, это что-то вроде этого items[0].authors[i]

здесь authors[i] очень динамичен, так как у разных книг разное количество авторов.

Как я могу преобразовать эту полезную нагрузку в XML, а затем отправить в виде XML клиенту

<items>
    <titie></title>
    <authors>
        <author></author>
        <author></author>
        <author></author>
        .
        .
        .
    </authors>
</items>

person Sid    schedule 20.05.2018    source источник
comment
для преобразования из json в xml просто поместите это ‹имя свойства=messageType value=application/xml scope=axis2/› перед отправкой в ​​последовательности   -  person Jorge Infante Osorio    schedule 23.05.2018
comment
@JorgeInfanteOsorio это то, чем я сейчас занимаюсь. Что делать, если я хочу изменить outSequence?   -  person Sid    schedule 23.05.2018
comment
в этом случае вы можете использовать посредник XSLT для преобразования из json в xml. sanjeewamamalalgoda.blogspot.com/2013/10/   -  person Jorge Infante Osorio    schedule 24.05.2018


Ответы (2)


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

https://docs.wso2.com/display/ESB500/PayloadFactory+Mediator

person Anuruddha Lanka Liyanarachchi    schedule 24.05.2018

При конвертации из JSON в XML я почти всегда использую этот способ.

Сначала установите messageType в xml, вы также можете установить ContentType, но я не уверен на 100%, требуется ли это

<property name="messageType" scope="axis2" value="application/xml"/>
<property name="ContentType" scope="axis2" value="application/xml"/>

Затем используйте фабрику полезной нагрузки с охватывающим корневым элементом, установите тип мультимедиа в XML.

<payloadFactory media-type="xml">
    <format>
        <SomeRequest xmlns="yourXMLNamespace">
            $1
        </SomeRequest>
    </format>
    <args>
        <arg evaluator="json" expression="."/>
    </args>
</payloadFactory>

Теперь у вас будет что-то похожее на это.

<SomeRequest>
    <items>
        <volumeInfo></volumeInfo>
        <title>Web Services</title>
        <authors>Gustavo Alonso</authors>
        <authors>Fabio Casati</authors>
        <authors>Harumi Kuno</authors>
        <authors>Vijay Machiraju</authors>
        <publisher>Springer Science & Business Media</publisher>
        <publishedDate>2003-09-04</publishedDate>
    </items>
    <items>
        ...
    </items>
</SomeRequest>

Посмотрите, как он развернул массив JSON, он создал несколько элементов, используя имя массива. Чтобы перейти отсюда к нужному вам формату ответа, самый простой способ сделать это — использовать преобразование xslt.

<xslt key="{name of your xslt transform file}"/>

Затем вы можете ответить обратно клиенту.

Возможно, стоит проверить страницу поддержки JSON в документации wso2. Он описывает, как JSON преобразуется в XML и из него https://docs.wso2.com/display/EI620/JSON+Support

person Riverchimp    schedule 25.05.2018