Почему метод возврата void и не выбрасывающий методы исключения не рассматриваются как односторонняя операция по умолчанию в jax-ws?
Я знаю это jaxws 2.2
спецификация говорит, что все public non-static non-final
метод на SEI
который не имеет WebMethod
аннотация с exclude
как true
, должен быть сопоставлен с элементами wsdl: operation.
Там также говорится только о методах, помеченных javax.jws.OneWay
должно быть oneway operation
, если метод не имеет OneWay
аннотация (даже если она имеет void
тип возврата и нет exception
) НЕ ДОЛЖЕН быть сопоставлен с oneway operation
s.
Я не вижу причин, чтобы помешать void
метод возврата без exception
отображение на oneway operation
по умолчанию. Это вызывает другой вопрос. зачем нам вообще нужно OneWay
аннотация, когда любой метод с void
тип возврата и нет exception
является oneway operation
?
1 ответ
любой метод с пустым типом возврата и без исключения является односторонней операцией
Это неправда. По умолчанию тип возвращаемого значения void и не объявленный проверенный метод исключения являются стандартной операцией.
По умолчанию поток клиента, вызывающий службу, будет ожидать получения ответа от сервера (или время ожидания клиента истечет). Стандартная операция веб-сервиса, даже с пустым типом возврата, будет отвечать SOAP-ответом (с пустым телом) после обработки операции веб-метода. Это синхронный вызов по умолчанию.
Например, если у вас есть недействительный тип WebMethod с длительной операцией, служебный клиент будет ждать, пока не закончится вся обработка на стороне сервера (при условии, что тайм-аут не произошел), или получит RuntimeException от сервера в случае сбоя. Этого не произойдет с операцией @OneWay.
В случае методов @OneWay они вызываются асинхронно, поэтому поток клиента не будет ожидать завершения операций веб-метода сервера и будет немедленно продолжен.