Java Map的反序列化<;字符串,对象>;没有类定义
如果没有包含与存储在映射中的对象相关联的类文件的jar文件,远程EJB能否反序列化映射对象? 假设我们创建了以下Java类:Java Map的反序列化<;字符串,对象>;没有类定义,java,serialization,ejb,Java,Serialization,Ejb,如果没有包含与存储在映射中的对象相关联的类文件的jar文件,远程EJB能否反序列化映射对象? 假设我们创建了以下Java类: import java.io.Serializable; public class MyCustomObject implements Serializable { private static final long serialVersionUID = -3100182702835154967L; private String myString;
import java.io.Serializable;
public class MyCustomObject implements Serializable
{
private static final long serialVersionUID = -3100182702835154967L;
private String myString;
private int myInt;
public String getMyString()
{
return myString;
}
public void setMyString(String myString)
{
this.myString = myString;
}
public int getMyInt()
{
return myInt;
}
public void setMyInt(int myInt)
{
this.myInt = myInt;
}
}
我们将此类的一个实例放置在映射中:
Map<String, Object> mapOfObjects = new HashMap<String, Object>();
MyCustomObject customObject = new MyCustomObject();
customObject.setMyInt(3);
customObject.setMyString("Hello");
mapOfObjects.put("MyCustomObjectKey", customObject);
Map-mapoobjects=new-HashMap();
MyCustomObject=新的MyCustomObject();
customObject.setMyInt(3);
setMyString(“你好”);
put(“MyCustomObjectKey”,customObject);
如果我现在将这个映射对象传递给远程EJB,假设远程EJB没有对MyCustomObject类的引用,那么在反序列化过程中会引发异常吗
我知道如果我想从映射中检索自定义对象,我必须有一个对MyCustomObject类的引用
public class RemoteEJB()
{
public void remoteMethod(Map<String,Object> mapOfObjects)
{
MyCustomObject customObject = (MyCustomObject)mapOfObjects.get("MyCustomObjectKey"); //java.lang.NoClassDefFoundError - Won't compile
}
}
公共类RemoteEJB()
{
公共void remoteMethod(映射对象)
{
MyCustomObject customObject=(MyCustomObject)mapOfObjects.get(“MyCustomObjectKey”);//java.lang.NoClassDefFoundError-不会编译
}
}
问题是:假设我不想将对象从映射中拉出,remoteMethod调用会在远程EJB上发生还是会引发异常?是,因为HashMap的反序列化将立即要求反序列化辅助对象,这将失败。如果需要支持此用例,可以编写执行内部序列化步骤的自定义映射(即writeObject创建新的ObjectOutputStream以写入内部对象),然后执行按需反序列化(即get()创建新的ObjectInputStream以读取内部对象).你为什么不试试呢?我想了解结果背后的原因,而不仅仅是结果本身。