Смотря как посмотреть. Если и не считать ситуацию исключительной, такой метод передачи ошибки логики работы сервиса удобнее, чем создавать глобальный объект на поток/запрос для записи ошибки, создавать единую оболочку для ответа от сервисоов, записывать ответ клиенту внутри сервиса и прочие методы передачи ошибки
Оба подхода имеют право на жизнь. Разница будет чувствоваться на больших объемах кода. Если у тебя все такие эксепшны будут продолжать обрабатываться в одном месте, то это ок. Как только обработка начнет размазываться по разным местам - управляться с ошибками будет проще чем с исключениями.