Написание 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”:
- Сначала описывают XML-схему данных (
.xsd) — какие поля, какие типы; - Из схемы генерируют WSDL (см. тему «SOAP vs REST») и Java-классы (через
jaxb2-maven-plugin); - Пишут
@Endpoint-класс, реализующий логику обработки запроса.
Это противоположность REST, где обычно сначала пишут код (code-first), а документация (OpenAPI/Swagger) генерируется уже из него.
Зачем сегодня вообще писать SOAP-сервис. В новых проектах — почти никогда, если нет жёсткого требования интеграции с конкретной внешней системой (банк, госуслуги, ERP-система предприятия), которая принимает только SOAP. Знание того, как написать SOAP-сервис, остаётся практичным навыком именно для таких интеграционных задач в enterprise-окружении, а не как основной стиль для новых API.
• что значит "contract-first" разработка и когда реально нужен SOAP сегодня (если дошёл до 2-го слоя).