Вы определенно не можете динамически добавлять классы в JAXBContext. Это связано с сохранением безопасности потоков JAXBContext.
Я недавно опубликовал пример на my blog объяснить, как использовать @XmlAnyElement аннотацию, чтобы создать общее сообщение, что может иметь различные полезные нагрузки:
Корневой объект
Корневой элемент для свойства body будет управляться этими объектами @XmlRootElement.
package message;
import javax.xml.bind.annotation.*;
@[email protected](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");