Skip to content

Commit 032d30a

Browse files
authored
Merge pull request #435 from weaviate/v6-fix-NPE-no-properties
fix(v6): add defensive checks to JSON deserialization
2 parents 9260049 + a93b9d7 commit 032d30a

2 files changed

Lines changed: 21 additions & 8 deletions

File tree

src/main/java/io/weaviate/client6/v1/api/collections/CollectionConfig.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -264,16 +264,19 @@ public void write(JsonWriter out, CollectionConfig value) throws IOException {
264264
public CollectionConfig read(JsonReader in) throws IOException {
265265
var jsonObject = JsonParser.parseReader(in).getAsJsonObject();
266266

267-
var mixedProperties = jsonObject.get("properties").getAsJsonArray();
268267
var references = new JsonArray();
269268
var properties = new JsonArray();
270269

271-
for (var property : mixedProperties) {
272-
var dataTypes = property.getAsJsonObject().get("dataType").getAsJsonArray();
273-
if (dataTypes.size() == 1 && DataType.KNOWN_TYPES.contains(dataTypes.get(0).getAsString())) {
274-
properties.add(property);
275-
} else {
276-
references.add(property);
270+
if (jsonObject.has("properties") && jsonObject.get("properties").isJsonArray()) {
271+
var mixedProperties = jsonObject.get("properties").getAsJsonArray();
272+
273+
for (var property : mixedProperties) {
274+
var dataTypes = property.getAsJsonObject().get("dataType").getAsJsonArray();
275+
if (dataTypes.size() == 1 && DataType.KNOWN_TYPES.contains(dataTypes.get(0).getAsString())) {
276+
properties.add(property);
277+
} else {
278+
references.add(property);
279+
}
277280
}
278281
}
279282

@@ -286,7 +289,7 @@ public CollectionConfig read(JsonReader in) throws IOException {
286289

287290
// Separate modules into reranker- and generative- modules.
288291
var rerankerModules = new JsonArray();
289-
if (jsonObject.has("moduleConfig")) {
292+
if (jsonObject.has("moduleConfig") && jsonObject.get("moduleConfig").isJsonObject()) {
290293
var moduleConfig = jsonObject.remove("moduleConfig").getAsJsonObject();
291294

292295
moduleConfig.entrySet().stream()

src/test/java/io/weaviate/client6/v1/internal/json/JSONTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,4 +413,14 @@ public void test_ReferenceAddManyResponse_CustomDeserializer() {
413413
.as("response contains 1 error")
414414
.hasSize(1);
415415
}
416+
417+
@Test
418+
public void test_CollectionConfig_read_empty() {
419+
var json = """
420+
{ "class": "BarebonesCollection" }
421+
""";
422+
Assertions.assertThatCode(() -> JSON.deserialize(json, CollectionConfig.class))
423+
.as("deserialize CollectionConfig with no properties")
424+
.doesNotThrowAnyException();
425+
}
416426
}

0 commit comments

Comments
 (0)