2012-11-17 11 views
5

Có thể sắp xếp XML trực tiếp vào một đối tượng hiện có và chỉ có các trường cụ thể được cập nhật không?Chuyển đến một đối tượng hiện có bằng cách sử dụng JAXB

Tôi chỉ muốn sửa đổi các trường nhất định được khách hàng yêu cầu.

Mọi con trỏ?

+0

Nó có thể được thực hiện với sự phản ánh. Tùy thuộc vào mức độ phức tạp của các loại, nó có thể khá đơn giản. Tò mò để xem có thư viện nào được khuyên dùng hay không. – jahroy

+0

Các đối tượng không được sửa đổi không nằm trong tầm kiểm soát của tôi. Họ có thể chứa bất kỳ loại thành viên nào, bao gồm cả các lớp do người dùng xác định khác. Trong trường hợp này, có thể sử dụng sự phản chiếu? Tôi cũng nên sử dụng Introspection? Bất kỳ ví dụ có sẵn cho cùng? –

+0

Đó là điểm phản chiếu: bạn có thể kiểm tra bất kỳ đối tượng nào mà không biết gì về nó. Tôi sẽ không thể làm việc trên một ví dụ ngày hôm nay, nhưng sẽ xem nếu tôi có thể đăng một số mã sau tối nay (có thể trong 12 giờ). – jahroy

Trả lời

0

Giải pháp là: Chú thích và phản ánh. và không có thư viện nào giống nhau. Tôi đã tìm kiếm rất nhiều khi tôi thực hiện nhiệm vụ này.

Tôi đã thực hiện chính xác điều tương tự như bạn muốn, tôi đã thực hiện triển khai của riêng mình cho việc này. Nhưng nó là độc quyền nên tôi không thể chia sẻ.

Nhưng để gợi ý cho bạn về giải pháp: Tôi đã sử dụng chú thích để đánh dấu các trường có thể tải lại và sau đó sử dụng Reflection để chỉ tải lại các phần có thể tải lại.

Bước 1: Một lần nữa unmarshal xml để tạo ra một đối tượng mới

Bước 2: Gọi phương thức setter trên đối tượng cũ với các giá trị mới từ đối tượng mới unmarshalled.

Hy vọng điều này sẽ hữu ích.

+0

Nhưng tôi thấy từ các nhận xét ở trên rằng nguồn không nằm trong tầm kiểm soát của bạn, thì Reflection có thể trợ giúp ở đây, miễn là có các phương thức setter công khai vào các thuộc tính mà bạn đang cố gắng tải lại. –

0

Câu trả lời ngắn gọn là không. Không có cách nào dễ dàng để tùy chỉnh các ràng buộc jaxb suy nghĩ của một giải pháp chung chung. Xem JAXB and class instantiation

Một giải pháp khác (có thể là cruder) sẽ là trích xuất phần XML bạn muốn xử lý và sau đó thực thi unmarshall. Xem Java How to extract a complete XML block