远程EJB是否可以在没有包含与Map中存储的对象关联的类文件的jar文件的情况下反序列化Map对象?
假设我们创建了以下Java类:
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中放置此类的实例:
Map<String, Object> mapOfObjects = new HashMap<String, Object>();
MyCustomObject customObject = new MyCustomObject();
customObject.setMyInt(3);
customObject.setMyString("Hello");
mapOfObjects.put("MyCustomObjectKey", customObject);
如果我现在将此Map对象传递给远程EJB,假设远程EJB没有对MyCustomObject类的引用,那么在反序列化过程中是否会抛出异常?
据我所知,如果我想从Map中检索自定义对象,我必须引用MyCustomObject类
public class RemoteEJB()
{
public void remoteMethod(Map<String,Object> mapOfObjects)
{
MyCustomObject customObject = (MyCustomObject)mapOfObjects.get("MyCustomObjectKey"); //java.lang.NoClassDefFoundError - Won't compile
}
}
问题是:假设我不想将对象拉出Map,是否会在远程EJB上进行remoteMethod调用或抛出异常?
答案 0 :(得分:0)
是的,因为HashMap的反序列化将立即要求反序列化辅助对象,这将失败。如果需要支持这个用例,可以编写一个执行内部序列化步骤的自定义Map(即writeObject创建一个新的ObjectOutputStream来编写内部对象),然后执行按需反序列化(即get ()创建一个新的ObjectInputStream来读取内部对象。)