0

マップに格納されているオブジェクトに関連付けられたクラス ファイルを含む 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 に配置します。

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 呼び出しが行われるか、それとも例外がスローされるかということです。

4

1 に答える 1

0

はい。HashMap の逆シリアル化では、セカンダリ オブジェクトをすぐに逆シリアル化する必要があり、失敗します。このユースケースをサポートする必要がある場合は、内部シリアル化ステップを実行するカスタム Map を記述し (つまり、writeObject が新しい ObjectOutputStream を作成して内部オブジェクトを書き込みます)、オンデマンドの逆シリアル化を実行します (つまり、get () は新しい ObjectInputStream を作成して内部オブジェクトを読み取ります)。

于 2013-01-08T15:30:25.757 に答える