Длинное объяснение : рассмотрите веб-сервисы SOAP с точки зрения спецификации протокола SOAP. Веб-сервисы - это не просто причудливый слой поверх HTTP, это фактически способ описания двусторонней связи с различными реализованными шаблонами обмена сообщениями . Следующие шаблоны являются наиболее распространенными:
запрос-ответ ( Вход-выход ): в среде HTTP это типичный HTTP-запрос / ответный вызов с некоторым запросом сообщение , отправляемым с клиента на сервер и некоторый ответ сообщение отправляется обратно. В среде JMS вы получите два отдельных и независимых сообщения.
в одну сторону ( In-Only ): в этой модели клиент отправляет запрос, но не ожидает и не заботится об ответе. В JMS это эквивалентно простому сообщению, отправляемому брокеру. С другой стороны, в HTTP (по крайней мере, так реализованы односторонние методы в Apache CXF) вы получите метод void
в SEI. Более того, CXF по умолчанию будет использовать отдельный пул потоков для обработки этого запроса, поэтому клиент даже не ждет ответа, а сервер даже не может отправить этот ответ (поскольку клиент, возможно, уже отключился).
Теперь важная часть: в WSDL вы определяете метод как запрос / ответ (путем определения входящих / исходящих сообщений) или как односторонний (путем предоставления только в сообщении). Это зафиксировано в сервисном контракте. Вы не можете создать метод, который однажды возвращает ответ ( из сообщения , если быть точным), тогда как в других случаях это не так.
Очевидно, что вы можете определить исходящее сообщение, которое может быть пустым или содержать некоторый контент, но вам все равно придется что-то возвращать.
Краткое объяснение : протокол SOAP недостаточно гибок, чтобы удовлетворить ваши требования. Вы либо возвращаете ответ, либо нет. Создайте два метода и выберите, какой из них вызывать на стороне клиента, вместо добавления пользовательских заголовков.
Еще один совет: вы можете использовать ESB для выполнения какого-либо преобразования, так что ответ отбрасывается при наличии некоторого заголовка SOAP.