1919
2020package co .elastic .clients .transport .rest5_client .low_level .sniffer ;
2121
22- import com .fasterxml .jackson .core .JsonFactory ;
23- import com .fasterxml .jackson .core .JsonParser ;
24- import com .fasterxml .jackson .core .JsonToken ;
2522
23+ import jakarta .json .Json ;
24+ import jakarta .json .stream .JsonParser ;
25+ import jakarta .json .stream .JsonParserFactory ;
2626import org .apache .commons .logging .Log ;
2727import org .apache .commons .logging .LogFactory ;
2828import org .apache .hc .core5 .http .HttpEntity ;
@@ -63,7 +63,7 @@ public final class ElasticsearchNodesSniffer implements NodesSniffer {
6363 private final Rest5Client restClient ;
6464 private final Request request ;
6565 private final Scheme scheme ;
66- private final JsonFactory jsonFactory = new JsonFactory ( );
66+ private final JsonParserFactory jsonFactory = Json . createParserFactory ( Map . of () );
6767
6868 /**
6969 * Creates a new instance of the Elasticsearch sniffer. It will use the provided {@link Rest5Client} to fetch the hosts,
@@ -107,29 +107,28 @@ public List<Node> sniff() throws IOException {
107107 return readHosts (response .getEntity (), scheme , jsonFactory );
108108 }
109109
110- static List <Node > readHosts (HttpEntity entity , Scheme scheme , JsonFactory jsonFactory ) throws IOException {
110+ static List <Node > readHosts (HttpEntity entity , Scheme scheme , JsonParserFactory jsonFactory ) throws IOException {
111111 try (InputStream inputStream = entity .getContent ()) {
112112 JsonParser parser = jsonFactory .createParser (inputStream );
113- if (parser .nextToken () != JsonToken .START_OBJECT ) {
113+ if (parser .next () != JsonParser . Event .START_OBJECT ) {
114114 throw new IOException ("expected data to start with an object" );
115115 }
116116 List <Node > nodes = new ArrayList <>();
117- while (parser .nextToken () != JsonToken .END_OBJECT ) {
118- if (parser .getCurrentToken () == JsonToken .START_OBJECT ) {
119- if ("nodes" .equals (parser .getCurrentName ())) {
120- while (parser .nextToken () != JsonToken .END_OBJECT ) {
121- JsonToken token = parser .nextToken ();
122- assert token == JsonToken .START_OBJECT ;
123- String nodeId = parser .getCurrentName ();
117+ while (parser .next () != JsonParser .Event .END_OBJECT ) {
118+ if (parser .currentEvent () == JsonParser .Event .KEY_NAME && "nodes" .equals (parser .getString ())) {
119+ parser .next (); // from KEY_NAME to START_OBJECT nodes
120+ assert parser .currentEvent () == JsonParser .Event .START_OBJECT ;
121+ while (parser .next () != JsonParser .Event .END_OBJECT ) {
122+ String nodeId = parser .getString ();
124123 Node node = readNode (nodeId , parser , scheme );
125124 if (node != null ) {
126125 nodes .add (node );
127126 }
128127 }
129- } else {
130- parser .skipChildren ();
131128 }
132- }
129+ else if (parser .currentEvent () == JsonParser .Event .START_OBJECT ) {
130+ parser .skipObject ();
131+ }
133132 }
134133 return nodes ;
135134 }
@@ -157,14 +156,15 @@ private static Node readNode(String nodeId, JsonParser parser, Scheme scheme) th
157156 final Set <String > roles = new TreeSet <>();
158157
159158 String fieldName = null ;
160- while (parser .nextToken () != JsonToken .END_OBJECT ) {
161- if (parser .getCurrentToken () == JsonToken . FIELD_NAME ) {
162- fieldName = parser .getCurrentName ();
163- } else if (parser .getCurrentToken () == JsonToken .START_OBJECT ) {
159+ while (parser .next () != JsonParser . Event .END_OBJECT ) {
160+ if (parser .currentEvent () == JsonParser . Event . KEY_NAME ) {
161+ fieldName = parser .getString ();
162+ } else if (parser .currentEvent () == JsonParser . Event .START_OBJECT ) {
164163 if ("http" .equals (fieldName )) {
165- while (parser .nextToken () != JsonToken .END_OBJECT ) {
166- if (parser .getCurrentToken () == JsonToken .VALUE_STRING && "publish_address" .equals (parser .getCurrentName ())) {
167- String address = parser .getValueAsString ();
164+ while (parser .next () != JsonParser .Event .END_OBJECT ) {
165+ if (parser .currentEvent () == JsonParser .Event .KEY_NAME && "publish_address" .equals (parser .getString ())) {
166+ parser .next (); // from KEY_NAME to VALUE_STRING
167+ String address = parser .getString ();
168168 String host ;
169169 URI publishAddressAsURI ;
170170
@@ -178,45 +178,49 @@ private static Node readNode(String nodeId, JsonParser parser, Scheme scheme) th
178178 host = publishAddressAsURI .getHost ();
179179 }
180180 publishedHost = new HttpHost (publishAddressAsURI .getScheme (), host , publishAddressAsURI .getPort ());
181- } else if (parser .currentToken () == JsonToken .START_ARRAY && "bound_address" .equals (parser .getCurrentName ())) {
182- while (parser .nextToken () != JsonToken .END_ARRAY ) {
183- URI boundAddressAsURI = URI .create (scheme + "://" + parser .getValueAsString ());
181+ } else if (parser .currentEvent () == JsonParser .Event .KEY_NAME && "bound_address" .equals (parser .getString ())) {
182+ parser .next (); // from KEY_NAME to START_ARRAY
183+ assert parser .currentEvent () == JsonParser .Event .START_ARRAY ;
184+ while (parser .next () != JsonParser .Event .END_ARRAY ) {
185+ URI boundAddressAsURI = URI .create (scheme + "://" + parser .getString ());
184186 boundHosts .add (
185187 new HttpHost (boundAddressAsURI .getScheme (), boundAddressAsURI .getHost (), boundAddressAsURI .getPort ())
186188 );
187189 }
188- } else if (parser .getCurrentToken () == JsonToken .START_OBJECT ) {
189- parser .skipChildren ();
190+ } else if (parser .currentEvent () == JsonParser . Event .START_OBJECT ) {
191+ parser .skipObject ();
190192 }
191193 }
192194 } else if ("attributes" .equals (fieldName )) {
193- while (parser .nextToken () != JsonToken .END_OBJECT ) {
194- if (parser .getCurrentToken () == JsonToken .VALUE_STRING ) {
195- String oldValue = protoAttributes .put (parser .getCurrentName (), parser .getValueAsString ());
195+ while (parser .next () != JsonParser .Event .END_OBJECT ) {
196+ if (parser .currentEvent () == JsonParser .Event .KEY_NAME ) {
197+ String key = parser .getString ();
198+ parser .next (); // from KEY_NAME to VALUE_STRING
199+ String value = parser .getString ();
200+ String oldValue = protoAttributes .put (key , value );
196201 if (oldValue != null ) {
197- throw new IOException ("repeated attribute key [" + parser .getCurrentName () + "]" );
202+ throw new IOException ("repeated attribute key [" + parser .currentEvent (). name () + "]" );
198203 }
199- } else {
200- parser .skipChildren ();
201204 }
202205 }
203- } else {
204- parser .skipChildren ();
205206 }
206- } else if (parser .currentToken () == JsonToken .START_ARRAY ) {
207+ else if (fieldName != null ) { // it's an unknown object that needs to be skipped
208+ parser .skipObject ();
209+ }
210+ } else if (parser .currentEvent () == JsonParser .Event .START_ARRAY ) {
207211 if ("roles" .equals (fieldName )) {
208212 sawRoles = true ;
209- while (parser .nextToken () != JsonToken .END_ARRAY ) {
210- roles .add (parser .getText ());
213+ while (parser .next () != JsonParser . Event .END_ARRAY ) {
214+ roles .add (parser .getString ());
211215 }
212216 } else {
213- parser .skipChildren ();
217+ parser .skipArray ();
214218 }
215- } else if (parser .currentToken ().isScalarValue ( )) {
219+ } else if (parser .currentEvent ().name (). equals ( JsonParser . Event . VALUE_STRING . name () )) {
216220 if ("version" .equals (fieldName )) {
217- version = parser .getText ();
221+ version = parser .getString ();
218222 } else if ("name" .equals (fieldName )) {
219- name = parser .getText ();
223+ name = parser .getString ();
220224 }
221225 }
222226 }
0 commit comments