Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Map的反序列化<;字符串,对象>;没有类定义_Java_Serialization_Ejb - Fatal编程技术网

Java Map的反序列化<;字符串,对象>;没有类定义

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;

如果没有包含与存储在映射中的对象相关联的类文件的jar文件,远程EJB能否反序列化映射对象?

假设我们创建了以下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<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以读取内部对象).

你为什么不试试呢?我想了解结果背后的原因,而不仅仅是结果本身。