From 7ffc8b18cde8730d41e859cff493e9ffcab1224c Mon Sep 17 00:00:00 2001 From: tHerrmann Date: Thu, 8 Aug 2019 11:34:28 +0200 Subject: [PATCH] Fixing null-pointer issue when generating context menu for empty XML-contents. --- .../ui/apps/CmsWorkplaceAppManager.java | 8 +++-- .../editors/CmsWorkplaceEditorManager.java | 31 ++++++++++--------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/org/opencms/ui/apps/CmsWorkplaceAppManager.java b/src/org/opencms/ui/apps/CmsWorkplaceAppManager.java index 2164173bca4..9b765ea8bfc 100644 --- a/src/org/opencms/ui/apps/CmsWorkplaceAppManager.java +++ b/src/org/opencms/ui/apps/CmsWorkplaceAppManager.java @@ -468,8 +468,12 @@ public I_CmsEditor getEditorForResource(CmsResource resource, boolean plainText) List editors = new ArrayList(); for (int i = 0; i < EDITORS.length; i++) { - if (EDITORS[i].matchesResource(resource, plainText)) { - editors.add(EDITORS[i]); + try { + if (EDITORS[i].matchesResource(resource, plainText)) { + editors.add(EDITORS[i]); + } + } catch (Exception e) { + LOG.error(e.getLocalizedMessage(), e); } } I_CmsEditor result = null; diff --git a/src/org/opencms/workplace/editors/CmsWorkplaceEditorManager.java b/src/org/opencms/workplace/editors/CmsWorkplaceEditorManager.java index 5998717bddc..049250ab105 100644 --- a/src/org/opencms/workplace/editors/CmsWorkplaceEditorManager.java +++ b/src/org/opencms/workplace/editors/CmsWorkplaceEditorManager.java @@ -27,7 +27,6 @@ package org.opencms.workplace.editors; -import org.opencms.ade.contenteditor.CmsContentTypeVisitor; import org.opencms.cache.CmsVfsMemoryObjectCache; import org.opencms.configuration.CmsParameterConfiguration; import org.opencms.db.CmsUserSettings; @@ -148,11 +147,10 @@ public CmsWorkplaceEditorManager(CmsObject cms) { * @param resource the resource to check * * @return false if for some fields the new Acacia widgets are not available - * - * @throws CmsException if something goes wrong */ public static boolean checkAcaciaEditorAvailable(CmsObject cms, CmsResource resource) { + boolean result = false; if (resource == null) { try { // we want a stack trace @@ -160,20 +158,23 @@ public static boolean checkAcaciaEditorAvailable(CmsObject cms, CmsResource reso } catch (Exception e) { LOG.error("Can't check widget availability because resource is null!", e); } - return false; - } - try { - CmsFile file = (resource instanceof CmsFile) ? (CmsFile)resource : cms.readFile(resource); - CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, file); - if (content.getContentDefinition().getContentHandler().isAcaciaEditorDisabled()) { - return false; + } else { + try { + CmsFile file = (resource instanceof CmsFile) ? (CmsFile)resource : cms.readFile(resource); + if (file.getContents().length > 0) { + CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, file); + if (!content.getContentDefinition().getContentHandler().isAcaciaEditorDisabled()) { + result = true; + } + } + } catch (CmsException e) { + LOG.info( + "error thrown in checkAcaciaEditorAvailable for " + resource + " : " + e.getLocalizedMessage(), + e); + result = true; } - CmsContentTypeVisitor visitor = new CmsContentTypeVisitor(cms, file, cms.getRequestContext().getLocale()); - return visitor.isEditorCompatible(content.getContentDefinition()); - } catch (CmsException e) { - LOG.info("error thrown in checkAcaciaEditorAvailable for " + resource + " : " + e.getLocalizedMessage(), e); - return true; } + return result; } /**