본문 바로가기
Development/Java

RMI 서버/Client 실행시 UnmarshalException 발생 해결 방법

by 버들도령 2019. 6. 17.
728x90

RMI 서버/Client 실행시 UnmarshalException 발생 해결 방법

 

RMI Server 프로그램을 작성 후 Server 실행시 아래와 같은 에러가 발생

 

 java.rmi.ServerException: RemoteException occurred in server
 thread; nested exception is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
        java.lang.ClassNotFoundException: Stub클래스파일_Stub  ◀◀◀ 자신의 클래스 파일에 따라 다를 수 있음.

 

 

위와 같은 에러가 발생했다면

1. 우선적으로 점검 할 것이 RMI시 사용할 Interface를 이용하여 생성한 클래스 파일의 Skeleton과 Stub 파일을 정상적으로 생성하여 존재하는지를 체크

 

2. RMI Server 실행시 codebase를 올바르게 지정해주었는가를 체크.

 codebase 지정시에는 . 문자로 지정하지 않도록 주의한다.

-Djava.rmi.server.codebase=file:/./

 위와 같이 . 문자로 지정시 rmiregistry 를 실행한 Directory Path가 codebase로 등록되게 되며, 등록된 Path를 기준으로 interface와 Skel, Stub 파일을 찾게 된다.

그러므로 ClassNotFoundException 이 발생하게 되는 것이고, 결과적으로 UnmarshalException이 발생한다.

따라서 codebase를 지정시에는 절대패스로 설정하여주거나 rmiregistry 를 interface와 Skel, Stub 파일의 위치에서 실생시켜주는 것이 문제 발생의 소지를 없애는 지름길이다.

 

RMI 서버 실행시 codebase를 굳이 "." 으로 설정하겠다고 고집피우는 프로그래머가 있다면... ㅡ.ㅡa
최소한 rmiregistry 를 실행시 RMI Server의 interface와 Skel, Stub 파일이 위치한 곳에서 실행시켜주도록 하자.

728x90

댓글