Доброго времени суток. Столкнулся с таким интересным кейсом: Есть некое пространство(папка, MQ-очередь, топик кафки, в общем - неважно), куда пишется в сериализованом виде Объект Java-класса. При помощи своего листенера я слушаю это пространство. И вытаскиваю данный объект. Есть ли возможность десериализовать или вытащить данные из объекта, при условии что класса данного объекта у меня нет? Как минимум в виде мапы "someFieldName ==> someFieldValue".
Естественно при попытках обычной десириализации ловлю Class not Found. ObjectInputStream.getFiels выдает NotActiveException.
Заранее спасибо.
Попробуй десериализовать к 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
Таким образом можно получить все поля данного (непонятно какого) класса. Далее можно делать с этим массивом что тебе нужно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Суть вопроса такова: У меня уже есть таблица, к примеру, "Использование авто в такси"По проекту мне необходимо сравнить внешнюю таблицу (или...
Добрый день! Подскажите, пожалуйста, в моей программе есть кнопка, по нажатию которой создается таблица (JTable) во вкладке, вкладке присваивается...
Подскажите пожалуйста, у меня имеется один docker-compose файлВ нём есть 2 тестовых сервиса и 2 рабочих
Делаю Navigation drawer внутри него RecyclerView необходимо по клику по item-y RcyclerView открывать новый фрагмент