Есть ли способ получить GraphML-представление TinkerGraph в памяти без записи в файл? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть TinkerGraph в памяти. Я хочу написать REST-контроллер Spring Boot, чтобы представить сериализованное (как GraphML) представление этого Tinkergraph. Для API-интерфейсов сериализации (g.io) необходимо указать путь к файлу String. В настоящее время мне нужно записать в файл / tmp и затем прочитать файл, чтобы получить строковое представление сериализованного GraphML.

Есть ли способ напрямую получить вывод String сериализованного GraphML? Без необходимости записывать в файл tmp и читать его обратно?

g.io("graph.xml").write().iterate()

1 Ответ

1 голос
/ 11 июня 2019

Начиная с текущей последней версии 3.4.2, я боюсь, что нет никакого способа сделать это с языком Gremlin. Причина, по которой он пишет только в файл, а не в что-то вроде Java OutputStream, заключается в том, что шаг io() предназначен для независимого от языка программирования. Python и другие языки вне JVM не имеют возможности создать или указать такой объект, поэтому запись в файл делает его работающим по всем направлениям. Я не знаю, изменится ли это в будущем, если мы не придумали разумный API, который бы интуитивно работал на всех языках программирования.

Поскольку вы используете TinkerGraph в памяти, вы можете обойти Гремлин и вернуться к очень старому способу действий:

Graph graph = TinkerFactory.createModern();
try (OutputStream os = new FileOutputStream("tinkerpop-modern.xml")) {
    graph.io(IoCore.graphml()).writer().normalize(true).create().writeGraph(os, graph);
}

Вы бы просто заменили FileOutputStream на тот тип OutputStream, который вы хотели использовать. Этот подход использует старый API-интерфейс Graph, который, я думаю, просто устарел в новых версиях, поэтому эта опция все еще должна быть доступна для вас. Обратите внимание, что если вы не используете JVM, единственный способ вернуть строку - это отправить скрипт Gremlin на Gremlin Server.

...