2010-07-20 2 views
3

이 문제에 관해 진지한 도움이 필요합니다. 매우 기본적인 것일 수도 있지만, 알아낼 수는 없습니다. enum 배열, 즉 BlndItmTmMthd 배열을 반환하는 하나의 메소드가있는 세션 EJB가 있습니다. 클라이언트 측에서 메서드를 호출하면 ClassCastException이 표시됩니다.java.lang.ClassCastException를 얻는 중 : [Ljava.lang.Object; [LBlndItmTmMthd

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

디버깅 동안, I는 EJB 방법 올바르게 BlndItmTmMthd.values()를 호출 BlndItmTmMthd 배열을 반환하는 것을 발견 하였다. 나는 그 이유를 알 수 없다. 어떤 아이디어라도 도움이 될 것입니다.

BlndItmTmMthd[] getAllBlendedItemTimingMethods(); 

AgreementSessionEJB.java 그것을 구현하는 EJB입니다 :
AgreementSession.java 아래 댓글에서

추가 된 내용은 다음과 같은 메소드 선언을 포함하는 EJB 인터페이스입니다. 나는 다음과 같은 코드를 사용하여 EJB 메소드 호출 할 때

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

이제 클라이언트 측에서 :

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

을 그 런타임 예외를 얻을.

+2

몇 가지 코드를 게시하십시오. 작성한 내용으로 도움을 드릴 수 없습니다. –

+0

AgreementSession.java는 다음 메소드 선언을 포함하는 EJB 인터페이스입니다. BlndItmTmMthd [] getAllBlendedItemTimingMethods(); AgreementSessionEJB.java는이를 구현하는 EJB입니다. public BlndItmTmMthd [] getAllBlendedItemTimingMethods() { BlndItmTmMthd [] blendedItemTmingMethods = BlndItmTmMthd.values ​​(); return blendedItemTmingMethods; 지금 } , 클라이언트 측에서, I는 다음과 같은 코드로 EJB 메소드를 호출 할 때, BlndItmTmMthd [] = _timingMethods getLoanScheduleSetupSession() getAllBlendedItemTimingMethods().; 해당 런타임 예외가 발생합니다. – rajshekhar

+0

코드를 포맷 할 수 없습니다 !!! – rajshekhar

답변

1

은 "[L은"당신에게 문제를 알려줍니다 - 자바가 배열 객체의 캐스팅 실패 (즉, 객체 []) BlndItmTmMthds의 배열 (A BlndItmTmMthd []) .

BlndItmTmMthd는 실제로 java.lang.Enum입니까?

+0

예, BlndItmTmMthd는 세 개의 값을 포함하는 열거 형입니다. – rajshekhar

0

java.lang.Object 형식의 개체를 Enum 클래스로 캐스팅하지 못했음을 감안할 때 EJB에서 응답을받은 경우 serialization 및 deserialization 프로세스에서 오류가 발생한다고 생각합니다. 클라이언트.

검사 할 수있는 몇 가지가 있습니다

  • 는 열거 클래스 BlndItmTmMthd가 같은 클래스 로더에서 사용할 수 있습니다, 또는 두 번로드는?
  • 생성 된 EJB의 스텁에는 Enum 클래스 또는 java.lang.Object에 대한 참조가 포함되어 있습니까? 당신의 오류
+0

귀하가 언급 한 두 발행물을 모두 확인해야합니다. – rajshekhar

0

귀하는 서버 코드와 클라이언트 코드에 액세스 할 수 있다고 가정합니다. 이 문제를 추적하려면 당신은 ObjectBlndItmTmMthd에서 길에 모든 장소에서 양식

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

의 로깅 문을 삽입해야한다. 그러면 전환이 어느 시점에서 발생하는지 적어도 말할 수 있습니다.

관련 문제