В WSO2 Micro Integrator есть различные способы преобразования или генерации полезной нагрузки. Посредник PayloadFactory, DataMapper, посредник Script и посредник Smooks - вот некоторые из посредников, которые мы можем использовать для преобразования и генерации полезной нагрузки.

Не забудьте ознакомиться с этой статьей о модуле CSV, который представляет собой простой в использовании модуль для преобразования полезной нагрузки CSV.



В последней версии MI (MI 4.0.0) WSO2 представила новую функцию посреднику PayloadFactory. Это поддержка шаблонов Apache FreeMarker.

FreeMarker - это универсальный шаблонизатор, разработанный Apache. Это шаблонизатор на основе Java, который очень популярен среди разработчиков Java для преобразования объектов Java в HTML, XML, CSV и другие текстовые форматы.

Для работы с шаблонами FreeMarker в PayloadFactory вам необходимо установить последнюю версию WSO2 Integration Studio. Чтобы продемонстрировать эту новую функцию, я выполняю следующее преобразование JSON в XML.

Вход-

{
"first_name": "John",
"last_name": "Deo",
"age": 35,
    "location": {
        "state": {
            "code": "NY",
            "name": "New York"
        },
        "city": "Manhattan"
    }
}

Вывод-

<user>
    <Name>John Deo</Name>
    <Age>35</Age>
    <Address>Manhattan, NY</Address>
</user>

Сначала я открыл Integration Studio и создал проект интеграции в этом проекте. Я создал REST API, и последовательность REST API следующая:

Если я перейду к просмотру свойств посредника PayloadFactory,

Мы видим, что появилось новое свойство под названием «Тип шаблона». Используя это свойство, мы можем выбрать способ написания шаблона. Если для него установлено значение По умолчанию, то PayloadFactory будет работать с традиционным синтаксисом (выражения с символом $). Но здесь я выбираю тип шаблона Freemarker. Затем PayloadFactory примет шаблон FreeMarker в качестве шаблона полезной нагрузки.

Шаблон FreeMarker, который я разработал для преобразования своего JSON в XML, выглядит следующим образом:

<user>
    <Name>${payload.first_name} ${payload.last_name}</Name>
    <Age>${payload.age}</Age>
    <Address>${payload.location.city}, ${payload.location.state.code}</Address>
</user>

💡 Вы можете использовать онлайн-тестер шаблонов FreeMarker, предоставляемый Apache, для тестирования шаблона во время разработки. - https://try.freemarker.apache.org/

Когда я добавляю это в представление свойств Integration Studio, это выглядит так:

Как видите, Integration Studio обеспечивает подсветку синтаксиса для шаблонов FreeMarker 😲

Вот и все 😁. Мы сделали преобразование в посреднике PayloadFactory, используя шаблоны FreeMarker. Все просто. Теперь мы можем запустить наш проект во встроенном Micro Integrator в Integration Studio и отправить запрос в REST API, и он даст нам желаемый результат.

Вам может быть интересно, как получить доступ к полезной нагрузке, свойствам и аргументам потока передачи в шаблоне FreeMarker. Для этого PayloadFactory предоставляет встроенные переменные для шаблонов FreeMarker.

  • полезная нагрузка - эта переменная представляет текущую полезную нагрузку посреднической последовательности.
  • ctx - представляет свойства ctx
  • axis2 - представляет свойства asix2
  • trp - это переменная для ссылки на заголовки транспорта
  • arg - используя это, мы можем получить доступ к определенному аргументу в PayloadFactory

Мы можем использовать эти переменные в качестве отправных точек нашего шаблона. Ниже приводится еще один пример шаблона FreeMarker, в котором используются эти переменные.

{
"ctx property" : "${ctx.user_name}",
"axis2 property": "${axis2.REST_URL_POSTFIX}",
"trp property": "${trp.Host}"
}

Выходные данные, сгенерированные из этого шаблона, выглядят следующим образом:

{
"ctx property": "john",
"axis2 property": "/demo",
"trp property": "localhost:8290"
}

Полный код синапса для этой реализации:

<property name="user_name" scope="default" type="STRING" value="john"/>
<payloadFactory media-type="json" template-type="freemarker">
    <format><![CDATA[{
        "ctx property" : "${ctx.user_name}",
        "axis2 property": "${axis2.REST_URL_POSTFIX}",
        "trp property": "${trp.Host}"
        }]]>
    </format>
<args/>
</payloadFactory>

Это все о том, как писать шаблоны FreeMarker в PayloadFactory и выполнять сложные преобразования. Обратитесь к официальной документации для получения более подробной информации и примеров. Удачного кодирования 💻 🎉