diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java index 606f0a34aa..60c8c31148 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java @@ -120,13 +120,18 @@ final class Jackson2Tokenizer { private List parseTokenBufferFlux() throws IOException { List result = new ArrayList<>(); - while (true) { + // SPR-16151: Smile data format uses null to separate documents + boolean previousNull = false; + while (!this.parser.isClosed()) { JsonToken token = this.parser.nextToken(); - // SPR-16151: Smile data format uses null to separate documents if (token == JsonToken.NOT_AVAILABLE || - (token == null && (token = this.parser.nextToken()) == null)) { + token == null && previousNull) { break; } + else if (token == null ) { // !previousNull + previousNull = true; + continue; + } updateDepth(token); if (!this.tokenizeArrayElements) { processTokenNormal(token, result); @@ -167,6 +172,9 @@ final class Jackson2Tokenizer { private void processTokenArray(JsonToken token, List result) throws IOException { if (!isTopLevelArrayToken(token)) { + if (!this.parser.hasCurrentToken()) { + System.out.println("NO CURRENT TOKEN: " + token); + } this.tokenBuffer.copyCurrentEvent(this.parser); }