Tôi biết những điều cơ bản của API JAXB, nhưng tôi bị mắc kẹt với một cái gì đó tôi đang cố gắng làm, và tôi không chắc chắn cho dù đó là thực sự có thể. Cụ thể như sau:Làm thế nào để đối chiếu Java/unmarshal Java đối tượng với các lĩnh vực tư nhân sử dụng JAXB
Tôi có một lớp được gọi là Sách với 2 công biến thể hiện của kiểu String:
@XmlRootElement(name="book")
public class Book
{
public String title;
public String author;
public Book() {
}
}
Tôi có một lớp khác gọi là thư quán với 1 công dụ biến loại ArrayList:
@XmlRootElement(name="bookshop")
public class Bookshop
{
@XmlElementWrapper(name="book_list")
@XmlElement(name="book")
public ArrayList<Book> bookList;
public Bookshop() {
this.bookList = new ArrayList<>();
}
}
Lưu ý: gói khai báo và nhập khẩu được loại bỏ để tiết kiệm không gian.
Hai lớp học làm việc và XML đầu ra tôi nhận được là một cái gì đó như:
<bookshop>
<book_list>
<book>
<title>Book 1</title>
<author>Author 1</author>
</book>
<book>
<title>Book 2</title>
<author>Author 2</author>
</book>
</book_list>
</bookshop>
Theo như tôi biết, các biến Ví dụ cần phải được công bố công theo thứ tự cho các lớp học được serialisable. Hoặc, các biến mẫu có thể được khai báo riêng, nhưng các trình truy cập và các biến thể là cần thiết trong trường hợp đó.
Tôi không thích khai báo các biến mẫu công khai; Tôi thích sử dụng accessors và mutators. Thậm chí sau đó, tôi muốn một số lĩnh vực của tôi để được chỉ đọc, tức là, không có mutator. Nhưng JAXB dường như yêu cầu cả hai accessors và mutators cho mỗi lĩnh vực bạn muốn sắp xếp/unmarshal. Tôi đã tự hỏi nếu có bất kỳ cách nào xung quanh điều này?
Liệu không jaxb sử dụng phản ánh? – Jayan
Nhìn vào câu hỏi này http://stackoverflow.com/questions/3391256/how-java-jaxb-works, nó chỉ hoạt động tốt với các trường riêng – Jayan
Có, nó sử dụng sự phản chiếu; có lẽ tôi cần thêm thuộc tính XML vào từng trường mẫu (công khai, riêng tư hoặc được bảo vệ) – temelm