Карта / Веб-сервисы (REST/SOAP) / Написание SOAP-сервиса

Написание SOAP-сервиса

Spring Web Services (Spring-WS) — модуль для создания SOAP-сервисов в Java, отдельный от Spring MVC (который рассчитан на REST).

@Endpoint                                          // аналог @RestController, но для SOAP
class UserEndpoint {

    @PayloadRoot(namespace = "http://javaguide.ru/users", localPart = "GetUserRequest")
    @ResponsePayload
    GetUserResponse getUser(@RequestPayload GetUserRequest request) {
        User user = userService.findById(request.getUserId());
        GetUserResponse response = new GetUserResponse();
        response.setName(user.getName());
        return response;
    }
}

Классы запроса/ответа (GetUserRequest, GetUserResponse) обычно генерируются автоматически из XML-схемы (.xsd) — пишешь схему данных один раз, инструменты (JAXB) генерируют Java-классы под неё.

Копнуть глубже

Типичный процесс разработки SOAP-сервиса — “contract-first”:

  1. Сначала описывают XML-схему данных (.xsd) — какие поля, какие типы;
  2. Из схемы генерируют WSDL (см. тему «SOAP vs REST») и Java-классы (через jaxb2-maven-plugin);
  3. Пишут @Endpoint-класс, реализующий логику обработки запроса.

Это противоположность REST, где обычно сначала пишут код (code-first), а документация (OpenAPI/Swagger) генерируется уже из него.

Зачем сегодня вообще писать SOAP-сервис. В новых проектах — почти никогда, если нет жёсткого требования интеграции с конкретной внешней системой (банк, госуслуги, ERP-система предприятия), которая принимает только SOAP. Знание того, как написать SOAP-сервис, остаётся практичным навыком именно для таких интеграционных задач в enterprise-окружении, а не как основной стиль для новых API.

🎤 Закрыл тему, если можешь объяснить:
• как выглядит `@Endpoint`-класс в Spring-WS;
• что значит "contract-first" разработка и когда реально нужен SOAP сегодня (если дошёл до 2-го слоя).