diff --git a/lib/datasource/adoptium-java/index.spec.ts b/lib/datasource/adoptium-java/index.spec.ts
index c42add8831cc03f827fda8fb6d33684df1cb3fa8..a04ccb3afd49da6d9eb3476fb8ea13fcf7615906 100644
--- a/lib/datasource/adoptium-java/index.spec.ts
+++ b/lib/datasource/adoptium-java/index.spec.ts
@@ -39,6 +39,16 @@ describe('datasource/adoptium-java/index', () => {
       ).toBeNull();
     });
 
+    it('returns null for empty result', async () => {
+      httpMock.scope(defaultRegistryUrl).get(getPath(0)).reply(200, {});
+      expect(
+        await getPkgReleases({
+          datasource,
+          depName,
+        })
+      ).toBeNull();
+    });
+
     it('returns null for empty 200 OK', async () => {
       httpMock
         .scope(defaultRegistryUrl)
@@ -69,7 +79,7 @@ describe('datasource/adoptium-java/index', () => {
         depName,
       });
       expect(res).toMatchSnapshot();
-      expect(res.releases).toHaveLength(3);
+      expect(res?.releases).toHaveLength(3);
     });
 
     it('processes real data (jre)', async () => {
@@ -79,16 +89,17 @@ describe('datasource/adoptium-java/index', () => {
         depName: 'java-jre',
       });
       expect(res).toMatchSnapshot();
-      expect(res.releases).toHaveLength(2);
+      expect(res?.releases).toHaveLength(2);
     });
 
     it('pages', async () => {
+      const versions = [...range(1, 50)].map((v: number) => ({
+        semver: `1.${v}.0`,
+      }));
       httpMock
         .scope(defaultRegistryUrl)
         .get(getPath(0))
-        .reply(200, {
-          versions: [...range(1, 50)].map((v) => ({ semver: `1.${v}.0` })),
-        })
+        .reply(200, { versions })
         .get(getPath(1))
         .reply(404);
       const res = await getPkgReleases({
@@ -96,7 +107,7 @@ describe('datasource/adoptium-java/index', () => {
         depName,
       });
       expect(res).toMatchSnapshot();
-      expect(res.releases).toHaveLength(50);
+      expect(res?.releases).toHaveLength(50);
     });
   });
 });
diff --git a/lib/datasource/adoptium-java/index.ts b/lib/datasource/adoptium-java/index.ts
index e5c0d1752084a080a3fbff9dd5fa40fd3194dc3d..c3f59a4809e9d014fc57a023ae930678d3f08c02 100644
--- a/lib/datasource/adoptium-java/index.ts
+++ b/lib/datasource/adoptium-java/index.ts
@@ -3,7 +3,7 @@ import { ExternalHostError } from '../../types/errors/external-host-error';
 import { cache } from '../../util/cache/package/decorator';
 import { HttpError } from '../../util/http/types';
 import { Datasource } from '../datasource';
-import type { GetReleasesConfig, ReleaseResult } from '../types';
+import type { GetReleasesConfig, Release, ReleaseResult } from '../types';
 import {
   datasource,
   defaultRegistryUrl,
@@ -25,6 +25,32 @@ export class AdoptiumJavaDatasource extends Datasource {
 
   override readonly caching = true;
 
+  private async getPageReleases(
+    url: string,
+    page: number
+  ): Promise<Release[] | null> {
+    const pgUrl = `${url}&page=${page}`;
+    try {
+      const pgRes = await this.http.getJson<AdoptiumJavaResponse>(pgUrl);
+      return (
+        pgRes?.body?.versions?.map(({ semver }) => ({
+          version: semver,
+        })) ?? null
+      );
+    } catch (err) {
+      if (
+        page !== 0 &&
+        err instanceof HttpError &&
+        err.response?.statusCode === 404
+      ) {
+        // No more pages
+        return null;
+      }
+
+      throw err;
+    }
+  }
+
   @cache({
     namespace: `datasource-${datasource}`,
     key: ({ registryUrl, lookupName }: GetReleasesConfig) =>
@@ -34,7 +60,6 @@ export class AdoptiumJavaDatasource extends Datasource {
     registryUrl,
     lookupName,
   }: GetReleasesConfig): Promise<ReleaseResult | null> {
-    let page = 0;
     const imageType = getImageType(lookupName);
     logger.trace(
       { registryUrl, lookupName, imageType },
@@ -46,24 +71,20 @@ export class AdoptiumJavaDatasource extends Datasource {
       homepage: 'https://adoptium.net',
       releases: [],
     };
-    let resp: AdoptiumJavaResponse;
     try {
-      do {
-        resp = (
-          await this.http.getJson<AdoptiumJavaResponse>(`${url}&page=${page}`)
-        ).body;
-        result.releases.push(
-          ...resp.versions.map(({ semver }) => ({ version: semver }))
-        );
+      let page = 0;
+      let releases = await this.getPageReleases(url, page);
+      while (releases) {
+        result.releases.push(...releases);
+        if (releases.length !== pageSize || page >= 50) {
+          break;
+        }
         page += 1;
-      } while (page < 50 && resp.versions.length === pageSize);
+        releases = await this.getPageReleases(url, page);
+      }
     } catch (err) {
       // istanbul ignore else: not testable with nock
       if (err instanceof HttpError) {
-        if (err.response?.statusCode === 404 && page > 0) {
-          // no more pages
-          return result;
-        }
         if (err.response?.statusCode !== 404) {
           throw new ExternalHostError(err);
         }
diff --git a/tsconfig.strict.json b/tsconfig.strict.json
index dd63af38d24872c24fa92befd5b47ff22a3918dd..c23f0583f7084107013b951b5c54ae5e4442f2b8 100644
--- a/tsconfig.strict.json
+++ b/tsconfig.strict.json
@@ -14,6 +14,7 @@
     "lib/data-files.generated.ts",
     "lib/datasource/**/common.ts",
     "lib/datasource/**/types.ts",
+    "lib/datasource/adoptium-java",
     "lib/datasource/artifactory",
     "lib/datasource/gitlab-tags/util.ts",
     "lib/datasource/helm/common.ts",
@@ -70,6 +71,7 @@
   ],
   "exclude": [
     "lib/constants/platform.spec.ts",
+    "lib/datasource/adoptium-java/**/*.spec.ts",
     "lib/datasource/artifactory/**/*.spec.ts",
     "lib/datasource/docker/common.ts",
     "lib/datasource/github-releases/common.ts",