diff --git a/src/main/java/com/qoomon/banking/swift/message/block/SwiftBlockReader.java b/src/main/java/com/qoomon/banking/swift/message/block/SwiftBlockReader.java index e6fa8e2..81fd297 100644 --- a/src/main/java/com/qoomon/banking/swift/message/block/SwiftBlockReader.java +++ b/src/main/java/com/qoomon/banking/swift/message/block/SwiftBlockReader.java @@ -8,6 +8,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import static java.lang.Character.isWhitespace; + /** * Created by qoomon on 07/07/16. */ @@ -53,7 +55,10 @@ public GeneralBlock readBlock() throws BlockParseException { lineCharIndex++; if (blockBuilder.length() == 0 && messageCharacter != '{') { - if (messageCharacter == '}') { + if (isWhitespace(messageCharacter)) { + // ignore whitespaces between blocks + continue; + } else if (messageCharacter == '}') { throw new BlockParseException("Found closing bracket without preceding opening bracket", lineNumber); } else { throw new BlockParseException("No characters are allowed outside of blocks, but was: '" + messageCharacter + "'", lineNumber); diff --git a/src/test/java/com/qoomon/banking/swift/message/block/SwiftBlockReaderTest.java b/src/test/java/com/qoomon/banking/swift/message/block/SwiftBlockReaderTest.java index 0c6ec31..3279533 100644 --- a/src/test/java/com/qoomon/banking/swift/message/block/SwiftBlockReaderTest.java +++ b/src/test/java/com/qoomon/banking/swift/message/block/SwiftBlockReaderTest.java @@ -35,7 +35,6 @@ public void readBlock_SHOULD_read_valid_blocks() throws Exception { assertThat(blockList.get(1).getContent()).isEqualTo("b"); assertThat(blockList.get(2).getId()).isEqualTo("3"); assertThat(blockList.get(2).getContent()).isEqualTo("c"); - } @Test @@ -101,4 +100,26 @@ public void readBlock_SHOULD_handle_LF_line_endings() throws Exception { assertThat(blockList.get(3).getContent()).isEqualTo("\n-"); } + @Test + public void readBlock_SHOULD_ignore_whitespaces_between_blocks() throws Exception { + // Given + + String blockText = "{1:a} \t{2:b} \n\r{3:c}"; + + SwiftBlockReader subjectUnderTest = new SwiftBlockReader(new StringReader(blockText)); + + // When + List blockList = TestUtils.collectUntilNull(subjectUnderTest::readBlock); + + // Then + + assertThat(blockList).hasSize(3); + assertThat(blockList.get(0).getId()).isEqualTo("1"); + assertThat(blockList.get(0).getContent()).isEqualTo("a"); + assertThat(blockList.get(1).getId()).isEqualTo("2"); + assertThat(blockList.get(1).getContent()).isEqualTo("b"); + assertThat(blockList.get(2).getId()).isEqualTo("3"); + assertThat(blockList.get(2).getContent()).isEqualTo("c"); + } + } \ No newline at end of file