This issue has been reported by a user of the confluence migrator running XWiki 14.10.16 and 9.23.0. When performing the import, one of the page fails to be imported, with the following stack-trace :
Failed to convert content of the page with id [{pageId=XXXXXXXXX, pageTitle='XXXXXXXXXX', parentTitle='null', spaceTitle='XXXXXXXXX', pageRevision='1'}]. Cause: [NullPointerException: ].
class org.xwiki.filter.FilterException: Failed to parse Confluence XHTML content
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLInputFilterStream.read(ConfluenceXHTMLInputFilterStream.java:117)
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLInputFilterStream.read(ConfluenceXHTMLInputFilterStream.java:47)
at org.xwiki.filter.input.AbstractBeanInputFilterStream.read(AbstractBeanInputFilterStream.java:79)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.parse(ConfluenceInputFilterStream.java:1000)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.convertToXWiki21(ConfluenceInputFilterStream.java:969)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPageRevision(ConfluenceInputFilterStream.java:718)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPageRevision(ConfluenceInputFilterStream.java:635)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPage(ConfluenceInputFilterStream.java:528)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readInternal(ConfluenceInputFilterStream.java:234)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.read(ConfluenceInputFilterStream.java:157)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.read(ConfluenceInputFilterStream.java:89)
at org.xwiki.filter.input.AbstractBeanInputFilterStream.read(AbstractBeanInputFilterStream.java:79)
at org.xwiki.filter.internal.job.FilterStreamConverterJob.runInternal(FilterStreamConverterJob.java:97)
at org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)
at org.xwiki.job.AbstractJob.run(AbstractJob.java:223)
at org.xwiki.filter.script.internal.ScriptFilterStreamConverterJob.run(ScriptFilterStreamConverterJob.java:75)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: class 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.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLParser.parse(ConfluenceXHTMLParser.java:265)
at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:121)
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLInputFilterStream.read(ConfluenceXHTMLInputFilterStream.java:115)
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLInputFilterStream.read(ConfluenceXHTMLInputFilterStream.java:47)
at org.xwiki.filter.input.AbstractBeanInputFilterStream.read(AbstractBeanInputFilterStream.java:79)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.parse(ConfluenceInputFilterStream.java:1000)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.convertToXWiki21(ConfluenceInputFilterStream.java:969)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPageRevision(ConfluenceInputFilterStream.java:718)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPageRevision(ConfluenceInputFilterStream.java:635)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPage(ConfluenceInputFilterStream.java:528)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readInternal(ConfluenceInputFilterStream.java:234)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.read(ConfluenceInputFilterStream.java:157)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.read(ConfluenceInputFilterStream.java:89)
at org.xwiki.filter.input.AbstractBeanInputFilterStream.read(AbstractBeanInputFilterStream.java:79)
at org.xwiki.filter.internal.job.FilterStreamConverterJob.runInternal(FilterStreamConverterJob.java:97)
at org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)
at org.xwiki.job.AbstractJob.run(AbstractJob.java:223)
at org.xwiki.filter.script.internal.ScriptFilterStreamConverterJob.run(ScriptFilterStreamConverterJob.java:75)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: class org.xwiki.rendering.wikimodel.WikiParserException: java.lang.NullPointerException
at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:136)
at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:141)
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLParser.parse(ConfluenceXHTMLParser.java:265)
at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:121)
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLInputFilterStream.read(ConfluenceXHTMLInputFilterStream.java:115)
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLInputFilterStream.read(ConfluenceXHTMLInputFilterStream.java:47)
at org.xwiki.filter.input.AbstractBeanInputFilterStream.read(AbstractBeanInputFilterStream.java:79)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.parse(ConfluenceInputFilterStream.java:1000)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.convertToXWiki21(ConfluenceInputFilterStream.java:969)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPageRevision(ConfluenceInputFilterStream.java:718)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPageRevision(ConfluenceInputFilterStream.java:635)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPage(ConfluenceInputFilterStream.java:528)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readInternal(ConfluenceInputFilterStream.java:234)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.read(ConfluenceInputFilterStream.java:157)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.read(ConfluenceInputFilterStream.java:89)
at org.xwiki.filter.input.AbstractBeanInputFilterStream.read(AbstractBeanInputFilterStream.java:79)
at org.xwiki.filter.internal.job.FilterStreamConverterJob.runInternal(FilterStreamConverterJob.java:97)
at org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)
at org.xwiki.job.AbstractJob.run(AbstractJob.java:223)
at org.xwiki.filter.script.internal.ScriptFilterStreamConverterJob.run(ScriptFilterStreamConverterJob.java:75)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: class java.lang.NullPointerException: null
at org.xwiki.rendering.internal.renderer.xwiki20.XWikiSyntaxChainingRenderer.onNewLine(XWikiSyntaxChainingRenderer.java:350)
at org.xwiki.rendering.listener.chaining.AbstractChainingListener.onNewLine(AbstractChainingListener.java:626)
at org.xwiki.rendering.listener.chaining.ConsecutiveNewLineStateChainingListener.onNewLine(ConsecutiveNewLineStateChainingListener.java:280)
at org.xwiki.rendering.listener.chaining.AbstractChainingListener.onNewLine(AbstractChainingListener.java:626)
at org.xwiki.rendering.listener.chaining.BlockStateChainingListener.onNewLine(BlockStateChainingListener.java:885)
at org.xwiki.rendering.listener.chaining.AbstractChainingListener.onNewLine(AbstractChainingListener.java:626)
at org.xwiki.rendering.listener.chaining.EventType$47.fireEvent(EventType.java:598)
at org.xwiki.rendering.listener.chaining.LookaheadChainingListener.fireEvent(LookaheadChainingListener.java:551)
at org.xwiki.rendering.listener.chaining.LookaheadChainingListener.flush(LookaheadChainingListener.java:544)
at org.xwiki.rendering.listener.chaining.LookaheadChainingListener.beginDocument(LookaheadChainingListener.java:117)
at org.xwiki.rendering.listener.chaining.EventType$1.fireEvent(EventType.java:47)
at org.xwiki.rendering.listener.chaining.LookaheadChainingListener.fireEvent(LookaheadChainingListener.java:551)
at org.xwiki.rendering.listener.chaining.LookaheadChainingListener.flush(LookaheadChainingListener.java:544)
at org.xwiki.rendering.listener.chaining.LookaheadChainingListener.beginDocument(LookaheadChainingListener.java:117)
at org.xwiki.rendering.listener.chaining.EventType$1.fireEvent(EventType.java:47)
at org.xwiki.rendering.listener.chaining.LookaheadChainingListener.fireEvent(LookaheadChainingListener.java:551)
at org.xwiki.rendering.listener.chaining.LookaheadChainingListener.flush(LookaheadChainingListener.java:544)
at org.xwiki.rendering.listener.chaining.LookaheadChainingListener.beginDocument(LookaheadChainingListener.java:117)
at org.xwiki.rendering.listener.chaining.AbstractChainingListener.beginDocument(AbstractChainingListener.java:167)
at org.xwiki.rendering.listener.WrappingListener.beginDocument(WrappingListener.java:59)
at org.xwiki.rendering.block.XDOM.before(XDOM.java:110)
at org.xwiki.rendering.block.AbstractBlock.traverse(AbstractBlock.java:539)
at com.xwiki.task.internal.TaskListMacroConverter.toXWiki(TaskListMacroConverter.java:75)
at org.xwiki.contrib.confluence.filter.internal.macros.DefaultMacroConverter.toXWiki(DefaultMacroConverter.java:70)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceConverterListener.onMacro(ConfluenceConverterListener.java:113)
at org.xwiki.rendering.internal.parser.wikimodel.DefaultXWikiGeneratorListener.onMacroBlock(DefaultXWikiGeneratorListener.java:825)
at org.xwiki.rendering.wikimodel.impl.InternalWikiScannerContext.checkMacro(InternalWikiScannerContext.java:559)
at org.xwiki.rendering.wikimodel.impl.InternalWikiScannerContext.closeBlock(InternalWikiScannerContext.java:630)
at org.xwiki.rendering.wikimodel.impl.InternalWikiScannerContext.checkBlockContainer(InternalWikiScannerContext.java:539)
at org.xwiki.rendering.wikimodel.impl.WikiScannerContext.pushContext(WikiScannerContext.java:700)
at org.xwiki.rendering.wikimodel.impl.WikiScannerContext.beginDocument(WikiScannerContext.java:155)
at org.xwiki.rendering.wikimodel.xhtml.handler.TagHandler.beginDocument(TagHandler.java:148)
at org.xwiki.rendering.wikimodel.xhtml.handler.BlockTagHandler.begin(BlockTagHandler.java:58)
at org.xwiki.rendering.wikimodel.xhtml.handler.DivisionTagHandler.begin(DivisionTagHandler.java:60)
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:551)
at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.startElement(XHTMLWhitespaceXMLFilter.java:156)
at org.xwiki.contrib.confluence.parser.xhtml.internal.wikimodel.ConfluenceXHTMLWhitespaceXMLFilter.startElement(ConfluenceXHTMLWhitespaceXMLFilter.java:77)
at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:551)
at org.xwiki.rendering.wikimodel.xhtml.filter.AccumulationXMLFilter.startElement(AccumulationXMLFilter.java:74)
at java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:551)
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.dtd.XMLDTDValidator.startElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.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.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)
at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)
at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)
at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:134)
at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:141)
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLParser.parse(ConfluenceXHTMLParser.java:265)
at org.xwiki.rendering.internal.parser.wikimodel.AbstractWikiModelParser.parse(AbstractWikiModelParser.java:121)
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLInputFilterStream.read(ConfluenceXHTMLInputFilterStream.java:115)
at org.xwiki.contrib.confluence.parser.xhtml.internal.ConfluenceXHTMLInputFilterStream.read(ConfluenceXHTMLInputFilterStream.java:47)
at org.xwiki.filter.input.AbstractBeanInputFilterStream.read(AbstractBeanInputFilterStream.java:79)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.parse(ConfluenceInputFilterStream.java:1000)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.convertToXWiki21(ConfluenceInputFilterStream.java:969)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPageRevision(ConfluenceInputFilterStream.java:718)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPageRevision(ConfluenceInputFilterStream.java:635)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readPage(ConfluenceInputFilterStream.java:528)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.readInternal(ConfluenceInputFilterStream.java:234)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.read(ConfluenceInputFilterStream.java:157)
at org.xwiki.contrib.confluence.filter.internal.input.ConfluenceInputFilterStream.read(ConfluenceInputFilterStream.java:89)
at org.xwiki.filter.input.AbstractBeanInputFilterStream.read(AbstractBeanInputFilterStream.java:79)
at org.xwiki.filter.internal.job.FilterStreamConverterJob.runInternal(FilterStreamConverterJob.java:97)
at org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)
at org.xwiki.job.AbstractJob.run(AbstractJob.java:223)
at org.xwiki.filter.script.internal.ScriptFilterStreamConverterJob.run(ScriptFilterStreamConverterJob.java:75)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Looking at the content of the page, it turns out that the import issue appears when this content is present in a migrated page :
<table class="wrapped relative-table" style="width: 96.4583%;"><tbody><tr><td colspan="1"><div class="content-wrapper"><p><br /></p><p><br /></p><p>• Some paragraph content</p><p>• Some other paragraph content</p><p>• Some other paragraph content</p><p><br /></p><p>• Some other paragraph content</p><ac:task-list>
<ac:task>
<ac:task-id>96</ac:task-id>
<ac:task-status>incomplete</ac:task-status>
<ac:task-body><span><ac:link><ri:user ri:userkey="xxxxxxxxxxxxx" /></ac:link><span> some text related to the task</span><br /></span></ac:task-body>
</ac:task>
</ac:task-list></div></td></tr></tbody></table>
Teodor Caras managed to reduce the size of the content above to some minimal version, that triggers the same issue :
<table><p><br /></p><ac:task-list></ac:task-list></table>
When this issue occurs, the page content is not converted and thus the migrated page in XWiki is blank. With a little bit of diagnosis, it turns out that https://github.com/xwiki/xwiki-rendering/blob/5d30ae5796bbb133ac3a8ddb7c24886930fc6dd9/xwiki-rendering-syntaxes/xwiki-rendering-syntax-xwiki20/src/main/java/org/xwiki/rendering/internal/renderer/xwiki20/XWikiSyntaxChainingRenderer.java#L350C9-L350C9 will throw an NPE because, in these cases, getXWikiSyntaxListenerChain().getLookaheadChainingListener().getNextEvent() will return null. |