Задать вопрос
@ingush

Как сконвертировать hashmap в атрибуты XML (JAXB)?

Добрового времени и суток!

У меня есть скласс XmlResponse:

@XmlRootElement (name = "response")
public class XMLResponse {
    @XmlAttribute
    Map<String, String> attributes = new HashMap<>();

    public XMLResponse() {}

    public Map<String, String> getAttributes() {
        return attributes;
    }

    public void setAttributes(Map<String, String> attributes) {
        this.attributes = attributes;
    }
}


Ребята, подскажите пожалуйста как мне сконвертировать Map attributes = new HashMap<>(); в атрибуты XML, чтобы выглядело как-то так:
<response result="0" version="0.4"></response>

Почему hashmap? Атрибуты у меня могут разные и в разных количествах
  • Вопрос задан
  • 404 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
al_gon
@al_gon
@XmlRootElement(name = "response")
public class XMLResponse {

	private Map<QName, String> attributes;

	@XmlAnyAttribute
	public Map<QName, String> getAttributes() {
		if (attributes == null) {
			attributes = new HashMap<>();
		}
		return attributes;
	}

	public void setAttributes(final Map<QName, String> attributes) {
		this.attributes = attributes;
	}
}

Main:

public class DynamicAttributes {
	public static void main(final String[] args) {
		try {
			JAXBContext jc;
			jc = JAXBContext.newInstance(XMLResponse.class);
			final XMLResponse xmlResponse = new XMLResponse();
			xmlResponse.getAttributes().put(new QName("version"), "1.1");
			xmlResponse.getAttributes().put(new QName("version_old"), "1.0");
			final Marshaller marshaller = jc.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			marshaller.marshal(xmlResponse, System.out);
		} catch (final JAXBException e) {
			e.printStackTrace();
		}

	}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Создаешь класс MapAdapter, который содержит логику по маршаллизации твоей мапы.
Подробнее тут: stackoverflow.com/questions/3941479/jaxb-how-to-ma...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы