Details
-
Bug
-
Resolution: Fixed
-
Blocker
-
2.1.5
-
None
-
-
Empty show more show less
-
Yes
-
Maintenance 17, Maintenance 18, Maintenance 19, Maintenance 21
-
5
Description
The content delivery API produces invalid JSON when a reference resolver that is applied to a list returns Optional.Empty(). The issue is in info.magnolia.rest.delivery.jcr.NodeWriter#writeProperty:
for(int i = 0; i < values.length; ++i) {
String valueAsString = this.getValueString(values[i]);
if (isResolveReference && referenceResolver.isPresent()) {
Optional<Object> reference = ((ReferenceResolver)referenceResolver.get()).resolve(valueAsString);
if (this.canWriteReference(reference, stack, valueAsString, depth)) {
this.writeResolvedReference(jsonGenerator, reference.get(), (String)null, i > 0, stack, depth, annotations, entityStream, mediaType, httpHeaders);
resolvedValues.add(valueAsString);
} else if (resolvedValues.contains(valueAsString)) {
this.writeResolvedReference(jsonGenerator, reference.get(), (String)null, i > 0, stack, depth, annotations, entityStream, mediaType, httpHeaders);
} else {
// FIX THIS a common needs to added here if 'i > 0'
jsonGenerator.write(valueAsString);
}
} else {
jsonGenerator.write(valueAsString);
}
}
See attached example of malformed json.
The use case for this is as follows: We’re converting a JCR object that bundles together a set of amazon s3:// asset to a model with hyperlinks. The issue happens when the JCR object with the s3 links gets deleted, but orphaned references remain.
Checklists
Acceptance criteria