-
Bug
-
Resolution: Fixed
-
High
-
8.3.0, 8.4.0, 8.5.0, 8.5.2
-
20
-
Severity 3 - Minor
-
0
-
Issue Summary
This is reproducible on Data Center: yes
Running a space backup when the space contains references to inexistent users fails with NullPointerException
Steps to Reproduce
- Create a test space
- Create a new page and add the following using the source viewer to the page:
<ac:structured-macro ac:macro-id="4f850f29-b691-46f7-a0b6-4b534b17b4d9" ac:name="profile" ac:schema-version="1"> <ac:parameter ac:name="user"> <ri:user ri:username="asdf"/> </ac:parameter> </ac:structured-macro>
- Go to Space Tools -> Content Tools -> Backup and create a backup
Expected Results
The backup will be successfully created.
Actual Results
The below exception is thrown in the GUI:
java.util.concurrent.ExecutionException: java.lang.NullPointerException
And in the atlassian-confluence.log we see:
2023-08-04 15:19:34,373 WARN [ConfluenceBackupRestoreManager:thread-11] [confluence.impl.backuprestore.ConfluenceBackupRestoreManager] runJobAndUpdateJobProperties Backup restore job BackupRestoreJob{id=1277958, jobOperation=BACKUP, jobScope=SPACE, jobState=PROCESSING, createTime=2023-08-04T13:19:34Z, startProcessingTime=2023-08-04T13:19:34Z, finishProcessingTime=null, cancelTime=null, owner='admin', whoCancelledTheJob='null', errorMessage='null'} failed: java.util.concurrent.ExecutionException: java.lang.NullPointerException -- url: /c840/rest/api/backup-restore/backup/space | userName: admin | referer: http://localhost:6840/c840/plugins/servlet/space-tool-backup/TEST | traceId: d6ed5d5679e7d6e4 com.atlassian.confluence.backuprestore.exception.BackupRestoreException: java.util.concurrent.ExecutionException: java.lang.NullPointerException at com.atlassian.confluence.impl.backuprestore.backup.SpaceBackupService.doBackupSynchronously(SpaceBackupService.java:133) at com.atlassian.confluence.impl.backuprestore.BackupRestoreJobRunner.runJobSynchronously(BackupRestoreJobRunner.java:58) at com.atlassian.confluence.impl.backuprestore.ConfluenceBackupRestoreManager.runJobAndUpdateJobProperties(ConfluenceBackupRestoreManager.java:277) at com.atlassian.confluence.impl.backuprestore.ConfluenceBackupRestoreManager.processJobsFromTheQueue(ConfluenceBackupRestoreManager.java:259) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 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:834) Caused by: java.util.concurrent.ExecutionException: java.lang.NullPointerException at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) at com.atlassian.confluence.impl.backuprestore.ParallelTasksExecutor.waitUntilAllJobsComplete(ParallelTasksExecutor.java:150) at com.atlassian.confluence.impl.backuprestore.ParallelTasksExecutor.waitUntilAllJobsComplete(ParallelTasksExecutor.java:122) at com.atlassian.confluence.impl.backuprestore.ParallelTasksExecutor.waitUntilAllJobsComplete(ParallelTasksExecutor.java:139) at com.atlassian.confluence.impl.backuprestore.backup.SpaceBackupService.backupAllEntitiesAndAttachments(SpaceBackupService.java:173) at com.atlassian.confluence.impl.backuprestore.backup.SpaceBackupService.doBackupSynchronously(SpaceBackupService.java:109) ... 8 more Caused by: java.lang.NullPointerException at com.atlassian.confluence.impl.backuprestore.backup.exporters.UserKeyExtractorFragmentTransformer.lambda$getReferences$0(UserKeyExtractorFragmentTransformer.java:67) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1620) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at com.atlassian.confluence.impl.backuprestore.backup.exporters.UserKeyExtractorFragmentTransformer.getReferences(UserKeyExtractorFragmentTransformer.java:68) at com.atlassian.confluence.impl.backuprestore.backup.exporters.ReferenceEntityFromBodyContentExtractor.lambda$extractReferenceContentFrom$1(ReferenceEntityFromBodyContentExtractor.java:85) at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) at com.atlassian.confluence.impl.backuprestore.backup.exporters.ReferenceEntityFromBodyContentExtractor.extractReferenceContentFrom(ReferenceEntityFromBodyContentExtractor.java:90) at com.atlassian.confluence.impl.backuprestore.backup.exporters.BodyContentDataExporter.extractReferencesFromBody(BodyContentDataExporter.java:162) at com.atlassian.confluence.impl.backuprestore.backup.exporters.BodyContentDataExporter.extractReferencesFromBody(BodyContentDataExporter.java:130) at com.atlassian.confluence.impl.backuprestore.backup.exporters.BodyContentDataExporter.lambda$exportInBatchByQueryWithCondition$0(BodyContentDataExporter.java:99) ... 4 more
Workaround
The old XML export function can still be accessed by going directly there via the URL:
<BASE_URL>/spaces/exportspacexml.action?key=<SPACE_KEY>
This issue does not appear to happen using this function.
- is cloned from
-
CONFSERVER-90581 Space backup when the space contains references to inexistent users fails with NullPointerException
-
- Closed
-
A fix for this issue is available in Confluence Server and Data Center 8.5.5.
Upgrade now or check out the Release Notes to see what other issues are resolved.