2727import co .elastic .clients .elasticsearch ._types .query_dsl .SpanGapQuery ;
2828import co .elastic .clients .elasticsearch .core .SearchRequest ;
2929import co .elastic .clients .elasticsearch .indices .IndexSettings ;
30+ import co .elastic .clients .json .JsonpDeserializer ;
31+ import jakarta .json .stream .JsonParser ;
3032import org .junit .Test ;
3133
34+ import java .io .StringReader ;
3235import java .util .List ;
3336
3437public class BuiltinTypesTest extends ModelTestCase {
@@ -50,6 +53,38 @@ public void testLenientArray() {
5053 assertGetterType (List .class , SearchRequest .class , "index" );
5154 }
5255
56+ @ Test
57+ public void testNullArrayItem () {
58+ // See https://github.com/elastic/elasticsearch-java/issues/66
59+
60+ String json = "[\" a\" , null, \" c\" ]" ;
61+
62+ // Types that don't accept null events should end up as null values in the list
63+ {
64+ JsonpDeserializer <String > stringDeser = JsonpDeserializer .stringDeserializer ();
65+ assertFalse (stringDeser .accepts (JsonParser .Event .VALUE_NULL ));
66+
67+ JsonParser parser = mapper .jsonProvider ().createParser (new StringReader (json ));
68+
69+ List <String > stringList = JsonpDeserializer .arrayDeserializer (stringDeser ).deserialize (parser , mapper );
70+ assertEquals ("a" , stringList .get (0 ));
71+ assertNull (stringList .get (1 ));
72+ assertEquals ("c" , stringList .get (2 ));
73+ }
74+
75+ // Types that do accept null events should end up as their null representation
76+ {
77+ assertTrue (FieldValue ._DESERIALIZER .accepts (JsonParser .Event .VALUE_NULL ));
78+
79+ JsonParser parser = mapper .jsonProvider ().createParser (new StringReader (json ));
80+ List <FieldValue > valueList = JsonpDeserializer .arrayDeserializer (FieldValue ._DESERIALIZER ).deserialize (parser , mapper );
81+
82+ assertEquals ("a" , valueList .get (0 )._get ());
83+ assertTrue (valueList .get (1 ).isNull ());
84+ assertEquals ("c" , valueList .get (2 )._get ());
85+ }
86+ }
87+
5388 @ Test
5489 public void testSpanGapQuery () {
5590 // Hand-written class
0 commit comments