Clinet在JVM A中运行,服务器在JVM B中运行。 从客户端到服务器都有EJB调用。
现在客户端期望的两个对象中的任何一个。
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个类(serialVersionUID = 1L)中提及1L可以解决问题。
现在LoanDocument
个对象扩展CommonDocumentObject
,但没有一个拥有serialVersionUID
或实现Serializable
接口。
但是当我们在客户端获得成功LoanDocument[]
时,由于反序列化,我没有收到任何serialVersionUID
相关的异常?
我测试了几次,但serialVersionUID
和LoanDocument
CommonDocumentObject.
我在Server和Clinet中使用下面提到的代码,并且我在两边总是相同serialVersionUID
。
但BusinessServicesException.
Class loanDocClass = LoanDocument.getClass();
long uid = ObjectStreamClass.lookup(loanDocClass).getSerialVersionUID();
答案 0 :(得分:0)
当我们在客户端获得成功
LoanDocument[]
时,由于反序列化,我没有得到任何与serialVersionUID相关的异常?
因为在部署到服务器和部署到客户端之间没有对该类进行任何更改。在其他情况下,你有。