Понимание аннотации @Oneway в JAX-WS

В javadoc:

Указывает, что данный @WebMethod имеет только входное сообщение и не выводит. Как правило, метод oneway возвращает поток управления вызывающему приложению до выполнения фактического бизнес-метода. Процессор 181 должен сообщать об ошибке, если операция с символом @Oneway имеет возвращаемое значение или параметры Holder или объявляет любые проверенные исключения.

Можно ли предположить, что если мне нужна обработка исключений (отмеченная или непроверенная), что эта аннотация не рекомендуется? Я ничего не возвращаю из бизнес-логики, однако я все еще заинтересован в том, чтобы знать о тайм-аутах и ​​других различных ошибках, характерных для действия вызова метода SOAP. Является ли эта аннотация означающей, что у меня нет доступа к кодам возврата HTTP или заброшенным исключениям?

Вопрос: Мне лучше отключить эту запись самостоятельно, чтобы получить по-настоящему асинхронный вызов и удалить аннотацию @Oneway?

Ответ 1

@Oneway означает, что ничто не сможет избежать вашего метода, ни ответа, ни исключения. Это происходит по двум причинам:

  • Техническое исключение - это всего лишь другой тип ответа (ошибка SOAP), поэтому он не может быть возвращен из одностороннего метода (который ничего не может вернуть)

  • часто односторонние методы выполняются асинхронно с помощью структуры веб-службы (я знаю apache-cxf odes that). Рамка немедленно возвращается, поэтому ваш клиент мог получить пустой ответ даже до того, как обработка одностороннего метода даже началась. Когда генерируется исключение, исходное HTTP-соединение давно прошло.

Итак, если вы хотите распространять исключения или таймауты, используйте стандартный метод SOAP с пустым ответом * и несколько явно выраженных ошибок. Если вы хотите перетащить свой вызов через некоторое время, вам понадобится отдельный пул потоков и блокировка, ожидающая ответа gor за определенный период времени.

* пожалуйста, не путайте пустой ответ SOAP (XML-документ без содержимого, только корневой тег, завернутый в SOAP-конверт) с пустым ответом HTTP (ничего не было отправлено обратно). Помните, что SOAP не ограничивается HTTP. Например, если вы используете JMS или электронную почту, пустой ответ (или ошибка) обычной двухсторонней функции - это еще одно сообщение, отправляемое с сервера на клиент. Односторонний метод - это только одно сообщение reauest и ничего не отправлено назад.