From de68e009721aa836f604ef158899e4324abf7cc0 Mon Sep 17 00:00:00 2001 From: Katja Luther Date: Thu, 5 Nov 2020 11:55:02 +0100 Subject: [PATCH] ref #8774: avoid NPE in delete method --- .../api/service/FeatureNodeServiceImpl.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureNodeServiceImpl.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureNodeServiceImpl.java index 8d9e8eebd1..c0fe8592a0 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureNodeServiceImpl.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureNodeServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional; import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling; import eu.etaxonomy.cdm.api.service.config.TermNodeDeletionConfigurator; +import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException; import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.CdmBase; @@ -28,7 +29,6 @@ import eu.etaxonomy.cdm.model.description.Feature; import eu.etaxonomy.cdm.model.term.DefinedTermBase; import eu.etaxonomy.cdm.model.term.TermNode; import eu.etaxonomy.cdm.model.term.TermTree; -import eu.etaxonomy.cdm.model.term.TermVocabulary; import eu.etaxonomy.cdm.persistence.dao.term.ITermNodeDao; /** @@ -58,9 +58,11 @@ public class FeatureNodeServiceImpl extends VersionableServiceBase node = CdmBase.deproxy(dao.load(nodeUuid)); + TermNode node = dao.load(nodeUuid); result = isDeletable(nodeUuid, config); + if (result.isOk()){ + node = HibernateProxyHelper.deproxy(node); TermNode parent = node.getParent(); parent = CdmBase.deproxy(parent); List> children = new ArrayList<>(node.getChildNodes()); @@ -104,14 +106,8 @@ public class FeatureNodeServiceImpl extends VersionableServiceBase node = load(nodeUuid); DeleteResult result = new DeleteResult(); + if (node == null){ + result.addException(new DataChangeNoRollbackException("The object is not available anymore.")); + result.setAbort(); + return result; + } Set references = commonService.getReferencingObjectsForDeletion(node); for (CdmBase ref:references){ if (ref instanceof TermNode){ @@ -190,4 +191,7 @@ public class FeatureNodeServiceImpl extends VersionableServiceBase