From ba925395720fb9a47e222d53d9b5f091e84ddb68 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 13 Nov 2017 12:47:12 +0100 Subject: [PATCH] Make data model registration more robust --- .../cms/internal/kernel/CmsDeployment.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java index 10ebb603a..28e2ef938 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java @@ -235,11 +235,11 @@ public class CmsDeployment implements NodeDeployment { } List capabilities = wiring.getCapabilities(CMS_DATA_MODEL_NAMESPACE); for (BundleCapability capability : capabilities) { - registerCnd(adminSession, capability, processed); + registerDataModelCapability(adminSession, capability, processed); } } - private void registerCnd(Session adminSession, BundleCapability capability, Set processed) { + private void registerDataModelCapability(Session adminSession, BundleCapability capability, Set processed) { Map attrs = capability.getAttributes(); String name = (String) attrs.get(DataModelNamespace.CAPABILITY_NAME_ATTRIBUTE); if (processed.contains(name)) { @@ -247,15 +247,21 @@ public class CmsDeployment implements NodeDeployment { log.trace("Data model " + name + " has already been processed"); return; } + + // CND String path = (String) attrs.get(DataModelNamespace.CAPABILITY_CND_ATTRIBUTE); - URL url = capability.getRevision().getBundle().getResource(path); - try (Reader reader = new InputStreamReader(url.openStream())) { - CndImporter.registerNodeTypes(reader, adminSession, true); - processed.add(name); - if (log.isDebugEnabled()) - log.debug("Registered CND " + url); - } catch (Exception e) { - throw new CmsException("Cannot import CND " + url, e); + if (path != null) { + URL url = capability.getRevision().getBundle().getResource(path); + if (url == null) + throw new CmsException("No data model '" + name + "' found under path " + path); + try (Reader reader = new InputStreamReader(url.openStream())) { + CndImporter.registerNodeTypes(reader, adminSession, true); + processed.add(name); + if (log.isDebugEnabled()) + log.debug("Registered CND " + url); + } catch (Exception e) { + throw new CmsException("Cannot import CND " + url, e); + } } if (!asBoolean((String) attrs.get(DataModelNamespace.CAPABILITY_ABSTRACT_ATTRIBUTE))) { -- 2.30.2