[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: |
|
||||||||
| Issue Links: |
|
||||||||
| 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. |
| 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.) |