Yaml слияния игнорируя свойства, определенные в привязке - PullRequest
3 голосов
/ 03 апреля 2019

Считайте, что это yaml

- node_1:
    properties: &node_1_prop
      role: management
      layer: 1

- node_2:
    properties:
      level:  24
      <<: *node_1_prop

Я пытаюсь создать граф узлов, используя библиотеку snakeyaml, и ожидаю два свойства для node_1 и три для node_2, например this .

Path yamlPath = Paths.get( "nodes.yaml");
InputStream yamlStream = Files.newInputStream(yamlPath);
StreamReader sreader = new StreamReader(new UnicodeReader(yamlStream));
Composer composer = new Composer(new ParserImpl(sreader), new Resolver());
Node rootNode = composer.getSingleNode();

Граф вывода snakeyaml показывает << как свойство для node_2.

Пример кода, показывающий результат на Git .

Edit:

Узлы сконструированы нормально, если я определю yaml, как показано ниже:

- node_1:
    properties: &node_1_prop
      role: management
      layer: 1

- node_2:
      <<: *node_1_prop

Однако мое требование - не просто копировать свойства как есть, а иметь дополнительные свойства.

1 Ответ

3 голосов
/ 03 апреля 2019

Вы не загружаете свой YAML полностью, вы только составляете его (см. График в спецификации YAML 1.1 , который реализует SnakeYaml).

Шаг компоновки разрешаетсяпсевдонимы, но сохраняют теги - теги разрешаются во время построения.Ключ слияния определен как тег и, следовательно, не обрабатывается при составлении ввода YAML.

...