Необходимо разработать сервис по преобразованию JSON в XML шаблонизируемым путем. Сам сервис должен состоять из двух приложений, которые будут взаимодействовать друг с другом:
REST-приложение, обладает следующим функционалом:
- POST метод принимающий JSON объект
- Сохранения данных в БД в виде модели
- Преобразование полученной модели в xml и отправка по SOAP
- Взаимодействие с SOAP-приложением
- Полученный ответ преобразовать в модель и сохранить в бд
Стек технологий REST-приложения:
- Spring boot
- Hibernate
- PostgreSQL
- Apache HttpClient
- Swagger
- org.json
SOAP-приложение, обладает следующим функционалом:
- SOAP метод принимающий данные в CDATA
- Парсинг XML в объект модели
- Преобразование структуры XML при помощи XSLT
Стек технологий SOAP-приложения:
- Spring boot
- Spring WS
- XSLT
- W3C
Общее описание как должен работать сервис:
Начальной точкой является REST-приложение, в него подается JSON (пример далее по тексту), который сохраняется в БД, далее преобразует JSON в XML и отправляет данные в SOAP-приложение. Далее SOAP-приложение преобразует XML с помощью XSLT (именно в XSLT необходимо преобразовывать данные) и возвращается обратно в ответ. После получения данных REST-приложением в БД сохраняется ответ и возвращается пользователю. Методы обоих приложений синхронные.
Подробности реализации:
Взаимодействие между REST и SOAP приложением осущевтсвляется через генерацию классов(моделей и клиента для запроса) из wsdl, которая сгенерирована в SOAP сервисе(генерация производится через wsimport или иные утилиты).
Передача и прием данных Rest сервисом осущевствляется через модели(котнроллер или клиент(для запроса в soap сервис) принимает сразу модель, а не строку).
SOAP сервис может принимать как модель так и строку, возврат данных в виде строки.
В сервисах применить логирование и обработку исключений.
Сервисы реализуются в виде отдельных модулей проекта.
Создание проекта в личном git репозитории.
Пример входного JSON REST-приложения:
{
"name": "Тест",
"surname": "Тестов",
"patronymic": "Тестович",
"birthDate": "1990-01-01",
"gender": "MAN", -- enum (MAN, WOMAN)
"document": {
"series": "1333",
"number": "112233",
"type": "PASSPORT", -- enum (PASSPORT, INTERNATIONAL_PASSPORT, DRIVER)
"issueDate": "2020-01-01" -- Дата выдачи документа
},
}
Входные данные SOAP-приложения(содержимое CDATA):
<person>
<name>Тест</name>
<surname>Тестов</surname>
<patronymic>Тестович</patronymic>
<birthDate>1990-01-01</birthDate>
<gender>MAN</gender>
<document>
<series>1333</series>
<number>112233</number>
<type>PASSPORT</type>
<issueDate>2020-01-01</issueDate>
</document>
</person>
Что ожидается на выходе:
<person name="Тест" surname="Тестов" patronymic="Тестович" birthDate="01.01.1990" gender="MAN">
<document series="1333" number="112233" type="PASSPORT" issueDate="01.01.2020"/>
</person>
Сделай форк репозитория, скачай его. Перед тем, как запускать использовать приложение и вносить в него изменения, соверши следующие шаги:
- Выполни чистую компиляцию (или установку) SOAP-модуля:
$ mvn clean compile -pl soap
- Запусти SOAP-модуль
- Выполни чистую компиляцию (или установку) REST-модуля:
$ mvn clean compile -pl rest
- Запусти REST-модуль