diff --git a/metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/MarcXmlEncoder.java b/metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/MarcXmlEncoder.java
index 9fb12b01..19bc9888 100644
--- a/metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/MarcXmlEncoder.java
+++ b/metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/MarcXmlEncoder.java
@@ -95,6 +95,11 @@ public String close(final Object[] args) {
private static final int LEADER_ENTITY_LENGTH = 5;
+ private static final int LEADER_CONCAT_ENTITIES_LENGTH = 8;
+ private static final int LEADER_CONCAT_ENTITIES_POS_04 = 4;
+ private static final int LEADER_CONCAT_ENTITIES_POS_05 = 5;
+ private static final int LEADER_CONCAT_ENTITIES_POS_07 = 7;
+
private static final int IND1_BEGIN = 3;
private static final int IND1_END = 4;
private static final int IND2_BEGIN = 4;
@@ -445,7 +450,12 @@ private void writeLeader() {
}
writeTagLeader(Tag.leader::open);
- writeRawLeader("0000" + leader.substring(0, 4) + "2200000" + leader.substring(5, 7) + "4500"); // creates a valid leader without counted elements
+ if (leader.length() == LEADER_CONCAT_ENTITIES_LENGTH) {
+ writeRawLeader("0000" + leader.substring(0, LEADER_CONCAT_ENTITIES_POS_04) + "2200000" + leader.substring(LEADER_CONCAT_ENTITIES_POS_05, LEADER_CONCAT_ENTITIES_POS_07) + "4500"); // creates a valid leader without counted elements
+ }
+ else {
+ writeRawLeader(leader);
+ }
writeTagLeader(Tag.leader::close);
if (formatted) {
diff --git a/metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/MarcXmlEncoderTest.java b/metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/MarcXmlEncoderTest.java
index 2e1c8df2..5d62ff24 100644
--- a/metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/MarcXmlEncoderTest.java
+++ b/metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/MarcXmlEncoderTest.java
@@ -301,13 +301,13 @@ public void issue548_failWhenLeaderIsNotFirst() {
}
@Test
- public void issue527_shouldEmitLeaderAlwaysAsWholeString() {
+ public void issue527_shouldEmitLeaderAlwaysAsWholeStringWithAddedDefaultLeaderValuesIfLeaderLengthIs8() {
createRecordWithLeader("1", "a", "o", "a", " ", "a", "z", "u", " ");
createRecordWithLeader("2", "d", "u", "m", " ", "m", "y", "#", " ");
encoder.closeStream();
String expected = XML_DECLARATION + XML_ROOT_OPEN
- + "aoa azu "
- + "dum my# " + XML_MARC_COLLECTION_END_TAG;
+ + "0000aoa 2200000zu4500"
+ + "0000dum 2200000y#4500" + XML_MARC_COLLECTION_END_TAG;
String actual = resultCollector.toString();
assertEquals(expected, actual);
}
@@ -315,7 +315,7 @@ public void issue527_shouldEmitLeaderAlwaysAsWholeString() {
@Test(expected = MissingIdException.class)
public void issue527_shouldEmitLeaderAlwaysAsWholeString_ensureCorrectMarc21Xml() {
encoder.setEnsureCorrectMarc21Xml(true);
- issue527_shouldEmitLeaderAlwaysAsWholeString();
+ issue527_shouldEmitLeaderAlwaysAsWholeStringWithAddedDefaultLeaderValuesIfLeaderLengthIs8();
}
@Test