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

в javadoc:

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

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

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

1 ответов


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

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

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

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

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