Ваша проблема в том, что стратегия сериализации по умолчанию (используйте JAXB) означает, что вы не можете сериализовать эту карту напрямую.Есть два основных способа справиться с этим.
Написать XmlAdaptor
Есть несколько вопросов по этому вопросу на SO, но самое хорошее объяснение, которое я видел до сих пор, это в списке рассылки пользователей CXF несколько лет назад.Один хитрый момент (так как вам не нужен дополнительный элемент-обертка) заключается в том, что, получив у вас адаптер типа, вы должны установить его с помощью аннотации на уровне пакета (направильный пакет, который может потребовать некоторых усилий, чтобы выяснить).Это относительно экзотично.
Пишем пользовательский MessageBodyWriter
Вполне возможно, будет проще написать собственный код для выполнения сериализации.Чтобы сделать это, вы реализуете javax.ws.rs.ext.MessageBodyWriter
и помечаете его @Provider
(при условии, что вы используете механизм, который использует это для управления регистрацией; не все делают по сложным причинам, которые не имеют большого значенияВот).Это позволит вам создать ровно документ, который вы хотите, из любого произвольного типа за счет большей сложности при написании (но, по крайней мере, у вас не будет сложных проблем JAXB).Существует множество способов создания XML, из которых можно выбирать в зависимости от сериализуемых данных
Обратите внимание, что если бы вы выполняли потоковую передачу данных, а не собирали все данные в памяти, вы бы есть для реализации этого интерфейса.