[MGNLREST-227] Content Delivery API can produce invalid JSON Created: 10/Feb/20  Updated: 25/Aug/20  Resolved: 25/Aug/20

Status: Closed
Project: Magnolia REST Framework
Component/s: None
Affects Version/s: 2.1.5
Fix Version/s: 2.1.6, 2.2.2

Type: Bug Priority: Blocker
Reporter: Leah Staniorski Assignee: Milan Divilek
Resolution: Fixed Votes: 1
Labels: maintenance
Remaining Estimate: 0d
Time Spent: 5.25d
Original Estimate: Not Specified

Attachments: PNG File image.png    
Issue Links:
Problem/Incident
duplicate
Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled
Release notes required:
Yes
Date of First Response:
Epic Link: Support
Sprint: Maintenance 17, Maintenance 18, Maintenance 19, Maintenance 21
Story Points: 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.



 Comments   
Comment by Milan Divilek [ 21/Aug/20 ]

Reopen: This seems to break Tour finder in travel demo (tested on M5.6.14), after search exception is thrown

2020-08-21 15:50:23,478 ERROR info.magnolia.rest.RestExceptionMapper            : Exception thrown executing REST endpoint, returning 500
javax.json.stream.JsonGenerationException: writeStartObject() cannot be called in object context
	at org.glassfish.json.JsonGeneratorImpl.writeStartObject(JsonGeneratorImpl.java:97) ~[javax.json-1.0.jar:1.0]
	at info.magnolia.rest.reference.dam.AssetWriter.writeTo(AssetWriter.java:94) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.reference.dam.AssetWriter.writeTo(AssetWriter.java:65) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.NodeWriter.writeResolvedReference(NodeWriter.java:293) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.NodeWriter.writeProperty(NodeWriter.java:185) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.NodeWriter.writeNode(NodeWriter.java:149) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.NodeWriter.writeTo(NodeWriter.java:119) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.NodeWriter.writeTo(NodeWriter.java:82) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.NodeIteratorWriter.writeTo(NodeIteratorWriter.java:90) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.NodeIteratorWriter.writeTo(NodeIteratorWriter.java:58) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.NodesResultWriter.writeTo(NodesResultWriter.java:88) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.NodesResultWriter.writeTo(NodesResultWriter.java:57) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
	at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.writeTo(AbstractWriterInterceptorContext.java:137) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.interception.ServerWriterInterceptorContext.writeTo(ServerWriterInterceptorContext.java:61) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.proceed(AbstractWriterInterceptorContext.java:124) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.ServerResponseWriter.lambda$writeNomapResponse$2(ServerResponseWriter.java:151) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.interception.ContainerResponseContextImpl.filter(ContainerResponseContextImpl.java:398) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.ServerResponseWriter.executeFilters(ServerResponseWriter.java:219) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:95) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:69) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:529) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:460) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:229) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:135) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:356) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:138) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:215) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:227) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [servlet-api.jar:?]
	at info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:148) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.virtualuri.VirtualUriFilter.doFilter(VirtualUriFilter.java:98) [magnolia-virtual-uri-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:58) [magnolia-cache-core-5.6.4.jar:?]
	at info.magnolia.module.cache.executor.CompositeExecutor.processCacheRequest(CompositeExecutor.java:67) [magnolia-cache-core-5.6.4.jar:?]
	at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:220) [magnolia-cache-core-5.6.4.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:89) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.RangeSupportFilter.doFilter(RangeSupportFilter.java:77) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AddHeadersFilter.doFilter(AddHeadersFilter.java:57) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.multisite.filters.CrossSiteSecurityFilter.doFilter(CrossSiteSecurityFilter.java:104) [magnolia-module-multisite-1.3.5.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.security.SecurityCallbackFilter.doFilter(SecurityCallbackFilter.java:84) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:94) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.module.site.filters.SiteMergeFilter.doFilter(SiteMergeFilter.java:119) [magnolia-site-1.2.4.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.multisite.filters.MultiSiteFilter.doFilter(MultiSiteFilter.java:120) [magnolia-module-multisite-1.3.5.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MultiChannelFilter.doFilter(MultiChannelFilter.java:83) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.module.cache.filter.GZipFilter.doFilter(GZipFilter.java:73) [magnolia-cache-core-5.6.4.jar:?]
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:127) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:75) [magnolia-module-enterprise-5.6.14-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:111) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.personalization.preview.filter.PreviewFilter.doFilter(PreviewFilter.java:92) [magnolia-personalization-preview-app-1.5.4.jar:?]
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.personalization.trait.AbstractTraitDetectorFilter.doFilter(AbstractTraitDetectorFilter.java:80) [magnolia-personalization-integration-1.5.4.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.personalization.trait.AbstractTraitDetectorFilter.doFilter(AbstractTraitDetectorFilter.java:80) [magnolia-personalization-integration-1.5.4.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.personalization.trait.AbstractTraitDetectorFilter.doFilter(AbstractTraitDetectorFilter.java:80) [magnolia-personalization-integration-1.5.4.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.personalization.trait.AbstractTraitDetectorFilter.doFilter(AbstractTraitDetectorFilter.java:80) [magnolia-personalization-integration-1.5.4.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:155) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:128) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:107) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:67) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:110) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:96) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.51]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.51]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) [catalina.jar:8.5.51]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:8.5.51]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543) [catalina.jar:8.5.51]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [catalina.jar:8.5.51]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [catalina.jar:8.5.51]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688) [catalina.jar:8.5.51]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [catalina.jar:8.5.51]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [catalina.jar:8.5.51]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609) [tomcat-coyote.jar:8.5.51]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-coyote.jar:8.5.51]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818) [tomcat-coyote.jar:8.5.51]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623) [tomcat-coyote.jar:8.5.51]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:8.5.51]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_181]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_181]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.5.51]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
	Suppressed: javax.json.stream.JsonGenerationException: Generating incomplete JSON
		at org.glassfish.json.JsonGeneratorImpl.close(JsonGeneratorImpl.java:534) ~[javax.json-1.0.jar:1.0]
		at info.magnolia.rest.delivery.jcr.NodesResultWriter.writeTo(NodesResultWriter.java:90) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
		at info.magnolia.rest.delivery.jcr.NodesResultWriter.writeTo(NodesResultWriter.java:57) ~[magnolia-rest-content-delivery-2.1.6-SNAPSHOT.jar:?]
		at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.writeTo(AbstractWriterInterceptorContext.java:137) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.interception.ServerWriterInterceptorContext.writeTo(ServerWriterInterceptorContext.java:61) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.proceed(AbstractWriterInterceptorContext.java:124) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.ServerResponseWriter.lambda$writeNomapResponse$2(ServerResponseWriter.java:151) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.interception.ContainerResponseContextImpl.filter(ContainerResponseContextImpl.java:398) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.ServerResponseWriter.executeFilters(ServerResponseWriter.java:219) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:95) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:69) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:529) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:460) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:229) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:135) ~[resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:356) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:138) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:215) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:227) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.8.0.Final.jar:3.8.0.Final]
		at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [servlet-api.jar:?]
		at info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:148) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
		at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.13-SNAPSHOT.jar:?]
Comment by Milan Divilek [ 24/Aug/20 ]

Problem exist only in 2.1.x branch and it's caused by writing directly into entityStream in https://git.magnolia-cms.com/projects/MODULES/repos/rest/browse/magnolia-rest-content-delivery/src/main/java/info/magnolia/rest/delivery/jcr/NodeWriter.java?at=refs%2Fheads%2Frelease%2F2.1#284,290

and then not generating new JsonGenerator in https://git.magnolia-cms.com/projects/MODULES/repos/rest/browse/magnolia-rest-content-delivery/src/main/java/info/magnolia/rest/reference/dam/AssetWriter.java#85-87

because entitystream is wrapped into info.magnolia.rest.delivery.jcr.OutputStreamWrapper in info.magnolia.rest.delivery.jcr.NodeIteratorWriter#writeTo.

 

Problem doesn't exist on master branch because there's JsonGenerator.writeKey(String) is used instead of writing directly into entityStream. Unfortunately this method doesn't exist in javax.json-api-1.0 lib (introduced in version 1.1.)

Generated at Mon Feb 12 06:57:52 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.