Получение java.lang.ClassCastException: [Ljava.lang.Object; не может быть приведен к [LBlndItmTmMthd - PullRequest
3 голосов
/ 20 июля 2010

Мне нужна серьезная помощь в этом вопросе. Может быть, это очень просто, но я не могу понять это. У меня есть сеанс EJB с одним методом, который возвращает массив перечисления, то есть BlndItmTmMthd массив. Когда я вызываю метод на стороне клиента, он дает мне ClassCastException.

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LBlndItmTmMthd

Во время отладки я обнаружил, что метод ejb правильно возвращает массив BlndItmTmMthd, вызывая BlndItmTmMthd.values(). Я не могу выяснить причину. Любая идея будет полезна.

Добавлен контент из комментария ниже
AgreementSession.java - это интерфейс EJB, который содержит следующее объявление метода:

BlndItmTmMthd[] getAllBlendedItemTimingMethods(); 

AgreementSessionEJB.java - это EJB, который его реализует.

public BlndItmTmMthd[] getAllBlendedItemTimingMethods() { 
    BlndItmTmMthd[] blendedItemTmingMethods = BlndItmTmMthd.values(); 
    return blendedItemTmingMethods; 
}

Теперь, на стороне клиента, когда я вызываю метод EJB со следующим кодом:

BlndItmTmMthd[] _timingMethods = 
             getLoanScheduleSetupSession().getAllBlendedItemTimingMethods(); 

Я получаю это исключение во время выполнения.

Ответы [ 3 ]

1 голос
/ 20 июля 2010

«[L» в вашей ошибке говорит вам о проблеме - Java не может преобразовать массив объектов (то есть Object []) в массив BlndItmTmMthds (BlndItmTmMthd []).

Является ли BlndItmTmMthd действительно java.lang.Enum?

0 голосов
/ 24 июля 2010

Я предполагаю, что у вас есть доступ как к серверу, так и к клиентскому коду.Чтобы отследить эту проблему, вы должны вставить операторы регистрации в форме

logger.info(array.getClass().getCanonicalName());

во все места на пути от BlndItmTmMthd до Object.Тогда вы можете хотя бы сказать, в какой момент происходит преобразование.

0 голосов
/ 20 июля 2010

Учитывая, что ошибка подразумевает, что произошла ошибка приведения объектов типа java.lang. Объект класса Enum, я полагаю, что произошел сбой в процессе сериализации и десериализации, когда ответ от EJB получен наclient.

Есть пара вещей, которые вы можете проверить:

  • Доступен ли класс Enum BlndItmTmMthd в одном загрузчике классов или он загружен дважды?
  • Содержит ли созданная заглушка EJB ссылки на класс Enum или java.lang.Object?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...