Вы можете использовать адаптер для этого, но, насколько я понимаю, ваше требование не является обязательным. Если вы просто хотите демонтировать объект, а не объект Map, вы можете сделать следующее:
Начиная с корня:
@XmlRootElement(name = "ACCOUNT_CHANGES")
@XmlAccessorType(XmlAccessType.FIELD)
public class AccountChanges {
@XmlElement(name = "TYPE")
private Type type;
@XmlElement(name = "RECORD")
private Record record;
}
Давайте уберем Type с пути:
@XmlAccessorType(XmlAccessType.FIELD)
public class Type {
@XmlAttribute
private String value;
}
Затем запись:
@XmlAccessorType(XmlAccessType.FIELD)
public class Record {
@XmlElement(name = "SUBSCRIPTION")
private Subscription subscription;
}
И подписка:
@XmlAccessorType(XmlAccessType.FIELD)
public class Subscription {
@XmlElement(name = "INFO")
private List<Info> infoList;
}
Информация имеет ваш ключ в качестве атрибута, а затем некоторое значение. Это выглядело бы так:
@XmlAccessorType(XmlAccessType.FIELD)
public class Info {
@XmlAttribute
private String key;
@XmlValue
private String value;
public String getKey() {
return key;
}
public String getValue() {
return value;
}
}
Это приведет к демонтажу вашего xml, и информационные ключи и значения будут в полях. Если вам нужен ключ и значение на карте, вы можете использовать адаптер.
Адаптер выглядит следующим образом:
public class MyMapAdapter extends XmlAdapter<Info, Map<String, String>> {
private HashMap<String, String> hashMap = new HashMap<String, String>();
@Override
public Map<String, String> unmarshal(Info v) throws Exception {
hashMap.put(v.getKey(), v.getValue());
return hashMap;
}
@Override
public Info marshal(Map<String, String> v) throws Exception {
// do here actions for marshalling if u also marshal
return null;
}
}
И вы измените Подписку, чтобы использовать адаптер и иметь карту в качестве поля:
@XmlAccessorType(XmlAccessType.FIELD)
public class Subscription {
@XmlElement(name = "INFO")
@XmlJavaTypeAdapter(MyMapAdapter.class)
private Map<String, String> infoMap;
}
Два способа,оба демонтируют вашу полезную нагрузку xml.
Cheers