1

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() がまったく呼び出されていることが問題なのかということです。後者の場合、どうすれば修正できますか?

ありがとう、デビッド

4

1 に答える 1

0

InputObjectStream から取得したものを、渡すオブジェクトの型に型キャストするのはなぜですか? readObject を取得したら、それを SingledObject に型キャストするだけで機能しますか? 申し訳ありませんが、私は完全に理解することができません。ここにいくつかのコードを入れた方が良いでしょう。

于 2012-07-31T18:51:28.177 に答える