Java 从SignedObject获取时出现InvalidObject异常

Java 从SignedObject获取时出现InvalidObject异常,java,sockets,deserialization,objectinputstream,siena,Java,Sockets,Deserialization,Objectinputstream,Siena,我使用ObjectInputStream通过TCP连接发送一个封装在消息对象中的对象,该对象封装在SignedObject中。以下是基本代码: 发送 接收 ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); Object line = in.readObject(); SignedObject messageIn = (SignedObject) line; Message msg = (Message)

我使用ObjectInputStream通过TCP连接发送一个封装在消息对象中的对象,该对象封装在SignedObject中。以下是基本代码:

发送

接收

ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
Object line = in.readObject();
SignedObject messageIn = (SignedObject) line;
Message msg = (Message) messageIn.getObject();
Message类是一个基本类,只有字段,没有方法。其中一个字段是Object Message.data,在本例中它包含siena.Filter或siena.Notification。调用SignedObject.getObject时,会得到一个InvalidObject异常。堆栈跟踪在下面

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的问题?如果是后者,我将如何着手解决

谢谢,
David

为什么要将从InputObjectStream获得的内容类型转换为要传递的对象类型?一旦你得到了readObject,只需将它输入到你的SingledObject中,就可以了吗?再次抱歉,我无法完全理解。最好在这里输入一些代码。

问题是一堆文字,一点也不清楚。请重新打磨一下。这是一个有趣的问题,因为让ObjectInStream在TCP上工作可能会变得棘手。编辑你的问题,让它更清晰。@Siddharth:我重新措辞了这个问题,希望能让它更容易理解。如果你还有问题,请告诉我什么是令人困惑的。我不知道你为什么要做Message msg=Message messageIn.getObject;你有你的messageIn对象,就这样。。messageIn是一个SignedObject,它包含一个Message对象。我创建了Message类,以便所有通信都遵循标准格式。当发送带有签名的通信时,最简单的方法是将其封装在SignedObject中,但要检索未签名的通信,我必须使用SignedObject.getObject
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)