Мне нужно пройтись по дереву JDOM и вносить изменения по мере продвижения вперед; на этом этапе изменения в основном добавляют новые элементы прямо сейчас, но могут также включать изменение порядка элементов или удаление элементов. Вся работа выполняется в одном потоке, поэтому нет проблем с параллелизмом.
Это оказывается трудным, потому что итераторы JDOM могут выдать исключение ConcurrentModificationException, если вы попытаетесь добавить узел во время обхода. Из того, что я вижу, JDOM использует списки вместо прямой связи узлов DOM, и это затрудняет внесение изменений на лету.
Я видел пару рекомендаций о том, как с этим справиться, например, отложить добавления до завершения обхода или построить новое дерево на лету, чтобы пройденное дерево осталось без изменений. Они не будут работать для меня, потому что мне нужно единообразное представление дерева при его изменении.
Я начинаю подозревать, что JDOM просто не будет работать здесь. Облегчает ли это какая-либо другая модель Java DOM? Или есть способ сделать это в JDOM?