#java
Доброго времени суток. Столкнулся с таким интересным кейсом: Есть некое пространство(папка, MQ-очередь, топик кафки, в общем - неважно), куда пишется в сериализованом виде Объект Java-класса. При помощи своего листенера я слушаю это пространство. И вытаскиваю данный объект. Есть ли возможность десериализовать или вытащить данные из объекта, при условии что класса данного объекта у меня нет? Как минимум в виде мапы "someFieldName ==> someFieldValue". Естественно при попытках обычной десириализации ловлю Class not Found. ObjectInputStream.getFiels выдает NotActiveException. Заранее спасибо.
Ответы
Ответ 1
Попробуй десериализовать к Object. А потом с помощью механизма рефлексии вытаскивать поля класса. Например: P p = new P(); try(ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("myStrings.data"))) { oos.writeObject(p); } catch(Exception ex) { System.out.println(ex.getMessage()); } Записал объект P. try(ObjectInputStream ois = new ObjectInputStream( new FileInputStream("myStrings.data"))) { Object someClass = ois.readObject().getClass().newInstance(); Field[] fields = someClass.getClass().getDeclaredFields(); System.out.println(fields[0].getGenericType() + " " + fields[0].getName() + " = " + fields[0].get(someClass)); } catch(Exception ex) { System.out.println(ex.getMessage()); } Получу вывод: int id = 0 Таким образом можно получить все поля данного (непонятно какого) класса. Далее можно делать с этим массивом что тебе нужно.
Комментариев нет:
Отправить комментарий