diff --git a/metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/Marc21Encoder.java b/metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/Marc21Encoder.java index 338795696..9a9a72e78 100644 --- a/metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/Marc21Encoder.java +++ b/metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/Marc21Encoder.java @@ -156,7 +156,7 @@ private void startField(final String name) { @Override public void endEntity() { - builder.endDataField(); + if (state.equals(State.IN_FIELD_ENTITY)) builder.endDataField(); state = State.IN_RECORD; } diff --git a/metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/Marc21DecoderTest.java b/metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/Marc21DecoderTest.java index c65be8626..95785b126 100644 --- a/metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/Marc21DecoderTest.java +++ b/metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/Marc21DecoderTest.java @@ -118,4 +118,36 @@ public void shouldThrowFormatExceptionIfRecordIsTooShort() { marc21Decoder.process("00005"); } + @Test + public void shouldBeCompatibleWithEncoder() { + Marc21Encoder marc21Encoder = new Marc21Encoder(); + marc21Encoder.setReceiver(marc21Decoder); + + marc21Encoder.startRecord("identifier"); + + marc21Encoder.startEntity("leader"); + marc21Encoder.literal("characterCodingScheme", "a"); + marc21Encoder.endEntity(); + + marc21Encoder.literal("001", "identifier"); + + marc21Encoder.startEntity("021a "); + marc21Encoder.literal("v", "Fritz"); + marc21Encoder.literal("n", "Bauer"); + marc21Encoder.endEntity(); + marc21Encoder.endRecord(); + + final InOrder ordered = inOrder(receiver); + ordered.verify(receiver).startRecord("identifier"); + + ordered.verify(receiver).startEntity("leader"); + ordered.verify(receiver).literal("characterCodingScheme", "a"); + ordered.verify(receiver).endEntity(); + + ordered.verify(receiver).startEntity("021a "); + ordered.verify(receiver).literal("v", "Fritz"); + ordered.verify(receiver).literal("n", "Bauer"); + ordered.verify(receiver).endEntity(); + ordered.verify(receiver).endRecord(); + } }