Я хочу разделить объекты Java в разных приложениях.de/serialize java-объекты в разных приложениях с использованием разных имен пакетов
Пока я использую те же названия пакетов в разных проектах, он отлично работает. Но если я меняю имена пакетов, это больше не работает.
Я попытался решить эту проблему, расширив класс ObjectInputStream
и переопределив метод readClassDescriptor
.
Но при этом я получаю следующее сообщение об ошибке:
java.io.StreamCorruptedException: invalid type code: 00
... не знаю, как решить эту проблему.
Вот код, который я использую для расширенного класса ObjectInputStream:
public class MyObjectInputStream extends ObjectInputStream {
public static Map<String, Class> classNameMapping = initclassNameMapping();
private static Map<String, Class> initclassNameMapping(){
Map<String, Class> res = new HashMap<String, Class>();
//ipxTest is the name of the package where the objects got serialized
res.put("ipxTest.IPX", interprojectxchangeTest.IPX.class);
res.put("ipxTest.A", interprojectxchangeTest.A.class);
return Collections.unmodifiableMap(res);
}
public MyObjectInputStream(InputStream in) throws IOException {
super(in);
enableResolveObject(true);
}
protected MyObjectInputStream() throws IOException, SecurityException {
super();
enableResolveObject(true);
}
@Override
protected java.io.ObjectStreamClass readClassDescriptor()
throws IOException, ClassNotFoundException {
ObjectStreamClass desc = super.readClassDescriptor();
if (classNameMapping.containsKey(desc.getName()))
return ObjectStreamClass.lookup(classNameMapping.get(desc.getName()));
return desc;
}
}
протокол IPX и А классы оба выглядят равными в различных проектах и имеют каждый такую же serialID.
Эти вопросы могут быть полезны: http://stackoverflow.com/a/13262989/446554 и http://stackoverflow.com/a/13263036/446554 –
Мой вопрос: почему переписывается «readClassDescriptor» метод не может решить описанную проблему. то есть, что исходный класс больше не доступен для jvm под его первоначальным именем ... – matthiasboesinger