@@ -81,6 +81,7 @@ public final class Marc21Encoder extends
81
81
private State state = State .IN_STREAM ;
82
82
83
83
private boolean generateIdField ;
84
+ private boolean validateLeader = true ;
84
85
85
86
/**
86
87
* Initializes the encoder with MARC 21 constants and charset.
@@ -108,6 +109,18 @@ public void setGenerateIdField(final boolean generateIdField) {
108
109
this .generateIdField = generateIdField ;
109
110
}
110
111
112
+ /**
113
+ * Controls whether the leader should be validated.
114
+ * <p>
115
+ * The default value of {@code validateLeader} is true.
116
+ * <p>
117
+ *
118
+ * @param validateLeader if false the leader is not validated
119
+ */
120
+ public void setValidateLeader (final boolean validateLeader ) {
121
+ this .validateLeader = validateLeader ;
122
+ }
123
+
111
124
/**
112
125
* Gets the flag to decide whether the ID field is generated.
113
126
*
@@ -259,12 +272,14 @@ private void processLeaderAsSubfields(final String name, final char code) {
259
272
}
260
273
261
274
private void requireValidCode (final char code , final char [] validCodes ) {
262
- for (final char validCode : validCodes ) {
263
- if (validCode == code ) {
264
- return ;
275
+ if (validateLeader ) {
276
+ for (final char validCode : validCodes ) {
277
+ if (validCode == code ) {
278
+ return ;
279
+ }
265
280
}
281
+ throw new FormatException ("invalid code '" + code + "'; allowed codes are: " + Arrays .toString (validCodes ));
266
282
}
267
- throw new FormatException ("invalid code '" + code + "'; allowed codes are: " + Arrays .toString (validCodes ));
268
283
}
269
284
270
285
private void processTopLevelLiteral (final String name , final String value ) {
0 commit comments