Это полное переписывание моего первоначального ответа, поскольку я изначально неправильно прочитал ваш вопрос!
Вы можете вызывать исключения Java и отлавливать их в JRuby, но вам нужно быть немного осторожнее при вызове повышение:
raise ModelException
вызовет ошибку типа (как вы видели), потому что для JRuby ModelException
выглядит как простая константа. Помните, что в Ruby имена классов являются константами. Вы можете поднять прямые подклассы Ruby Exception
следующим образом, например ::10000
raise RuntimeError
Но я думаю, что такие подклассы - особый случай. Те, которые на самом деле являются классами Java, вам нужно вызывать с помощью конструктора:
raise ModelException.new
Или любой другой конструктор (ы) для этого класса. Экземпляр ModelException
в JRuby является подклассом Exception
, поскольку JRuby создает его как таковой, а сам класс Java - нет. Все это предполагает, что вы правильно импортировали класс ModelException
.
Что касается вашего второго примера, я вообще не мог воспроизвести эту ошибку. До тех пор, пока я правильно создал объект исключения, как описано выше, он работал, и я вообще не видел никаких жалоб на «Собственное исключение». Так что я не уверен, что там происходит, извините.