Conosco le basi dell'API JAXB, ma sono bloccato con qualcosa che sto cercando di fare e non sono sicuro che sia effettivamente possibile. I dettagli sono i seguenti:Come eseguire il marshalling di oggetti Java unmarshal con campi privati utilizzando JAXB
ho una classe chiamata Prenota con 2 pubblici variabili di istanza di tipo String:
@XmlRootElement(name="book")
public class Book
{
public String title;
public String author;
public Book() {
}
}
ho un altro classe chiamata Bookshop con 1 pubblico esempio variabile di tipo ArrayList:
@XmlRootElement(name="bookshop")
public class Bookshop
{
@XmlElementWrapper(name="book_list")
@XmlElement(name="book")
public ArrayList<Book> bookList;
public Bookshop() {
this.bookList = new ArrayList<>();
}
}
Nota: pacchetto la dichiarazione e le importazioni vengono rimosse per risparmiare spazio.
Queste due classi di lavoro e il XML uscita ottengo è qualcosa di simile:
<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>
Per quanto ne so, le variabili di istanza devono essere dichiarate pubblico al fine per la sua classe di essere serialisable. Oppure, le variabili di istanza possono essere dichiarate private, ma in questo caso sono necessari accessor e mutator.
Non mi piace dichiarare pubbliche le variabili di istanza; Mi piace usare accessors e mutator. Anche allora, voglio che alcuni dei miei campi siano di sola lettura, cioè nessun mutatore. Ma JAXB sembra richiedere sia gli accessori che i mutatori per ogni campo che vuoi maresciallo/unmarsale. Mi stavo chiedendo se c'è un modo per aggirare questo?
non jaxb usa la riflessione? – Jayan
Guardando questa domanda http://stackoverflow.com/questions/3391256/how-java-jaxb-works, dovrebbe funzionare bene solo con i campi privati – Jayan
Sì, utilizza la riflessione; forse ho bisogno di aggiungere attributo XML a ogni campo di istanza (pubblico, privato o protetto) – temelm