diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConnector.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConnector.java index 4b2d6260..f8350def 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConnector.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConnector.java @@ -21,6 +21,7 @@ * your own identifying information: * "Portions Copyrighted 2010 [name of copyright owner]" * + * Portions Copyrighted 2026 3A Systems LLC * $Id$ */ package org.forgerock.openicf.connectors.xml; @@ -99,8 +100,19 @@ public void init(Configuration configuration) { * @see org.identityconnectors.framework.spi.Connector#dispose() */ public void dispose() { - xmlInstanceHandler.dispose(); - log.ok("Dispose {0}", config.getXmlFilePath()); + if (xmlInstanceHandler == null) { + // init() never completed successfully (e.g. invalid XML/XSD path), + // nothing to release. Avoid throwing NPE so the original failure + // from init()/operation is not masked. + log.ok("Dispose called but XML handler was not initialized; nothing to release"); + return; + } + try { + xmlInstanceHandler.dispose(); + } finally { + xmlInstanceHandler = null; + } + log.ok("Dispose {0}", config != null ? config.getXmlFilePath() : null); } private synchronized Object getLock() {