-
Bug
-
Resolution: Fixed
-
Blocker
-
2.1.5
-
None
-
-
Empty show more show less
-
Yes
-
Maintenance 17, Maintenance 18, Maintenance 19, Maintenance 21
-
5
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.
Acceptance criteria