Se non si utilizza moxy o semplicemente si vuole attenersi a standard di annotazioni JAXB, è possibile estendere alla risposta di Noby per aggiungere il supporto per una classe wrapper generico.La risposta di Noby solo al momento supporta un elenco di stringhe, ma ad esempio stai per utilizzare la stessa classe wrapper generica per diverse classi diverse. Nel mio esempio, voglio creare una classe generica "PagedList" che eseguirà il marshalling verso qualcosa che assomiglia a un elenco, ma contiene anche informazioni sull'offset della pagina e il numero totale di elementi nell'elenco non aperto.
Uno svantaggio di questa soluzione è che è necessario aggiungere ulteriori mapping @XmlElement per ogni tipo di classe che verrà spostato. Nel complesso, tuttavia, probabilmente è una soluzione migliore rispetto alla creazione di una nuova classe per ogni elemento pagabile.
@XmlType
public class PagedList<T> {
@XmlAttribute
public int offset;
@XmlAttribute
public long total;
@XmlElements({
@XmlElement(name="order", type=Order.class),
@XmlElement(name="address", type=Address.class)
// additional as needed
})
public List<T> items;
}
@XmlRootElement(name="customer-profile")
public class CustomerProfile {
@XmlElement
public PagedList<Order> orders;
@XmlElement
public PagedList<Address> addresses;
}
Marshalling questo esempio si otterrebbe:
<customer-profile>
<order offset="1" total="100">
<order> ... </order>
<order> ... </order>
<order> ... </order>
...
</orders>
<addresses offset="1" total="5">
<address> ... </address>
<address> ... </address>
<address> ... </address>
<address> ... </address>
<address> ... </address>
<addresses>
</customer-profile>
Speranza che aiuta. Questa è la soluzione che ho risolto almeno.
fonte
2011-12-30 17:12:07
La soluzione di Noby funziona bene se hai solo un tipo di raccolta da incartare (nell'esempio, è una stringa). Se si desidera estendere la soluzione per creare una classe di wrapper di elenchi più generica con attributi, è possibile utilizzare l'annotazione @XmlElements per creare associazioni aggiuntive. Sto esaurendo lo spazio in questo commento, quindi posterò il codice di esempio in un'altra risposta. –