Вы должны использовать XmlAdapter и @XmlJavaTypeAdapter аннотацию.
Шаг 1: Создайте объект класса, который представляет ваш элемент <entity>
и сопоставьте его с JAXB.
Шаг 2: Создайте класс, который расширяет XmlAdapter<List<Entity>,Map<String,Object>
и определите методы рефератов marshall и unmarshall.
Шаг 3: Создание класса сущностей, как это:
@XmlRootElement
@XmlSeeAlso({Entity.class})
@XmlAccessorType(XmlAccessType.FIELD)
public class Entities{
@XmlElement(name="entity")
@XmlJavaTypeAdapter(YourAdapter.class)
private Map<String,Object> yourMap;
//getters, setters, and methods
}
Затем, когда вы маршализацию файл, вы будете иметь Entities объект, который содержит карту.
Скажите, пожалуйста, если вы столкнулись с проблемой, если это решение соответствует вашим потребностям, поэтому я могу отредактировать/добавить свой ответ.
EDIT:
Если Entities элемент не корневой элемент, то вы можете отобразить это следующим образом:
class ParentElement{
//Other fields
@XmlElement(name="entities")
private Entities entities;
//Getters, Setters, Methods
}
И держать класс Entities
@XmlSeeAlso({Entity.class})
public class Entities{
@XmlElement(name="entity")
@XmlJavaTypeAdapter(YourAdapter.class)
private Map<String,Object> yourMap;
//getters, setters, and methods
}
Спасибо, единственная проблема, с которой я не могу обернуть голову, состоит в том, что не является XmlRootElement, а скорее как член более крупного объекта. Я обновлю свой первоначальный вопрос. –
vasily
Я обновил ответ, решает ли ваша проблема? –
Спасибо, это было не напрямую, но вы, безусловно, помогли мне подняться на правильный путь. JAXB не нравится \ @XmlElementWrapper и \ @XmlJavaTypeAdapter в том же свойстве. Мне пришлось создать еще один объект для коллекции. – vasily