Створення soap web-сервісу, spring по-русски!

Цей урок висвітлює покрокове створення сервера SOAP web сервісу з використанням Spring.

Що ви створите

Ви створите сервер, який надає дані з різних Європейських країн, використовуючи WSDL SOAP web сервіс.

Для простоти прикладу, ви будете використовувати фіксовані дані Сполученого королівства, Іспанії та Польщі.

Що вам буде потрібно

Як проходити цей урок

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

Коли ви закінчите. можете порівняти отриманий результат зі зразком в gs-producing-web-service / complete.

Налаштування проекту

Для початку вам необхідно налаштувати базовий скрипт збірки. Ви можете використовувати будь-яку систему збирання, яка вам подобається для збірки проет Spring, але в цьому уроці розглянемо код для роботи з Gradle. Якщо ви не знайомі з нею, ознайомтеся з відповідним уроком Збірка Java-проекту з використанням Gradle.

Створення структури каталогів

В обраному вами каталозі проекту створіть наступну структуру каталогів; наприклад, командою mkdir -p src / main / java / hello для * nix систем:

Створення файлу збірки Gradle

Нижче представлений початковий файл збірки Gradle. Якщо ви використовуєте Spring Tool Suite (STS). то можете імпортувати урок прямо з нього.

Якщо ви подивіться на pom.xml. ви знайдете, що вказана версія для maven-compiler-plugin. Загалом, це не рекомендується робити. В даному випадку він призначений для вирішення проблем з нашої CI системи, яка за замовчуванням має стару (до Java 5) версію цього плагіна.

Spring Boot gradle plugin надає безліч зручних можливостей:

  • Він збирає все jar'и в classpath і збирає єдине, що виконується "über-jar", що робить більш зручним виконання і доставку вашого сервісу
  • Він шукає public static void main () метод, як ознака виконуваного класу
  • Він надає вбудоване дозвіл залежностей, з певними номерами версій для відповідних Spring Boot залежностей. Ви можете перевизначити на будь-які версії, які захочете, але він буде за замовчуванням для Boot обраним набором версій

Додавання Spring-WS залежності

Створений вами проект повинен включати в ваш файл збірки залежності spring-ws-core і wsdl4j.

Створення XML схеми для визначення домену

Домен web сервісу описаний у файлі XML схеми (XSD), який Spring-WS буде експортувати автоматично як WSDL.

Створіть XSD файл з операціями для повернення name. population. capital і currency.

Генерація доменних класів на основі XML схеми

Следубщім кроком необхідно згенерувати Java класи з XSD файлу. Знову ж правильним підходом є їх автоматичне створення в процесі складання з використанням плагіна maven або gradle.

Конфігурація плагіна для maven:

Згенеровані класи будуть поміщені в target / generated-sources / jaxb / каталог.

Те ж саме і з gradle:

Наступний крок - додавання завдання getJaxb. необхідної gradle для генерації Java класів:

Оскільки gradle не має JAXB плагіна (поки), він включає в себе ant завдання, яка робить файл збірки трохи складніше в порівнянні з файлом збірки Maven.

В обох випадках, процес генерації об'єктів включено до життєвий цикл збірки, тому не потрібні окремі кроки щодо запуску цього процесу.

створення сховища

Для надання даних web сервісом, створіть репозиторій. У цьому уроці ви створюєте простий репозиторій з встановленими даними.

Створення точки виходу сервісу

Для створення точки виходу сервісу, вам необхідний тільки POJO з декількома Spring WS анотаціями для обробки вхідних SOAP запитів.

@Endpoint реєструє клас Spring WS як потенційний кандидат для обробки вхідних SOAP повідомлень

@PayloadRoot використовується Spring WS для вибору методу обробника на основі namespace і localPart повідомлення

@RewuestPayload вказує на те, що вхідне повідомлення буде порівнювати параметру request методу

@ResponsePayload створює відповідне значення що повертається значенням корисної частини відповіді.

У всіх цих фрагментах коду, класи io.spring.guides викидатимуть помилку компіляції у вашій IDE до тих пір, поки ви не запустите завдання генерації доменних класів на основі WSDL.

Конфігурація бінов web сервісу

Створіть новий клас, пов'язаний зі зміною Spring WS бінов:

  • Spring WS використовує інший тип сервлетів для обробки SOAP повідомлень: MessageDispatcherServlet. Він важливий для впровадження і установки в нього ApplicationContext. Без цього, Spring WS не виявить Spring біни автоматично
  • Назвавши цей бін як dispatcherServlet. він замінює Spring Boot бін DispatcherServlet за замовчуванням
  • DefaultMethodEndpointAdapter налаштовує на модель програмування анотаціями Spring WS. Це робить можливим використання різних анотацій, подібно @Endpoint. згаданої раніше
  • DefaultWsdl11Definition надає стандартний WSDL 1.1 з використанням XsdSchema

Створення програми виконуваним

Незважаючи на те, що пакет цього сервісу може бути в складі web-додатки і WAR файлів, більш простий підхід, продемонстрований нижче створює окреме самостійне додаток. Ви упаковуєте все в єдиний, виконуваний JAR-файл, який запускається через добре знайомий старий main () Java-метод. Попутно, ви використовуєте підтримку Spring для вбудованого Tomcat контейнера сервлетів як HTTP середу виконання замість розгортання на сторонній екземпляр.

main () метод передає управління допоміжному класу SpringApplication. де Application.class - аргумент його run () методу. Це повідомляє Spring про читання метаданих анотації з Application і управлінні нею як компонента в Spring application context.

Анотація @ComponentScan говорить Spring'у рекурсивно шукати в пакеті hello і його нащадків класи, помічені прямо або побічно Spring анотацією @Component. Ця директива гарантує, що Spring знайде і зареєструє CountryRepository і CountriesEndpoint. тому що він відзначений @Controller. який, в свою чергу, є свого роду @Component анотацією.

Анотація @EnableAutoConfiguration перемикає на прийнятне за замовчуванням поведінка, заснована на утриманні вашого classpath. Наприклад, тому що додаток залежить від забудованої версії Tomcat (tomcat-embed-core.jar), Tomcat сервер встановлений і налаштований на прийнятне за замовчуванням поведінку від вашого імені. І тому додаток також залежить від Spring MVC (spring-webmvc.jar), Spring MVC DispatcherServlet налаштований і зареєстрований для вас - web.xml не потрібен! Автом корисний і гнучкий механізм. Детальну інформацію дивіться в API документації.

Збірка виконуваного JAR

Ви можете зібрати єдиний виконуваний JAR-файл, який містить всі необхідні залежності, класи і ресурси. Це робить його легким в завантаженні, версіонірованія і розгортання сервісу як додатки протягом усього періоду розробки, на різних середовищах і так далі.

Потім ви можете запустити JAR-файл:

Якщо ви використовуєте Maven, ви можете запустити додаток, використовуючи mvn spring-boot: run. або ви можете зібрати додаток з mvn clean package і запустити JAR приблизно так:

Процедура, описана вище, створює виконуваний JAR. Ви також можете замість нього зібрати класичний WAR-файл.

запуск програми

Якщо ви використовуєте Gradle, ви можете запустити ваш сервіс з командного рядка:

Якщо ви використовуєте Maven, то можете запустити ваш сервіс таким чином: mvn clean package java -jar target / gs-producing-web-service-0.1.0.jar.

Як варіант, ви можете запустити ваш сервіс безпосередньо з Gradle приблизно так:

З mvn - mvn spring-boot: run.

тестування додатка

Коли додаток запуститься, ви можете протестувати його. Створіть файл request.xml. що містить наступний SOAP запит:

Існує кілька способів тестування SOAP інтерфейсу. Ви можете використовувати щось типу SoapUI або просто використовувати інструменти командного рядка, якщо у вас * nix / Mac система, як показано нижче:

В результаті ви повинні побачити таку відповідь:

Вітаємо! Ви тільки що створили SOAP сервіс з використанням Spring Web Services.

З оригінальним текстом уроку ви можете ознайомитися на spring.io.

отримати код