Có cách nào để tạo trình chuyển đổi hoặc một số thao tác được thực hiện sau mỗi chuyển đổi không? Đối với ngữ cảnh, tôi cố gắng điền các giá trị mặc định cho các trường không có trong XML của tôi để duy trì khả năng tương thích ngược nếu mô hình dữ liệu của tôi thay đổi. Ví dụ, nếu tôi có đối tượng này:Đặt giá trị mặc định cho các trường không có trong XML trong XStream
class A {
private String b;
private String c;
private String d;
}
và XML của tôi là một cái gì đó như:
<a>
<b>b</b>
<d>d</d>
</a>
Tôi muốn nhập khẩu của tôi về XML để biết rằng có một giá trị mặc định cho trường c
rằng là "c"
và đặt nó trên A
như vậy. Đây là một hoạt động chung mà tôi có thể thêm mặc định vào bất kỳ trường nào của biểu đồ rất phức tạp. Nếu có một số cách để kích hoạt một hàm sau mỗi lần chuyển đổi, nó có thể kiểm tra đối tượng hiện tại dựa vào một bản đồ các đối tượng mà tôi muốn đặt giá trị mặc định. Cũng cần lưu ý rằng việc sử dụng readResolve/readObject dường như không phải là một lựa chọn vì 1. readObject() dường như không làm việc cho tôi chút nào và 2. readResolve sẽ ghi đè lên trường bằng giá trị mặc định ngay cả khi nó thực sự là được bao gồm trong XML. Xin vui lòng cho tôi biết nếu giả định của tôi ở đây là sai mặc dù.
Sửa :: Tôi tìm thấy thread có liên quan này vào danh sách người dùng chỉ gửi thư: http://article.gmane.org/gmane.comp.java.xstream.user/4619/match=default+value
và nó có vẻ như là giải pháp gợi ý duy nhất là sử dụng readResolve()
mà tôi đã nói không phải là một giải pháp hợp lệ.
Cảm ơn pablosaraiva, nhưng điều này sẽ chỉ làm việc một cách rõ ràng cho một số lớp A. Tôi cần điều này để làm việc chung trên bất kỳ đối tượng nào trong đồ thị đầy đủ của tôi. Vì vậy, nó phải làm việc cho các đối tượng B/C/D, và bất kỳ đối tượng nào mà B C D cũng có thể có. Ngoài ra, nếu các trường bổ sung được thêm vào trong trường hợp này, nó sẽ yêu cầu duy trì công cụ chuyển đổi này. Lý tưởng nhất, tôi chỉ có thể nói một cái gì đó như newDefaultField (classWithNewDefault.class, newFieldName, newDefaultValue) bất cứ lúc nào tôi cần phải thêm một mặc định mới. – eipark
Đây chỉ là một giải pháp đồ chơi cho vấn đề đồ chơi. Có thể bạn sẽ cần một trình biến đổi cho mọi lớp với các giá trị mặc định. Bạn không cần phải xây dựng các đối tượng bằng tay tại unmarshal, bạn có thể có một nhà máy để chăm sóc nó. Tôi hy vọng nó sẽ giúp. – pablosaraiva
Phải. Tôi đoán mục đích là để tránh bất kỳ bảo trì thực sự mà có thể nhận được phức tạp và ra khỏi bàn tay một cách nhanh chóng. Thật không may tôi không nghĩ rằng XStream cung cấp một giải pháp tốt hơn cho điều này vượt ra ngoài chuyển đổi cho mỗi, hoặc một readResolve() ở khắp mọi nơi. – eipark