Проблема ClassCastException - PullRequest
       13

Проблема ClassCastException

1 голос
/ 18 апреля 2011

У меня есть следующий код:

Object backingBean = facesContextHandler.getBackingBean("UserCredentialsBean");
UserCredentialsBean userCredentBean = (UserCredentialsBean) backingBean;

Пока я отлаживаю его, в Eclipse в представлении выражений есть следующее:

backingBean.getClass () -> myPackage.UserCredentialsBean

backingBean instanceOf myPackage.UserCredentialsBean -> false

Так что приведение выше не удается ...

Как это может быть?

Обновление: Дополнительный "симптом": эта проблема возникает после истечения времени ожидания сеанса

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 18 апреля 2011

Интересный вопрос.Я могу думать только о двух возможностях.

1- Нулевой объект.instanceOf обычно завершается с ошибкой для нулевого объекта.Просто убедитесь, что компонент инициализирован.

2- Class Loader Issue.Если два объекта одного и того же класса загружаются двумя различными загрузчиками классов, то instanceOf завершится ошибкой.

Это не полный список, просто две вещи, о которых я мог подумать.

2 голосов
/ 18 апреля 2011

ClassLoader проблема наверняка.Скорее всего, приложение было повторно развернуто (таким образом, был создан новый экземпляр загрузчика классов), но старый объект оставался либо в (диск-сериализованном?) Сеансе, либо в памяти.

Имя класса такое же, но экземпляр загрузчика классов другой.Instanceof рассматривает полное имя класса и равенство загрузчиков классов.

PS На самом деле это довольно распространенная проблема.Это часто видно, когда фоновый поток просыпается только для того, чтобы узнать, что приложение было повторно развернуто, загрузчик классов потока пропал, а затем он выбрасывает либо NoClassDefFound, либо ClassCast для большого удовольствия разработчиков, которые не всегда понимают, что это на самом деле зомби изпредыдущее развертывание, и пытается найти ошибку в их коде.

...