Цей урок висвітлює покрокове створення сервера 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.