Root cause: one extension returned by the extensions.xwiki.org search has no version, and the client fails on it.
ExtensionIndexJob.addRemoteExtensions() pages through the remote repository 100 extensions at a time with Searchable.search("", offset, 100).
In xwiki-commons, XWikiExtensionRepository turns every search hit into a new XWikiExtension(...), which starts with factory.getVersion(restExtension.getVersion()).
For a hit without <version> this is ExtensionFactory.getVersion(null): the lookup misses, then versions.put(null, ...) is called.
SoftCache is backed by commons-collections4 ReferenceMap, whose put does Objects.requireNonNull(key, "key"), hence NullPointerException: key.
The exception escapes search() for the whole page and is caught per repository in ExtensionIndexJob, which logs the warning and stops processing that repository.
Impact: more than log noise. The page containing that extension and all the following ones are never processed, so about 230 remote extensions (offsets 500-729) are never added to the index, and their recommended/rating/support plan information is never updated, on every instance using extensions.xwiki.org.
Possible fixes
Immediate workaround on extensions.xwiki.org: re-import/update xwiki-platform-image-style-rest so that its lastVersion is set again. This removes the warning everywhere without a release.
Client (xwiki-commons, the real fix): in XWikiExtensionRepository search, skip and log hits with a blank id or version instead of letting one entry fail the whole page.
Indexer (platform, optional hardening): a failure on one page should not stop the processing of the remaining pages.
Server (platform, optional): RepositoryManager only checks the last version when it is not blank, so an extension with an empty lastVersion is still considered valid and is returned by the search. It should probably be treated as invalid, or its last version recomputed. Why the 18.8.0 import left it empty is still unexplained.
This message was sent by Atlassian Jira (v9.3.0#930000-sha1:287aeb6)
If image attachments aren't displayed, see this article.