Czy istnieje sposób na utworzenie konwertera lub jakiejś operacji wykonywanej po każdej konwersji? Dla kontekstu, próbuję wypełnić domyślne wartości pól, które nie są w moim XML, aby zachować kompatybilność wsteczną, jeśli mój model danych się zmieni. Na przykład, gdybym miał ten obiekt:Ustaw domyślną wartość dla pól spoza XML w XStream
class A {
private String b;
private String c;
private String d;
}
i mój XML było coś takiego:
<a>
<b>b</b>
<d>d</d>
</a>
Chcę moje importu XML, aby wiedzieć, że nie jest wartością domyślną dla pola c
że to "c"
i ustaw go jako A
. Powinna to być operacja ogólna, do której mogę dodać wartości domyślne do dowolnego pola bardzo złożonego wykresu. Jeśli był jakiś sposób wywołania funkcji po każdej konwersji, mógł sprawdzić bieżący obiekt na mapie obiektów, dla których chciałbym ustawić domyślną wartość.
Zauważ, że używanie readResolve/readObject nie wydaje się być opcją, ponieważ 1. readObject() nigdy nie działało dla mnie w ogóle i 2. readResolve nadpisałby pole z wartością domyślną, nawet jeśli faktycznie zawarte w XML. Daj mi znać, jeśli moje założenia tutaj są złe.
Edit :: Znalazłem ten wątek powiązany z listy mailingowej użytkownika: http://article.gmane.org/gmane.comp.java.xstream.user/4619/match=default+value
i wydaje się, że tylko proponowane rozwiązanie jest użycie readResolve()
których już mówiłem nie było ważne rozwiązanie.
Dziękuję pablosaraiva, ale będzie to działać wyłącznie dla niektórych klas A. Potrzebuję tego do ogólnej pracy z dowolnym obiektem na moim pełnym grafie obiektu. Musi więc działać dla obiektów B/C/D i dowolnych obiektów, które może mieć B C D. Ponadto, jeśli dodatkowe pola zostały dodane w tym przypadku, wymagałoby to utrzymania tego konwertera. Idealnie, mógłbym tylko powiedzieć coś jak newDefaultField (classWithNewDefault.class, newFieldName, newDefaultValue) za każdym razem, gdy potrzebuję dodać nową wartość domyślną. – eipark
To tylko zabawkowe rozwiązanie problemu zabawek. Prawdopodobnie będziesz potrzebował konwertera dla każdej klasy z wartościami domyślnymi. Nie musisz budować obiektów ręcznie na nieagresywnych, możesz mieć fabrykę, która się tym zajmie. Mam nadzieję, że to pomoże. – pablosaraiva
W prawo. Myślę, że celem jest uniknięcie prawdziwej konserwacji, która mogłaby szybko się skomplikować i wymknąć spod kontroli. Niestety nie sądzę, że XStream oferuje lepsze rozwiązanie tego poza konwerterami dla każdego lub readResolve() wszędzie. – eipark