InvalidObjectException при получении от SignedObject

Я отправляю объект, заключенный в объект Message, заключенный в SignedObject, по TCP-соединению, используя ObjectInputStream. Вот основной код:

послать

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 - это базовый класс, содержащий только поля и не содержащий методов. Одним из полей является 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.

Я вижу, что вызывается метод readObject() отправляемого класса (siena.Filter или siena.Notification), но я не знаю, должно ли это происходить или нет. Я знаю, что в методе siena создается исключение, которое, как я предполагаю, вызывает InvalidObjectException.

Таким образом, вопрос заключается в том, является ли проблема тем, что siena.class.readObject() создает исключение и не записывается должным образом, или проблема в том, что siena.class.readObject() вызывается вообще? Если последнее, как бы я исправить это?

Спасибо Дэвид

1 ответ

Почему вы просто набираете приведение того, что вы получаете от вашего InputObjectStream к типу объекта, который вы передаете? Как только вы получите readObject, просто введите его в свой SingledObject, он должен работать? Извините еще раз, я не могу полностью понять. Лучше, если вы добавите сюда немного кода.

Другие вопросы по тегам