-
-
Notifications
You must be signed in to change notification settings - Fork 152
Open
Labels
Description
I'm copying this from https://bitbucket.org/snakeyaml/snakeyaml-engine/issues/67/scannerexception-on-block-scalar-n
The text “\n” does not serialize correctly.
Trivial reproduction example (Jackson 3):
StringWriter writer = new StringWriter();
YAMLFactory yamlFactory = YAMLFactory.builder()
.enable(YAMLWriteFeature.MINIMIZE_QUOTES)
.build();
try (JsonGenerator generator = yamlFactory.createGenerator(ObjectWriteContext.empty(), writer)) {
generator.writeString("\n");
}
System.out.println(writer.toString()); // prints "--- |2+"
try (JsonParser parser = yamlFactory.createParser(ObjectReadContext.empty(), writer.toString())) {
parser.nextToken(); // fails!
}Stack trace:
tools.jackson.dataformat.yaml.JacksonYAMLParseException: while scanning a block scalar
in reader, line 1, column 5:
--- |2+
^
the leading empty lines contain more spaces (2) than the first non-empty line.
in reader, line 3, column 1:
^
at [Source: (StringReader); line: 1, column: 4]
at tools.jackson.dataformat.yaml.YAMLParser.nextToken(YAMLParser.java:308)
...
Caused by: while scanning a block scalar
in reader, line 1, column 5:
--- |2+
^
the leading empty lines contain more spaces (2) than the first non-empty line.
in reader, line 3, column 1:
^
at org.snakeyaml.engine.v2.scanner.ScannerImpl.scanBlockScalar(ScannerImpl.java:1578)
at org.snakeyaml.engine.v2.scanner.ScannerImpl.fetchBlockScalar(ScannerImpl.java:960)
at org.snakeyaml.engine.v2.scanner.ScannerImpl.fetchLiteral(ScannerImpl.java:938)
at org.snakeyaml.engine.v2.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:396)
at org.snakeyaml.engine.v2.scanner.ScannerImpl.checkToken(ScannerImpl.java:193)
at org.snakeyaml.engine.v2.parser.ParserImpl$ParseDocumentContent.produce(ParserImpl.java:558)
at org.snakeyaml.engine.v2.parser.ParserImpl.lambda$produce$1(ParserImpl.java:232)
at java.base/java.util.Optional.ifPresent(Optional.java:178)
at org.snakeyaml.engine.v2.parser.ParserImpl.produce(ParserImpl.java:232)
at org.snakeyaml.engine.v2.parser.ParserImpl.peekEvent(ParserImpl.java:206)
at org.snakeyaml.engine.v2.parser.ParserImpl.next(ParserImpl.java:214)
at tools.jackson.dataformat.yaml.YAMLParser.nextEvent(YAMLParser.java:446)
at tools.jackson.dataformat.yaml.YAMLParser.nextToken(YAMLParser.java:306)
... 4 moreThis reproduces with Jackson 3.0.0-rc6. I tried snakeyaml-engine versions 2.10, 2.9, and 2.8 but they all fail on this case. This type of issue does NOT happen when using snakeyaml 2.4 and Jackson 2.19.
I am trying to migrate from snakeyaml to snakeyaml-engine but am blocked where a lot of my cases fail because of this issue. I am serializing various complex objects and arrays and fail any time there is a String with empty lines (one or more “\n”).