-
Notifications
You must be signed in to change notification settings - Fork 57
Closed
Description
Affected versions: <=3.2.5
Problem: DefaultArangoConverter#writeMap throws NullPointerException, when one of the entries contains null value.
Given document with the following shape, processing will go like this:
{
"simpleAttribute": null, // will be skipped by `DefaultArangoConverter#writeEntity`
"nestedMap": { // will be processed with `DefaultArangoConverter#writeInternal` and `DefaultArangoConverter#writeMap`
"key": null // processing will be attempted with `DefaultArangoConverter#writeInternal`, which can't handle `null`s
}
}
Similar problem (unguarded call to DefaultArangoConverter#writeInternal) exists in DefaultArangoConverter#writeCollection and DefaultArangoConverter#writeArray.
Stack trace:
java.lang.NullPointerException: null
at com.arangodb.springframework.core.convert.DefaultArangoConverter.writeInternal(DefaultArangoConverter.java:574) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.convert.DefaultArangoConverter.writeMap(DefaultArangoConverter.java:707) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.convert.DefaultArangoConverter.writeInternal(DefaultArangoConverter.java:592) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.convert.DefaultArangoConverter.writeProperty(DefaultArangoConverter.java:691) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.convert.DefaultArangoConverter.lambda$writeEntity$7(DefaultArangoConverter.java:633) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:355) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at com.arangodb.springframework.core.convert.DefaultArangoConverter.writeEntity(DefaultArangoConverter.java:620) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.convert.DefaultArangoConverter.writeInternal(DefaultArangoConverter.java:605) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.convert.DefaultArangoConverter.write(DefaultArangoConverter.java:564) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.convert.DefaultArangoConverter.write(DefaultArangoConverter.java:88) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.convert.ArangoEntityWriter.write(ArangoEntityWriter.java:37) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.template.ArangoTemplate.toVPack(ArangoTemplate.java:283) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
at com.arangodb.springframework.core.template.ArangoTemplate.insert(ArangoTemplate.java:581) ~[arangodb-spring-data-3.2.5.jar:3.2.5]
...
Proposed solution:
- Add a
nullguard and skip an entry if value isnullinDefaultArangoConverter#writeMap, similar to
value = accessor.getProperty(property);
if (value != null) {
this.writeProperty(value, sink, property);
}
block in DefaultArangoConverter#writeEntity
2. Add a null check and write nulls with DefaultArangoConverter#writeSimple and anything else with DefaultArangoConverter#writeInternal in DefaultArangoConverter#writeCollection and DefaultArangoConverter#writeArray
Metadata
Metadata
Assignees
Labels
No labels