Clinet 运行在 JVM A 中,Server 运行在 JVM B 中。客户端到服务器的所有 EJB 调用。
现在我期望在客户端的 2 个对象中的任何一个。
数组
LoanDocument
或者
BusinessServicesException
public interface LoanViewerServicesLocal extends EJBLocalObject { public LoanDocument[] getDocByLoanNumber (String loanNum) throws BusinessServicesException; public interface LoanViewerServices extends EJBObject { public LoanDocument[] getDocByLoanNumber (String loanNum) throws RemoteException,BusinessServicesException;
现在BusinessServicesException
扩展CommonException
;CommonException
扩展ProjectException
;ProjectException
延伸Exception
。
我在所有 3 个异常类(客户端和服务器端)中指定了一个serialVersionUID
值,1L
以避免客户端的反序列化问题。
否则我会得到
java.io.InvalidClassException: com.abc.common.ProjectException; local class incompatible: stream classdesc serialVersionUID = 354159461886461208, local class serialVersionUID = -5937350397277039691
因此,在所有 3 个类中提到 1L(serialVersionUID = 1L)解决了这个问题。
现在LoanDocument
对象扩展CommonDocumentObject
了,但没有一个具有serialVersionUID
或实现Serializable
接口。
但是当我们在客户端取得成功时,由于反序列化LoanDocument[]
,我没有得到任何相关的异常?serialVersionUID
我测试了几次,但我总是得到相同serialVersionUID
的LoanDocument
结果CommonDocumentObject.
我在 Server 和 Clinet 中使用了下面提到的代码,并且serialVersionUID
双方总是相同的。
但在以下情况下总是不同的BusinessServicesException.
Class loanDocClass = LoanDocument.getClass();
long uid = ObjectStreamClass.lookup(loanDocClass).getSerialVersionUID();