ObjectInputStream を使用して TCP 接続を介して、SignedObject に含まれる Message オブジェクトに含まれるオブジェクトを送信しています。基本的なコードは次のとおりです。
送信
Object data = someObject;
ObjectOutputStream = new ObjectOutputStream(socket.getOutputStream());
Message newMsg = new Message(data);
out.writeObject(security.signObject(newMsg,privKey));
受け取る
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
Object line = in.readObject();
SignedObject messageIn = (SignedObject) line;
Message msg = (Message) messageIn.getObject();
Message クラスは、フィールドのみでメソッドを持たない基本クラスです。フィールドの 1 つは Object Message.data で、この場合は siena.Filter または siena.Notification のいずれかが含まれています。SignedObject.getObject() を呼び出すと、InvalidObjectException が発生します。スタックトレースは以下です。
java.io.InvalidObjectException: siena.SENPInvalidFormat
at siena.Filter.readObject(Filter.java:127)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at java.security.SignedObject.getObject(Unknown Source)
メッセージ転送のコードは正しいです。他のクラスの他の多くのケースで機能し、同じクラスの他のバージョンでも機能します。特定のバージョンの siena.Filter および siena.Notification では機能しません。
送信されているクラス (siena.Filter または siena.Notification) の readObject() メソッドが呼び出されていることがわかりますが、これが発生するはずなのかどうかはわかりません。siena メソッド内で例外がスローされていることはわかっていますが、これが InvalidObjectException を引き起こしていると推測しています。
問題は、siena.class.readObject() が例外をスローして適切に記述されていないことが問題なのか、それとも siena.class.readObject() がまったく呼び出されていることが問題なのかということです。後者の場合、どうすれば修正できますか?
ありがとう、デビッド