From e4d9faa93c66ac6324221cf517d0ceb998655b82 Mon Sep 17 00:00:00 2001 From: Julian Ladisch Date: Fri, 13 Nov 2026 12:00:03 +0100 Subject: [PATCH 1/2] OKAPI-1271: NPE TenantManager.jobRunPending .isExclusive Okapi v7.0.14 failed when trying to install any module: ``` Cannot invoke "org.folio.okapi.bean.ModuleDescriptor.getSystemInterface(String)" because "md" is null java.lang.NullPointerException: Cannot invoke "org.folio.okapi.bean.ModuleDescriptor.getSystemInterface(String)" because "md" is null at org.folio.okapi.managers.TenantManager.isExclusive(TenantManager.java:1055) at org.folio.okapi.managers.TenantManager.jobRunPending(TenantManager.java:1084) at org.folio.okapi.managers.TenantManager.lambda$jobInvoke$67(TenantManager.java:1118) at io.vertx.core.Future.future(Future.java:224) at org.folio.okapi.managers.TenantManager.jobInvoke(TenantManager.java:1118) at org.folio.okapi.managers.TenantManager.lambda$runJob$60(TenantManager.java:1011) at io.vertx.core.impl.future.Composition.complete(Composition.java:40) ``` Restarting Okapi worked around the issue. The solution is to test for null to avoid the NullPointerException. --- .../src/main/java/org/folio/okapi/managers/TenantManager.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/okapi-core/src/main/java/org/folio/okapi/managers/TenantManager.java b/okapi-core/src/main/java/org/folio/okapi/managers/TenantManager.java index cf80d3002..87afc7107 100644 --- a/okapi-core/src/main/java/org/folio/okapi/managers/TenantManager.java +++ b/okapi-core/src/main/java/org/folio/okapi/managers/TenantManager.java @@ -1078,6 +1078,10 @@ private void jobRunPending(Tenant t, ProxyContext pc, TenantInstallOptions optio continue; } ModuleDescriptor md = modsAvailable.get(tm.getId()); + if (md == null) { + logger.info("jobRunPending skips TenantModuleDescriptor id={} because ModuleDescriptor is null", tm.getId()); + continue; + } if (options.getDepCheck() && !depsOK(tm, md, getEnabledModules(t))) { continue; } From cb0b52e3aadb5575f6c7d4c50bf1552e413f3972 Mon Sep 17 00:00:00 2001 From: Julian Ladisch Date: Fri, 13 Nov 2026 12:51:14 +0100 Subject: [PATCH 2/2] Break line that is too long --- .../src/main/java/org/folio/okapi/managers/TenantManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/okapi-core/src/main/java/org/folio/okapi/managers/TenantManager.java b/okapi-core/src/main/java/org/folio/okapi/managers/TenantManager.java index 87afc7107..01ab55713 100644 --- a/okapi-core/src/main/java/org/folio/okapi/managers/TenantManager.java +++ b/okapi-core/src/main/java/org/folio/okapi/managers/TenantManager.java @@ -1079,7 +1079,8 @@ private void jobRunPending(Tenant t, ProxyContext pc, TenantInstallOptions optio } ModuleDescriptor md = modsAvailable.get(tm.getId()); if (md == null) { - logger.info("jobRunPending skips TenantModuleDescriptor id={} because ModuleDescriptor is null", tm.getId()); + logger.info("jobRunPending skips TenantModuleDescriptor id={} " + + "because ModuleDescriptor is null", tm.getId()); continue; } if (options.getDepCheck() && !depsOK(tm, md, getEnabledModules(t))) {