Я работаю над приложением JavaFX, где все объекты нашей модели используют наблюдаемые значения объекта.Мы также используем EclipseLink MOXY для сериализации нескольких моделей в файлы XML, поэтому сохранение значений в ObjectProperty<T>
необходимо, если в выводе свойства со значением NULL отсутствует тег ( требуемая функция ),Мы также ищем способ отслеживать изменения в нескольких модельных объектах и начали изучать JaVers, но столкнулись с некоторыми проблемами.
Поскольку JaVers использует GSON под капотом, мы не смогли успешно использовать его успешно.Похоже, у GSON есть проблемы с реконструкцией классов моделей с использованием наблюдаемых свойств.Вот краткий пример класса модели:
class Demo {
private ObjectProperty<String> someProp =
new SimpleObjectProperty<>(this, "someProp");
public Demo(String someProp) {
this.someProp.setValue(someProp);
}
public ObjectProperty<String> somePropProperty() {
return someProp;
}
@Id
public String getSomeProp() {
return someProp.getValue();
}
public void setSomeProp(String someProp) {
this.someProp.setValue(someProp);
}
}
Вот как мы можем попытаться использовать JaVers с этим классом модели ( Примечание: я не включил ни одну из аннотаций JAXB ) ...
Javers javers = JaversBuilder
.javers()
.withMappingStyle(MappingStyle.BEAN)
.build;
Demo demo = new Demo("one");
javers.commit("test", demo);
demo.setSomeProp("two");
javers.commit("test", demo);
JqlQuery query = QueryBuilder.byInstanceId("one", Demo.class).build();
// this throws runtime exception: java.lang.RuntimeException: Failed to
// invoke public javafx.beans.property.ObjectProperty() with no args
List<Shadow<Demo>> shadows = javers.findShadows(query);
Анализ трассировки стека наводит меня на мысль, что причиной этого является GSON.Самая верхняя часть следа имеет: at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:111)
Любая помощь или совет будет принята с благодарностью!