У нас есть очень большой граф объектов (ленивая загрузка из БД через DataNucleus ORM во время обычного выполнения программы, поэтому обычно проблем нет), но мы хотим сериализовать только небольшую его часть с помощью SnakeYaml — всего лишь небольшое подмножество классов.
Существует связь между одним из этих классов и другими классами, которые в конечном итоге «достигают» большинства других объектов в графе объектов, что приводит к извлечению почти всех объектов из базы данных в поток сериализации YAML — классическая «сериализация всего мира». " проблема, которая не заканчивается хорошо, когда у вас есть миллионы доступных объектов, как вы можете себе представить :)
Я нашел класс SnakeYaml 'Representer', который выглядит как хук, который позволяет вам указать «не» для сериализации определенного компонента, но похоже, что он не действует как прерыватель цепи в процессе навигации по графу объектов, когда он сталкивается с этим компонентом. Он не будет записывать вывод YAML для этого bean-компонента, но SnakeYaml, похоже, продолжает перемещаться по графу объектов за этим bean-компонентом.
private class CircuitBreakerRepresenter extends Representer
{
@Override
protected NodeTuple representJavaBeanProperty(Object javaBean, Property property,
Object propertyValue, Tag customTag) {
// Intention: Don't navigate past the instances of 'Role' class when serializing
// Outcome: Appears to continue navigating past 'Role' class instances
if (javaBean instanceof Role) {
return null;
} else {
return super.representJavaBeanProperty(javaBean, property, propertyValue,
customTag);
}
}
}
Есть ли способ заставить SnakeYaml не проходить мимо определенного компонента при сериализации графа объектов?