Ensure PutMappingRequest.buildFromSimplifiedDef fails when input isn't pairs
The method requires pairs of fieldnames and property arguments and will fail if the varargs input is an uneven number. We should check this and fail with an appropriate IllegalArgumentException instead.
This commit is contained in:
parent
899cddefb6
commit
e57f76aa2d
|
@ -177,7 +177,17 @@ public class PutMappingRequest extends AcknowledgedRequest<PutMappingRequest> im
|
|||
return source(buildFromSimplifiedDef(type, source));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type the mapping type
|
||||
* @param source consisting of field/properties pairs (e.g. "field1",
|
||||
* "type=string,store=true"). If the number of arguments is not
|
||||
* divisible by two an {@link IllegalArgumentException} is thrown
|
||||
* @return the mappings definition
|
||||
*/
|
||||
public static XContentBuilder buildFromSimplifiedDef(String type, Object... source) {
|
||||
if (source.length % 2 != 0) {
|
||||
throw new IllegalArgumentException("mapping source must be pairs of fieldnames and properties definition.");
|
||||
}
|
||||
try {
|
||||
XContentBuilder builder = XContentFactory.jsonBuilder();
|
||||
builder.startObject();
|
||||
|
|
|
@ -57,4 +57,11 @@ public class PutMappingRequestTests extends ESTestCase {
|
|||
"Validation Failed: 1: either concrete index or unresolved indices can be set," +
|
||||
" concrete index: [[foo/bar]] and indices: [myindex];");
|
||||
}
|
||||
|
||||
public void testBuildFromSimplifiedDef() {
|
||||
// test that method rejects input where input varargs fieldname/properites are not paired correctly
|
||||
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
|
||||
() -> PutMappingRequest.buildFromSimplifiedDef("type", "only_field"));
|
||||
assertEquals("mapping source must be pairs of fieldnames and properties definition.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue