Description
In Percussion CMS 8.1.7, an image can be selected successfully from the Assets folder through the Rich Text Editor's Edit image dialog, but the selected image is not actually inserted into the Rich Text content.
Steps to Reproduce
- Log in to Percussion CMS 8.1.7.
- Open a page containing a Rich Text widget.
- Click Edit Widget Content.
- Place the cursor in the Rich Text editor.
- Open the Insert/Edit Image option.
- In the Edit image dialog, click the browse/select icon next to Source.
- In the Select an image dialog, navigate to an Assets folder containing an image.
- Select an image, for example:
/Assets/uploads/images/Photo.jpg
- Click OK in the image selection dialog.
- Observe the Rich Text editor.
- Click Save if required.
Actual Result
- The image is successfully selected from the Assets folder, and the selected item path is displayed:
- Selected item path: /Assets/uploads/images/Photo.jpg
- However, after clicking OK, the image does not appear in the Rich Text editor content area. The editor remains blank, as shown in the attached screenshot.
Expected Result
- After selecting an image from the Assets folder and clicking OK, the image should be inserted at the current cursor position in the Rich Text editor.
- The image should then remain in the Rich Text content after clicking Save.
Impact
The Rich Text widget cannot be used to insert images from the CMS Assets repository, preventing authors from adding existing image assets to Rich Text content.
Evidence
The screenshots show that:
- The image selection dialog successfully lists Photo.jpg.
- The image path is correctly identified as /Assets/uploads/images/Photo.jpg.
- After confirming the selection, the Rich Text editor does not display the selected image.
Screenshots:
server.log:
08:34:33,016 INFO [PSServerLogHandler] appid: 0 type: 1 time: 2026-08-12T08:34:33.016+0530 msg: An internal error (end-condition) was encountered. An unexpected exception occurred:
An unexpected exception occurred. The reason was: Missing required inline link parameter: sys_dependentvariantid. Please consult the log for further information. Error: Missing required inline link parameter: sys_dependentvariantid C:com.percussion.cms.PSInlineLinkField:L:783.
The call-stack was:
Missing required inline link parameter: sys_dependentvariantid C:com.percussion.cms.PSInlineLinkField:L:783
08:34:33,016 ERROR [Cms] An unexpected exception occurred. The reason was: Missing required inline link parameter: sys_dependentvariantid. Please consult the log for further information.
08:34:33,072 ERROR [PSItemSummaryService] Failed to load: -1-101-undefined
java.lang.NumberFormatException: For input string: "undefined"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:589)
at java.lang.Long.parseLong(Long.java:631)
at com.percussion.services.guidmgr.data.PSGuid.assemble(PSGuid.java:274)
at com.percussion.services.guidmgr.data.PSGuid.<init>(PSGuid.java:158)
at com.percussion.services.guidmgr.impl.PSGuidManager.makeGuid(PSGuidManager.java:377)
at sun.reflect.GeneratedMethodAccessor151.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:241)
at com.sun.proxy.$Proxy168.makeGuid(Unknown Source)
at com.percussion.share.dao.impl.PSIdMapper.getGuid(PSIdMapper.java:59)
at com.percussion.share.dao.impl.PSItemSummaryService.find(PSItemSummaryService.java:403)
at com.percussion.share.dao.impl.PSItemSummaryService.find(PSItemSummaryService.java:147)
at com.percussion.share.dao.impl.PSItemSummaryService.find(PSItemSummaryService.java:58)
at com.percussion.share.service.PSAbstractFullDataService.find(PSAbstractFullDataService.java:38)
at com.percussion.assetmanagement.service.impl.PSAssetService.createAssetWidgetRelationship(PSAssetService.java:838)
at com.percussion.assetmanagement.service.impl.PSAssetService.createAssetWidgetRelationship(PSAssetService.java:826)
at com.percussion.assetmanagement.service.impl.PSAssetRestService.createAssetWidgetRelationship(PSAssetRestService.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:201)
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:104)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:225)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:304)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:217)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:279)
at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1459)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)
at com.percussion.servlets.PSSecurityFilter.doFilter(PSSecurityFilter.java:528)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:618)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:229)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:81)
at com.percussion.servlets.PSDispatcherFilter.doFilter(PSDispatcherFilter.java:135)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.percussion.webdav.PSWebDavRequestFilter.doFilter(PSWebDavRequestFilter.java:97)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.percussion.servlets.PSSetCommunityFilter.doFilter(PSSetCommunityFilter.java:61)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.percussion.servlets.PSSecurityFilter.doFilter(PSSecurityFilter.java:528)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.percussion.utils.servlet.PSInputValidatorFilter.doFilter(PSInputValidatorFilter.java:399)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.percussion.utils.security.PSSecurityHeaderFilter.doFilter(PSSecurityHeaderFilter.java:127)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.percussion.servlets.PSCharacterSetFilter.doFilter(PSCharacterSetFilter.java:41)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at com.percussion.servlets.PSCorsFilter.doFilter(PSCorsFilter.java:138)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at org.owasp.csrfguard.CsrfGuardFilter.handleSession(CsrfGuardFilter.java:107)
at org.owasp.csrfguard.CsrfGuardFilter.doFilter(CsrfGuardFilter.java:97)
at org.owasp.csrfguard.CsrfGuardFilter.doFilter(CsrfGuardFilter.java:68)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:722)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:181)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.lang.Thread.run(Thread.java:750)
08:34:33,073 ERROR [Server] PSRuntimeExceptionMapper exception mapper mapped exception: java.lang.NumberFormatException: For input string: "undefined" C:com.percussion.assetmanagement.service.impl.PSAssetRestService:L:189
08:34:33,075 ERROR [JAXRSUtils] No message body writer has been found for class com.percussion.share.validation.PSErrors, ContentType: text/plain
Description
In Percussion CMS 8.1.7, an image can be selected successfully from the Assets folder through the Rich Text Editor's Edit image dialog, but the selected image is not actually inserted into the Rich Text content.
Steps to Reproduce
Actual Result
Expected Result
Impact
The Rich Text widget cannot be used to insert images from the CMS Assets repository, preventing authors from adding existing image assets to Rich Text content.
Evidence
The screenshots show that:
Screenshots:
server.log: