Можно ли использовать структуру узлов Джексона для написания XML? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь настроить код для создания дерева узлов, используя Джексона, который затем можно использовать для написания JSON или XML. Я могу заставить JSON работать, но я надеялся, что он выведет XML и таким образом.

Мой пример дерева будет выглядеть так:

XmlMapper NodeMap = new XmlMapper();

ObjectNode rootNode = NodeMap.createObjectNode();
ObjectNode currentNode = rootNode.putObject("Examples");
currentNode
        .put("Puppy", TRUE)
        .put("Apple", 2)
        .put("Jet", "Li");
currentNode = rootNode.putObject("Single");
currentNode.put("One", 1);

Используя это дерево, я могу использовать

String xml = rootNode.toString();

чтобы получить

{"Examples":{"Puppy":true,"Apple":2,"Jet":"Li"},"Single":{"One":1}}

, который показывает, что дерево было построено правильно, но я надеялся, что оно выведет XML, потому что я присоединяю дерево к XmlMapper. К сожалению, одного этого недостаточно.

Я знаю, что могу взять другой объект и сделать что-то вроде

XmlMapper XMap = new XmlMapper();
XMap.writeValue(new File(writePath), objectToBeConverted);

чтобы получить XML, но я хочу использовать дерево узлов выше, а .writevalue, похоже, не работает с узлами.

Как бы я взял вышеприведенное дерево и вывод (в строку или файл) в виде XML? Это возможно или мне не повезло с этим методом?

РЕДАКТИРОВАТЬ: я использую Джексон версии 2.9.2
РЕДАКТИРОВАТЬ 2: Оказывается, у меня было несколько версий перекрытия Джексона, как упоминает Андрей в комментариях под его ответом.

1 Ответ

2 голосов
/ 30 мая 2019

вы должны использовать writeValueAsString, например:

    XmlMapper mapper = new XmlMapper();

    com.fasterxml.jackson.databind.node.ObjectNode rootNode = mapper.createObjectNode();
    ObjectNode currentNode = rootNode.putObject("Examples");
    currentNode
            .put("Puppy", true)
            .put("Apple", 2)
            .put("Jet", "Li");
    currentNode = rootNode.putObject("Single");
    currentNode.put("One", 1);

    String xml = mapper.writeValueAsString(rootNode);

Кроме того, я думаю, что вы используете несовместимую версию зависимостей.Я смог воспроизвести вашу ошибку с помощью jackson-dataformat-xml: 2.9.2 и старого jackson-core: 2.6.7.Убедитесь, что вы используете совместимые версии для зависимостей jackson-dataformat-xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...