Share all details about your problem, including any error messages you may have received.
java.lang.NullPointerException: Cannot invoke "sailpoint.object.EntitlementGroup.deepCopy(sailpoint.object.Resolver)" because "eg" is null
at sailpoint.certification.CertifiableAnalyzer.getCombinedExceptions(CertifiableAnalyzer.java:735)
at sailpoint.certification.CertifiableAnalyzer.getExceptionCertifiables(CertifiableAnalyzer.java:701)
at sailpoint.certification.CertifiableAnalyzer.getCertifiables(CertifiableAnalyzer.java:575)
at sailpoint.certification.CertifiableAnalyzer.BaseGetCertifiables(CertifiableAnalyzer.java:471)
at sailpoint.certification.CertifiableAnalyzer.getCertifiables(CertifiableAnalyzer.java:222)
at sailpoint.certification.EntityBuilder.createCertificationEntity(EntityBuilder.java:1248)
at sailpoint.certification.EntityBuilder.buildEntity(EntityBuilder.java:675)
at sailpoint.certification.EntityBuilder.buildEntities(EntityBuilder.java:620)
at sailpoint.certification.PartitionHandler.executeSynchronous(PartitionHandler.java:442)
at sailpoint.certification.IdentityCertificationStarter.execute(IdentityCertificationStarter.java:276)
at sailpoint.task.CertificationExecutor.handleTargetedCert(CertificationExecutor.java:381)
at sailpoint.task.CertificationExecutor.execute(CertificationExecutor.java:196)
at sailpoint.api.TaskManager.runSync(TaskManager.java:981)
at sailpoint.api.TaskManager.runSync(TaskManager.java:764)
at sailpoint.scheduler.JobAdapter.execute(JobAdapter.java:128)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
I am trying to launch a targeted certification, this is using a classification filter, the classification was imported as xml and then attached to the entitlement via UI
We have used this approach earlier as well for launching reviews where AD groups control access to an app, and I am just reusing that certification as template, by changing the filter, cert name and active period
Somehow the launch keeps getting stuck, and I see this error in the stacktrace, this has happened twice now
We have no clue what this error means, and this launch is critical for us, any inputs please!
@schawlalvfs1987 Sure.. please give it a try.. This possibly indicates that one or more identities in scope have a null or orphaned entitlement group reference in their identity cube.
Try running a query to identify identities in scope that have entitlement groups referencing entitlements or applications that no longer exist or have null values.
SELECT i.name, eg.id FROM spt_identity i
JOIN spt_entitlement_group eg ON eg.identity_id = i.id
WHERE eg.application IS NULL OR eg.id IS NULL;
Refresh failed with this error: java.lang.NullPointerException: Cannot invoke ‘“Object.getClass()” because “obj” is null
at sailpoint.persistence.ClassPersistenceManager.getManager(ClassPersistenceManager.java:166)
at sailpoint.persistence.ClassPersistenceManager.removeObject(ClassPersistenceManager.java:305)
at sailpoint.server.InternalContext.removeObject(InternalContext.java:891)
at sailpoint.api.EntitlementCorrelator.saveDetectionAnalysis(EntitlementCorrelator.java:1107)
at sailpoint.api.Identitizer.refresh(Identitizer.java:2407)
at sailpoint.task.IdentityRefreshExecutor$RefreshWorker.refreshAndProcess(IdentityRefreshExecutor.java:1610)
at sailpoint.task.IdentityRefreshExecutor$RefreshWorkerPool.queue(IdentityRefreshExecutor.java:1928)
at sailpoint.task.IdentityRefreshExecutor.refresh(IdentityRefreshExecutor.java:1113)
at sailpoint.task.IdentityRefreshExecutor.execute(IdentityRefreshExecutor.java:856)
at sailpoint.api.TaskManager.runSync(TaskManager.java:981)
at sailpoint.api.TaskManager.runSync(TaskManager.java:764)
at sailpoint.scheduler.JobAdapter.execute(JobAdapter.java:128)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)’
I dont have access to DB. Only console or debug, how do I resolve this
@schawlalvfs1987 It looks there is a null object in the entitlement correlation path that needs to be cleaned up first. Can you try running the query i shared.
SailPoint calls this out specifically for NPEs caused by null/corrupted Hibernate idx values and that can surface during refresh, aggregation, basically any bulk processing, which lines up with what you’re seeing.
You import it via Global Settings → Import from File and it gives you a task called Support Task for Hibernate IDX.
Run it first in read-only mode, just check “process all DB tables” and “scan tables for null-valued key-column composited with non-null ‘idx’ key-column.” It won’t touch anything, just reports back what it finds.
This task only fixes null IDX values, it won’t catch things like a null parent reference.
Still, it’s worth running first since it’s quick and low-risk. If it comes back clean then I would split the population filter into smaller subsets and run refresh against each, and narrow down based on which subset fails.
1. Entitlement groups with null application reference
SELECT id, identity_id, name, native_identity, application
FROM spt_entitlement_group
WHERE application IS NULL;
2. Identity entitlement rows with null application
SELECT id, identity_id, name, value, type, application
FROM spt_identity_entitlement
WHERE application IS NULL
AND name NOT IN ('detectedRoles', 'assignedRoles');
3. Detected-role references pointing at a role ID that no longer exists
SELECT ib.identity_id, ib.idx, ib.bundle
FROM spt_identity_bundles ib
LEFT JOIN spt_bundle b ON ib.bundle = b.id
WHERE b.id IS NULL;
4. Duplicate detected-role rows for the same identity+role
SELECT identity_id, bundle, COUNT(*) AS occurrences
FROM spt_identity_bundles
GROUP BY identity_id, bundle
HAVING COUNT(*) > 1;
If any of these return a row, that’s very likely your cause
So after running the IDX cleanup job, and then running refresh identity entitlement on all links + refresh assigned detected roles and promote entitlements on a filtered population, the certification finally launched!
Thank you to everyone who replied and helped solve this!