xwikisas / xwiki-pro-macros

XWiki rendering macros useful when migrating content from Confluence
GNU Lesser General Public License v2.1
3 stars 12 forks source link

Column Macro - can't add 2 or more columns in WYSIWYG or in-place editing #241

Closed ane-gabriela closed 1 month ago

ane-gabriela commented 5 months ago

Seems that issue https://github.com/xwikisas/xwiki-pro-macros/issues/137 is still reproducing for me

Steps to reproduce:

  1. Edit a page
  2. Click on Insert > Other macros
  3. Search and select Section Macro (Show Border > true)
  4. Click on Submit
  5. Click inside the macro box
  6. Click on Insert > Other macros
  7. Search and select Column Macro
  8. Add some content and width eg. 40%
  9. Click on Submit
  10. Click on the Add new paragraph icon (white arrow in a red box) in the same section to add another column
  11. Add another column using the steps 6 to 9 from above (width 60%)
  12. Click on Save & View

Expected results: 2 columns are added in the section.

Actual results: The page can't be saved and the following error appears "Failed to save the page. Reason: Server not responding" Save ViewColumn

Environment: XWiki Cloud 15.10.8, Pro Macro 1.16.5, Chrome 123

michitux commented 5 months ago

I can confirm this issue, I get the following stack trace:

2024-04-23 11:27:46,239 [qtp809762318-130 - http://localhost:1600/xwiki/bin/preview/Many%20Columns/WebHome] ERROR o.x.w.i.c.DefaultHTMLConverter - Failed to parse input source 
org.xwiki.rendering.parser.ParseException: Failed to parse input source
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:147)
        at org.xwiki.rendering.internal.parser.xhtml.XHTMLParser.parse(XHTMLParser.java:219)
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:121)
        at org.xwiki.rendering.internal.parser.xhtml.XHTMLParser.parse(XHTMLParser.java:210)
        at org.xwiki.wysiwyg.internal.converter.DefaultHTMLConverter.fromHTML(DefaultHTMLConverter.java:145)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convertHTML(DefaultRequestParameterConverter.java:128)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convert(DefaultRequestParameterConverter.java:111)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convert(DefaultRequestParameterConverter.java:90)
        at org.xwiki.wysiwyg.filter.ConversionFilter.doFilter(ConversionFilter.java:58)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:63)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:132)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:210)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.eclipse.jetty.websocket.servlet.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:170)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:598)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1580)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1384)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1553)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1306)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:192)
        at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:51)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
        at org.eclipse.jetty.server.Server.handle(Server.java:563)
        at org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
        at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199)
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: org.xwiki.rendering.wikimodel.WikiParserException: java.lang.NullPointerException: Cannot invoke "org.xwiki.rendering.wikimodel.xhtml.impl.MacroInfo.getContentScannerContext()" because "macroInfo" is null
        at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:136)
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:141)
        ... 59 common frames omitted
Caused by: java.lang.NullPointerException: Cannot invoke "org.xwiki.rendering.wikimodel.xhtml.impl.MacroInfo.getContentScannerContext()" because "macroInfo" is null
        at org.xwiki.rendering.internal.parser.xhtml.wikimodel.XWikiMacroHandler.handleBegin(XWikiMacroHandler.java:153)
        at org.xwiki.rendering.internal.parser.xhtml.wikimodel.XWikiSpanTagHandler.begin(XWikiSpanTagHandler.java:57)
        at org.xwiki.rendering.internal.parser.xhtml5.wikimodel.XHTML5SpanTagHandler.begin(XHTML5SpanTagHandler.java:70)
        at org.xwiki.rendering.wikimodel.xhtml.handler.TagHandler.beginElement(TagHandler.java:67)
        at org.xwiki.rendering.wikimodel.xhtml.impl.TagContext.beginElement(TagContext.java:74)
        at org.xwiki.rendering.wikimodel.xhtml.impl.TagStack.beginElement(TagStack.java:114)
        at org.xwiki.rendering.wikimodel.xhtml.impl.XhtmlHandler.startElement(XhtmlHandler.java:222)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.sendInlineEvent(XHTMLWhitespaceXMLFilter.java:299)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.appendInlineEvent(XHTMLWhitespaceXMLFilter.java:370)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.startElement(XHTMLWhitespaceXMLFilter.java:162)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.AccumulationXMLFilter.startElement(AccumulationXMLFilter.java:74)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DTDXMLFilter.startElement(DTDXMLFilter.java:73)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:134)
        ... 60 common frames omitted
2024-04-23 11:27:46,241 [qtp809762318-130 - http://localhost:1600/xwiki/bin/preview/Many%20Columns/WebHome] ERROR faultRequestParameterConverter - Exception while parsing HTML 
java.lang.RuntimeException: Exception while parsing HTML
        at org.xwiki.wysiwyg.internal.converter.DefaultHTMLConverter.fromHTML(DefaultHTMLConverter.java:150)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convertHTML(DefaultRequestParameterConverter.java:128)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convert(DefaultRequestParameterConverter.java:111)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convert(DefaultRequestParameterConverter.java:90)
        at org.xwiki.wysiwyg.filter.ConversionFilter.doFilter(ConversionFilter.java:58)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:63)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:132)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:210)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.eclipse.jetty.websocket.servlet.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:170)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:598)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1580)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1384)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1553)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1306)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:192)
        at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:51)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
        at org.eclipse.jetty.server.Server.handle(Server.java:563)
        at org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
        at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199)
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: org.xwiki.rendering.parser.ParseException: Failed to parse input source
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:147)
        at org.xwiki.rendering.internal.parser.xhtml.XHTMLParser.parse(XHTMLParser.java:219)
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:121)
        at org.xwiki.rendering.internal.parser.xhtml.XHTMLParser.parse(XHTMLParser.java:210)
        at org.xwiki.wysiwyg.internal.converter.DefaultHTMLConverter.fromHTML(DefaultHTMLConverter.java:145)
        ... 55 common frames omitted
Caused by: org.xwiki.rendering.wikimodel.WikiParserException: java.lang.NullPointerException: Cannot invoke "org.xwiki.rendering.wikimodel.xhtml.impl.MacroInfo.getContentScannerContext()" because "macroInfo" is null
        at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:136)
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:141)
        ... 59 common frames omitted
Caused by: java.lang.NullPointerException: Cannot invoke "org.xwiki.rendering.wikimodel.xhtml.impl.MacroInfo.getContentScannerContext()" because "macroInfo" is null
        at org.xwiki.rendering.internal.parser.xhtml.wikimodel.XWikiMacroHandler.handleBegin(XWikiMacroHandler.java:153)
        at org.xwiki.rendering.internal.parser.xhtml.wikimodel.XWikiSpanTagHandler.begin(XWikiSpanTagHandler.java:57)
        at org.xwiki.rendering.internal.parser.xhtml5.wikimodel.XHTML5SpanTagHandler.begin(XHTML5SpanTagHandler.java:70)
        at org.xwiki.rendering.wikimodel.xhtml.handler.TagHandler.beginElement(TagHandler.java:67)
        at org.xwiki.rendering.wikimodel.xhtml.impl.TagContext.beginElement(TagContext.java:74)
        at org.xwiki.rendering.wikimodel.xhtml.impl.TagStack.beginElement(TagStack.java:114)
        at org.xwiki.rendering.wikimodel.xhtml.impl.XhtmlHandler.startElement(XhtmlHandler.java:222)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.sendInlineEvent(XHTMLWhitespaceXMLFilter.java:299)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.appendInlineEvent(XHTMLWhitespaceXMLFilter.java:370)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.startElement(XHTMLWhitespaceXMLFilter.java:162)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.AccumulationXMLFilter.startElement(AccumulationXMLFilter.java:74)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DTDXMLFilter.startElement(DTDXMLFilter.java:73)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:134)
        ... 60 common frames omitted

As I said already in #137, this looks very much like a XWiki Rendering issue.

petrenkonikita112263 commented 5 months ago

I'm getting the same error on my XWiki 16.2 with Tomcat and PostgreSQL and the latest version of Pro Macros.

image

{{layout}}
{{layout-section ac:type="single"}}
{{layout-cell}}
{{section}}
{{column width="60%"}}
{{section}}
{{column width="50%"}}
{{panel borderColor="#ffffff" borderStyle="solid" bgColor="#0292ba" borderRadius="4px 4px 4px 4px"}}
(% style="text-align: center;" %)
== (% style="color:#ccffff" %)Text 1(%%) ==

(% style="color:#ccffff" %)Sub-text 1
{{/panel}}
{{/column}}
{{column width="50%"}}
{{panel borderColor="#ffffff" borderStyle="solid" bgColor="#0292ba" borderRadius="4px 4px 4px 4px"}}
(% style="text-align: center;" %)
== (% style="color:#ccffff" %)Text 2(%%) ==
{{/panel}}
{{/column}}
{{/section}}
{{/layout-cell}}
{{/layout-section}}
{{/layout}}

The full stack trace

2024-04-23 12:30:04,485 [http-nio-7635-exec-2 - http://localhost:7635/xwiki/bin/save/Sandbox/TestPage3] ERROR o.x.w.i.c.DefaultHTMLConverter - Failed to parse input source
org.xwiki.rendering.parser.ParseException: Failed to parse input source
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:147)
        at org.xwiki.rendering.internal.parser.xhtml.XHTMLParser.parse(XHTMLParser.java:219)
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:121)
        at org.xwiki.rendering.internal.parser.xhtml.XHTMLParser.parse(XHTMLParser.java:210)
        at org.xwiki.wysiwyg.internal.converter.DefaultHTMLConverter.fromHTML(DefaultHTMLConverter.java:145)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convertHTML(DefaultRequestParameterConverter.java:128)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convert(DefaultRequestParameterConverter.java:111)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convert(DefaultRequestParameterConverter.java:90)
        at org.xwiki.wysiwyg.filter.ConversionFilter.doFilter(ConversionFilter.java:58)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:63)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:132)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:117)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.xwiki.rendering.wikimodel.WikiParserException: java.lang.NullPointerException: Cannot invoke "org.xwiki.rendering.wikimodel.xhtml.impl.MacroInfo.getContentScannerContext()" because "macroInfo" is null
        at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:136)
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:141)
        ... 42 common frames omitted
Caused by: java.lang.NullPointerException: Cannot invoke "org.xwiki.rendering.wikimodel.xhtml.impl.MacroInfo.getContentScannerContext()" because "macroInfo" is null
        at org.xwiki.rendering.internal.parser.xhtml.wikimodel.XWikiMacroHandler.handleBegin(XWikiMacroHandler.java:153)
        at org.xwiki.rendering.internal.parser.xhtml.wikimodel.XWikiSpanTagHandler.begin(XWikiSpanTagHandler.java:57)
        at org.xwiki.rendering.internal.parser.xhtml5.wikimodel.XHTML5SpanTagHandler.begin(XHTML5SpanTagHandler.java:70)
        at org.xwiki.rendering.wikimodel.xhtml.handler.TagHandler.beginElement(TagHandler.java:67)
        at org.xwiki.rendering.wikimodel.xhtml.impl.TagContext.beginElement(TagContext.java:74)
        at org.xwiki.rendering.wikimodel.xhtml.impl.TagStack.beginElement(TagStack.java:114)
        at org.xwiki.rendering.wikimodel.xhtml.impl.XhtmlHandler.startElement(XhtmlHandler.java:222)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.sendInlineEvent(XHTMLWhitespaceXMLFilter.java:299)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.appendInlineEvent(XHTMLWhitespaceXMLFilter.java:370)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.startElement(XHTMLWhitespaceXMLFilter.java:162)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.AccumulationXMLFilter.startElement(AccumulationXMLFilter.java:74)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DTDXMLFilter.startElement(DTDXMLFilter.java:73)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:134)
        ... 43 common frames omitted
2024-04-23 12:30:04,488 [http-nio-7635-exec-2 - http://localhost:7635/xwiki/bin/save/Sandbox/TestPage3] ERROR faultRequestParameterConverter - Exception while parsing HTML
java.lang.RuntimeException: Exception while parsing HTML
        at org.xwiki.wysiwyg.internal.converter.DefaultHTMLConverter.fromHTML(DefaultHTMLConverter.java:150)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convertHTML(DefaultRequestParameterConverter.java:128)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convert(DefaultRequestParameterConverter.java:111)
        at org.xwiki.wysiwyg.internal.converter.DefaultRequestParameterConverter.convert(DefaultRequestParameterConverter.java:90)
        at org.xwiki.wysiwyg.filter.ConversionFilter.doFilter(ConversionFilter.java:58)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:63)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:132)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:117)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.xwiki.rendering.parser.ParseException: Failed to parse input source
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:147)
        at org.xwiki.rendering.internal.parser.xhtml.XHTMLParser.parse(XHTMLParser.java:219)
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:121)
        at org.xwiki.rendering.internal.parser.xhtml.XHTMLParser.parse(XHTMLParser.java:210)
        at org.xwiki.wysiwyg.internal.converter.DefaultHTMLConverter.fromHTML(DefaultHTMLConverter.java:145)
        ... 38 common frames omitted
Caused by: org.xwiki.rendering.wikimodel.WikiParserException: java.lang.NullPointerException: Cannot invoke "org.xwiki.rendering.wikimodel.xhtml.impl.MacroInfo.getContentScannerContext()" because "macroInfo" is null
        at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:136)
        at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:141)
        ... 42 common frames omitted
Caused by: java.lang.NullPointerException: Cannot invoke "org.xwiki.rendering.wikimodel.xhtml.impl.MacroInfo.getContentScannerContext()" because "macroInfo" is null
        at org.xwiki.rendering.internal.parser.xhtml.wikimodel.XWikiMacroHandler.handleBegin(XWikiMacroHandler.java:153)
        at org.xwiki.rendering.internal.parser.xhtml.wikimodel.XWikiSpanTagHandler.begin(XWikiSpanTagHandler.java:57)
        at org.xwiki.rendering.internal.parser.xhtml5.wikimodel.XHTML5SpanTagHandler.begin(XHTML5SpanTagHandler.java:70)
        at org.xwiki.rendering.wikimodel.xhtml.handler.TagHandler.beginElement(TagHandler.java:67)
        at org.xwiki.rendering.wikimodel.xhtml.impl.TagContext.beginElement(TagContext.java:74)
        at org.xwiki.rendering.wikimodel.xhtml.impl.TagStack.beginElement(TagStack.java:114)
        at org.xwiki.rendering.wikimodel.xhtml.impl.XhtmlHandler.startElement(XhtmlHandler.java:222)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.sendInlineEvent(XHTMLWhitespaceXMLFilter.java:299)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.appendInlineEvent(XHTMLWhitespaceXMLFilter.java:370)
        at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.startElement(XHTMLWhitespaceXMLFilter.java:162)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.AccumulationXMLFilter.startElement(AccumulationXMLFilter.java:74)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:539)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DTDXMLFilter.startElement(DTDXMLFilter.java:73)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:345)
        at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
        at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:134)
        ... 43 common frames omitted
michitux commented 5 months ago

This is the HTML that is submitted (copied from Firefox, it seems it didn't properly unescape...):

    '<!--startmacro:section|-|border="true"|-|\\{\\{column+width="40%"}}\nFirst+column\n\\{\\{/column}}\n\n+\\{\\{column+width="60%"}}Second+column\\{\\{/column}}--><div+data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.rendering.block.Block&gt;"+data-xwiki-wikimacrocontent="true"+class="xwiki-metadata-container"><!--startmacro:column|-|width="40%"|-|First+column--><div+data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.rendering.block.Block&gt;"+data-xwiki-wikimacrocontent="true"+class="xwiki-metadata-container"><p>First+column</p></div><!--stopmacro--><p>&nbsp;<!--startmacro:column|-|width="60%"|-|Second+column--><!--stopmacro--></p><div+style="width:+60%"+class="macro-column"><p><span+data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.rendering.block.Block&gt;"+data-xwiki-wikimacrocontent="true"+class="xwiki-metadata-container">Second+column</span></p></div><!--stopmacro--><p>&nbsp;</p></div><!--stopmacro--><div+class="wikimodel-emptyline"></div>'

Raw request:

title=Many+Columns&form_token=PIxQXpJEOMxfx24IgoyjQg&async=true&content=%3C%21--startmacro%3Asection%7C-%7Cborder%3D%22true%22%7C-%7C%5C%7B%5C%7Bcolumn+width%3D%2240%25%22%7D%7D%0AFirst+column%0A%5C%7B%5C%7B%2Fcolumn%7D%7D%0A%0A+%5C%7B%5C%7Bcolumn+width%3D%2260%25%22%7D%7DSecond+column%5C%7B%5C%7B%2Fcolumn%7D%7D--%3E%3Cdiv+data-xwiki-non-generated-content%3D%22java.util.List%26lt%3Borg.xwiki.rendering.block.Block%26gt%3B%22+data-xwiki-wikimacrocontent%3D%22true%22+class%3D%22xwiki-metadata-container%22%3E%3C%21--startmacro%3Acolumn%7C-%7Cwidth%3D%2240%25%22%7C-%7CFirst+column--%3E%3Cdiv+data-xwiki-non-generated-content%3D%22java.util.List%26lt%3Borg.xwiki.rendering.block.Block%26gt%3B%22+data-xwiki-wikimacrocontent%3D%22true%22+class%3D%22xwiki-metadata-container%22%3E%3Cp%3EFirst+column%3C%2Fp%3E%3C%2Fdiv%3E%3C%21--stopmacro--%3E%3Cp%3E%26nbsp%3B%3C%21--startmacro%3Acolumn%7C-%7Cwidth%3D%2260%25%22%7C-%7CSecond+column--%3E%3C%21--stopmacro--%3E%3C%2Fp%3E%3Cdiv+style%3D%22width%3A+60%25%22+class%3D%22macro-column%22%3E%3Cp%3E%3Cspan+data-xwiki-non-generated-content%3D%22java.util.List%26lt%3Borg.xwiki.rendering.block.Block%26gt%3B%22+data-xwiki-wikimacrocontent%3D%22true%22+class%3D%22xwiki-metadata-container%22%3ESecond+column%3C%2Fspan%3E%3C%2Fp%3E%3C%2Fdiv%3E%3C%21--stopmacro--%3E%3Cp%3E%26nbsp%3B%3C%2Fp%3E%3C%2Fdiv%3E%3C%21--stopmacro--%3E%3Cdiv+class%3D%22wikimodel-emptyline%22%3E%3C%2Fdiv%3E&RequiresHTMLConversion=content&content_syntax=xwiki%2F2.1&language=en&xaction=%24escapetool.xml%28%24action%29&xaction=saveandcontinue&xaction=cancel&xeditaction=get&previousVersion=4.1&isNew=false&editingVersionDate=1713865454000&comment=&action_save=&ajax=true

What's notable here is that we have a span with data-xwiki-non-generated-content outside the second column macro, this is probably causing the problem.

The previous response from the HTML Converter was the following HTML:

<!--startmacro:section|-|border="true"|-|\{\{column width="40%"}}
First column
\{\{/column}}

 \{\{column width="60%"}}Second column\{\{/column}}--><div class="macro-section hasBorder"><div data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.rendering.block.Block&gt;" data-xwiki-wikimacrocontent="true" class="xwiki-metadata-container"><!--startmacro:column|-|width="40%"|-|First column--><div class="macro-column" style="width: 40%"><div data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.rendering.block.Block&gt;" data-xwiki-wikimacrocontent="true" class="xwiki-metadata-container"><p>First column</p></div></div><!--stopmacro--><p>&nbsp;<!--startmacro:column|-|width="60%"|-|Second column--><div class="macro-column" style="width: 60%"><span data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.rendering.block.Block&gt;" data-xwiki-wikimacrocontent="true" class="xwiki-metadata-container"><p>Second column</p></span></div><!--stopmacro--></p></div></div><!--stopmacro--><p>&nbsp;</p>

What's notable here is that the metadata element of the second column macro is a span tag which is wrong, it should be a div. This most likely causes a "fix" of the HTML in the browser/CKEditor which leads to the wrong HTML that we saw in the form submission. Again, this span sounds like a rendering bug to me.

michitux commented 5 months ago

I have another hint what's happening. The following is the request that returned the wrong macro metadata:

<!--startmacro:section|-|border="true"|-|\{\{column+width="40%"}}First+column\{\{/column}}--><div+data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.rendering.block.Block&gt;"+data-xwiki-wikimacrocontent="true"+class="xwiki-metadata-container"><!--startmacro:column|-|width="40%"|-|First+column--><div+data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.rendering.block.Block&gt;"+data-xwiki-wikimacrocontent="true"+class="xwiki-metadata-container"><p>First+column</p></div><!--stopmacro--><p>&nbsp;<!--startmacro:column|-|width="60%"|-|Second+column--><!--stopmacro--></p></div><!--stopmacro--><p>&nbsp;</p>

As you can see here, the second column macro is wrapped in a paragraph. That's probably why the returned metadata was inline. And now I also see it, the response to that request (the last quote block in the previous comment) also has the column macro inside the paragraph.

So basically this is another case of a macro that declares that it supports inline mode but produces non-inline content and thereby breaks the WYSIWYG editor. See also XRENDERING-517 and related issues.

While parsing should be fixed, the main fix to be made here is to either stop declaring support for inline mode or to stop producing non-inline content in inline mode.

michitux commented 5 months ago

Just as a warning, apparently in content converted from Confluence the Column macro is used inline... This doesn't make any sense and will definitely break WYSIWYG editing regardless if this problem with the metadata container is fixed as columns won't just contain inline content. I have no good idea how to fix this, unfortunately. Maybe there could be an automatic migration to make all column macros standalone?

raphj commented 5 months ago

Chiming in to say that:

michitux commented 5 months ago

With XRENDERING-745 fixed, so XWiki 16.3.0 and 15.10.9, saving will no longer fail. But this doesn't fix the original problem, the effect will just be different: the content of the column macro will be duplicated outside the column macro.