Serialization 序列化SerialVersionId问题
Clinet在jvma中运行,服务器在jvmb中运行。 从客户端到服务器都有EJB调用 现在,我希望在客户端使用的两个对象中的任意一个Serialization 序列化SerialVersionId问题,serialization,ejb,deserialization,remote-access,serialversionuid,Serialization,Ejb,Deserialization,Remote Access,Serialversionuid,Clinet在jvma中运行,服务器在jvmb中运行。 从客户端到服务器都有EJB调用 现在,我希望在客户端使用的两个对象中的任意一个 LoanDocument的数组 或 BusinessServicesException public interface LoanViewerServicesLocal extends EJBLocalObject { public LoanDocument[] getDocByLoanNumber (String loanNum) throws
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
<代码>公共异常扩展项目异常
<代码>项目异常扩展异常
我在所有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
相关的异常
我测试了好几次,但对于LoanDocument
和CommonDocumentObject,我总是得到相同的serialVersionUID
。
我在服务器和Clinet中使用了下面提到的代码,并且在两侧都得到了相同的serialVersionUID
但在出现BusinessServicesException时总是不同。
Class loanDocClass = LoanDocument.getClass();
long uid = ObjectStreamClass.lookup(loanDocClass).getSerialVersionUID();
当我们在客户端成功获得LoanDocument[]
时,我不会因为反序列化而得到任何与serialVersionUID相关的异常
因为在部署到服务器和部署到客户端之间,您没有对该类进行任何更改。在其他情况下,你有