Ответ 1
@Oneway
означает, что ничто не сможет избежать вашего метода, ни ответа, ни исключения. Это происходит по двум причинам:
-
Техническое исключение - это всего лишь другой тип ответа (ошибка SOAP), поэтому он не может быть возвращен из одностороннего метода (который ничего не может вернуть)
-
часто односторонние методы выполняются асинхронно с помощью структуры веб-службы (я знаю apache-cxf odes that). Рамка немедленно возвращается, поэтому ваш клиент мог получить пустой ответ даже до того, как обработка одностороннего метода даже началась. Когда генерируется исключение, исходное HTTP-соединение давно прошло.
Итак, если вы хотите распространять исключения или таймауты, используйте стандартный метод SOAP с пустым ответом * и несколько явно выраженных ошибок. Если вы хотите перетащить свой вызов через некоторое время, вам понадобится отдельный пул потоков и блокировка, ожидающая ответа gor за определенный период времени.
* пожалуйста, не путайте пустой ответ SOAP (XML-документ без содержимого, только корневой тег, завернутый в SOAP-конверт) с пустым ответом HTTP (ничего не было отправлено обратно). Помните, что SOAP не ограничивается HTTP. Например, если вы используете JMS или электронную почту, пустой ответ (или ошибка) обычной двухсторонней функции - это еще одно сообщение, отправляемое с сервера на клиент. Односторонний метод - это только одно сообщение reauest и ничего не отправлено назад.