Skip to content

Commit 32beffb

Browse files
committed
Fix top-level MARC record leader not being reset between records. (#524, #538)
1 parent 83a02b9 commit 32beffb

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/MarcXmlEncoder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ private void prettyPrintNewLine() {
463463
private void sendAndClearData() {
464464
getReceiver().process(builder.toString());
465465
builder.delete(0, builder.length());
466+
leaderBuilder.delete(0, leaderBuilder.length());
466467
recordAttributeOffset = 0;
467468
}
468469

metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/MarcXmlEncoderTest.java

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,21 @@ public void emitExceptionWhenEntityLengthNot5() {
184184
encoder.startEntity("123456");
185185
}
186186

187+
private void createRecordWithLeader(final String id, final String... leader) {
188+
encoder.startRecord(id);
189+
encoder.startEntity(Marc21EventNames.LEADER_ENTITY);
190+
encoder.literal(Marc21EventNames.RECORD_STATUS_LITERAL, leader[0]);
191+
encoder.literal(Marc21EventNames.RECORD_TYPE_LITERAL, leader[1]);
192+
encoder.literal(Marc21EventNames.BIBLIOGRAPHIC_LEVEL_LITERAL, leader[2]);
193+
encoder.literal(Marc21EventNames.TYPE_OF_CONTROL_LITERAL, leader[3]);
194+
encoder.literal(Marc21EventNames.CHARACTER_CODING_LITERAL, leader[4]);
195+
encoder.literal(Marc21EventNames.ENCODING_LEVEL_LITERAL, leader[5]);
196+
encoder.literal(Marc21EventNames.CATALOGING_FORM_LITERAL, leader[6]);
197+
encoder.literal(Marc21EventNames.MULTIPART_LEVEL_LITERAL, leader[7]);
198+
encoder.endEntity();
199+
encoder.endRecord();
200+
}
201+
187202
@Test
188203
public void createRecordWithLeader() {
189204
encoder.startRecord("1");
@@ -242,33 +257,20 @@ private void issue336_createRecordWithTopLevelLeader(final MarcXmlEncoder encode
242257

243258
@Test
244259
public void issue527_shouldEmitLeaderAlwaysAsWholeString() {
245-
issue527_shouldEmitLeaderAlwaysAsWholeString(encoder);
260+
createRecordWithLeader("1", "a", "o", "a", " ", "a", "z", "u", " ");
261+
createRecordWithLeader("2", "d", "u", "m", " ", "m", "y", "#", " ");
262+
encoder.closeStream();
263+
String expected = XML_DECLARATION + XML_ROOT_OPEN
264+
+ "<marc:record><marc:leader>aoa azu </marc:leader></marc:record>"
265+
+ "<marc:record><marc:leader>dum my# </marc:leader></marc:record>" + XML_MARC_COLLECTION_END_TAG;
266+
String actual = resultCollector.toString();
267+
assertEquals(expected, actual);
246268
}
247269

248270
@Test(expected = MissingIdException.class)
249271
public void issue527_shouldEmitLeaderAlwaysAsWholeString_ensureCorrectMarc21Xml() {
250272
encoder.setEnsureCorrectMarc21Xml(true);
251-
issue527_shouldEmitLeaderAlwaysAsWholeString(encoder);
252-
}
253-
254-
private void issue527_shouldEmitLeaderAlwaysAsWholeString(final MarcXmlEncoder encoder) {
255-
encoder.startRecord("1");
256-
encoder.startEntity(Marc21EventNames.LEADER_ENTITY);
257-
encoder.literal(Marc21EventNames.RECORD_STATUS_LITERAL, "a");
258-
encoder.literal(Marc21EventNames.RECORD_TYPE_LITERAL, "o");
259-
encoder.literal(Marc21EventNames.BIBLIOGRAPHIC_LEVEL_LITERAL, "a");
260-
encoder.literal(Marc21EventNames.TYPE_OF_CONTROL_LITERAL, " ");
261-
encoder.literal(Marc21EventNames.CHARACTER_CODING_LITERAL, "a");
262-
encoder.literal(Marc21EventNames.ENCODING_LEVEL_LITERAL, "z");
263-
encoder.literal(Marc21EventNames.CATALOGING_FORM_LITERAL, "u");
264-
encoder.literal(Marc21EventNames.MULTIPART_LEVEL_LITERAL, " ");
265-
encoder.endEntity();
266-
encoder.endRecord();
267-
encoder.closeStream();
268-
String expected = XML_DECLARATION + XML_ROOT_OPEN
269-
+ "<marc:record><marc:leader>aoa azu </marc:leader></marc:record>" + XML_MARC_COLLECTION_END_TAG;
270-
String actual = resultCollector.toString();
271-
assertEquals(expected, actual);
273+
issue527_shouldEmitLeaderAlwaysAsWholeString();
272274
}
273275

274276
@Test

0 commit comments

Comments
 (0)