Вы определенно не можете динамически добавлять классы в JAXBContext.Это связано с поддержанием безопасности потоков JAXBContext.
Недавно я опубликовал пример на моем блоге , объясняющий, как использовать аннотацию @XmlAnyElement для генерации общего сообщения, которое может иметь разныеполезные нагрузки:
Корневой объект
Корневой элемент для свойства body будет управляться этими объектами@ XmlRootElement.
package message;
import javax.xml.bind.annotation.*;
@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)
public class Message {
@XmlAttribute
private String to;
@XmlAttribute
private String from;
@XmlAnyElement
private Object body;
}
Создание JAXBContext
Вместо создания JAXBContext в массиве классов, JAXBContext может быть создан по пути контекста:
JAXBContext.newInstance("message:customer:product");
Этот контекстный путь включает в себя 3 имени пакета, разделенных символом двоеточия ':'.В каждый из этих пакетов нам нужно включить файл с именем jaxb.index со списком файлов.Ниже приведен пример файла jaxb.index в клиентском пакете:
Address
Customer
Когда мы хотим добавить модель для представления заказов в нашей структуре, мы расширили бы создание нашего JAXBContext до (эта строка может бытьпередается как переменная):
JAXBContext.newInstance("message:customer:product:order");