あなたの最善のアプローチは、XmlAdapter を使用することだと思います。これは、このチュートリアルの変更に基づいて行ったテストです。
定義クラス
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Definition {
    @XmlJavaTypeAdapter(MapAdapter.class)
    private Map<String,String> columns;
    @XmlJavaTypeAdapter(MapAdapter.class)
    private Map<String,String> rows;
    public Map<String,String> getColumns() {
        if (columns == null)
            columns = new HashMap<String,String>();
        return columns;
    }
    public Map<String,String> getRows() {
        if (rows == null)
            rows = new HashMap<String,String>();
        return rows;
    }
}
マップ アダプター
public class MapAdapter extends XmlAdapter<MapAdapter.AdaptedMap, Map<String, String>> {
    public static class AdaptedMap {
        public List<Entry> entry = new ArrayList<Entry>();
    }
    public static class Entry {
        @XmlAttribute
        public String name;
        @XmlValue
        public String value;
    }
    @Override
    public Map<String, String> unmarshal(AdaptedMap adaptedMap) throws Exception {
        Map<String, String> map = new HashMap<String, String>();
        for(Entry entry : adaptedMap.entry) {
            map.put(entry.name, entry.value);
        }
        return map;
    }
    @Override
    public AdaptedMap marshal(Map<String, String> map) throws Exception {
        AdaptedMap adaptedMap = new AdaptedMap();
        for(Map.Entry<String, String> mapEntry : map.entrySet()) {
            Entry entry = new Entry();
            entry.name = mapEntry.getKey();
            entry.value = mapEntry.getValue();
            adaptedMap.entry.add(entry);
        }
        return adaptedMap;
    }
}
基本的に、このアダプターは、をに変換しMapますList<Entry>。クラスの注釈に注意してEntryください。これは、必要な構造を作成するのに役立ちます。
テストの Main メソッド
public static void main(String[] args) throws JAXBException {
    JAXBContext context = JAXBContext.newInstance(Definition.class);
    Definition d = new Definition();
    d.getColumns().put("Test1","1");
    d.getRows().put("Test2", "2");
    Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    m.marshal(d, System.out);
}
結果
<definition>
    <columns>
        <entry name="Test1">1</entry>
    </columns>
    <rows>
        <entry name="Test2">2</entry>
    </rows>
</definition>
唯一の問題は、要素が行または列ではなく、エントリと呼ばれることです! それを変更するには、2 つのアダプターを作成する必要があると思います。
これがお役に立てば幸いです。