Почему метод возврата 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 operations.

Я не вижу причин, чтобы помешать void метод возврата без exception отображение на oneway operation по умолчанию. Это вызывает другой вопрос. зачем нам вообще нужно OneWay аннотация, когда любой метод с void тип возврата и нет exception является oneway operation?

1 ответ

любой метод с пустым типом возврата и без исключения является односторонней операцией

Это неправда. По умолчанию тип возвращаемого значения void и не объявленный проверенный метод исключения являются стандартной операцией.

По умолчанию поток клиента, вызывающий службу, будет ожидать получения ответа от сервера (или время ожидания клиента истечет). Стандартная операция веб-сервиса, даже с пустым типом возврата, будет отвечать SOAP-ответом (с пустым телом) после обработки операции веб-метода. Это синхронный вызов по умолчанию.

Например, если у вас есть недействительный тип WebMethod с длительной операцией, служебный клиент будет ждать, пока не закончится вся обработка на стороне сервера (при условии, что тайм-аут не произошел), или получит RuntimeException от сервера в случае сбоя. Этого не произойдет с операцией @OneWay.

В случае методов @OneWay они вызываются асинхронно, поэтому поток клиента не будет ожидать завершения операций веб-метода сервера и будет немедленно продолжен.

Другие вопросы по тегам