You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2021/06/08 06:39:08 UTC

[groovy] branch master updated: GROOVY-10126: Support parsing multiple YAML documents

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new b3fd3e8  GROOVY-10126: Support parsing multiple YAML documents
b3fd3e8 is described below

commit b3fd3e830bc348dc55190bc14351259e35db43d2
Author: Daniel Sun <su...@apache.org>
AuthorDate: Tue Jun 8 14:38:06 2021 +0800

    GROOVY-10126: Support parsing multiple YAML documents
---
 .../java/org/apache/groovy/yaml/util/YamlConverter.java |  9 +++++++--
 .../src/spec/test/groovy/yaml/YamlParserTest.groovy     | 17 +++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/subprojects/groovy-yaml/src/main/java/org/apache/groovy/yaml/util/YamlConverter.java b/subprojects/groovy-yaml/src/main/java/org/apache/groovy/yaml/util/YamlConverter.java
index ba59bab..988f63c 100644
--- a/subprojects/groovy-yaml/src/main/java/org/apache/groovy/yaml/util/YamlConverter.java
+++ b/subprojects/groovy-yaml/src/main/java/org/apache/groovy/yaml/util/YamlConverter.java
@@ -26,6 +26,7 @@ import groovy.yaml.YamlRuntimeException;
 
 import java.io.IOException;
 import java.io.Reader;
+import java.util.List;
 
 /**
  *  A converter for converting YAML to JSON, vice versa
@@ -39,8 +40,12 @@ public class YamlConverter {
      */
     public static String convertYamlToJson(Reader yamlReader) {
         try (Reader reader = yamlReader) {
-            Object yaml = new ObjectMapper(new YAMLFactory()).readValue(reader, Object.class);
-
+            final YAMLFactory yamlFactory = new YAMLFactory();
+            List<Object> resultList =
+                    new ObjectMapper()
+                            .readValues(yamlFactory.createParser(reader), Object.class)
+                            .readAll();
+            Object yaml = 1 == resultList.size() ? resultList.get(0) : resultList;
             return new ObjectMapper().writeValueAsString(yaml);
         } catch (IOException e) {
             throw new YamlRuntimeException(e);
diff --git a/subprojects/groovy-yaml/src/spec/test/groovy/yaml/YamlParserTest.groovy b/subprojects/groovy-yaml/src/spec/test/groovy/yaml/YamlParserTest.groovy
index 43cdf73..b410bf1 100644
--- a/subprojects/groovy-yaml/src/spec/test/groovy/yaml/YamlParserTest.groovy
+++ b/subprojects/groovy-yaml/src/spec/test/groovy/yaml/YamlParserTest.groovy
@@ -105,4 +105,21 @@ matrix:
         assert ['openjdk10', 'oraclejdk9', 'oraclejdk8'] ==  yaml.matrix.include.jdk
 
     }
+
+    void testParseMultiDocs() {
+        def ys = new YamlSlurper()
+        def yaml = ys.parseText '''\
+---
+language: groovy
+version: 4
+---
+language: java
+version: 8
+        '''
+
+        assert 'groovy' == yaml[0].language
+        assert 4 == yaml[0].version
+        assert 'java' == yaml[1].language
+        assert 8 == yaml[1].version
+    }
 }