From 8a0ee840f4b9f91ce5ba5ae3ea86320a3dbf2998 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 9 Nov 2012 09:55:43 +0100 Subject: Validate module xml against schema before unmarshalling. Fixes #82 --- .../com/c2kernel/process/module/ModuleManager.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/com/c2kernel/process/module/ModuleManager.java b/src/main/java/com/c2kernel/process/module/ModuleManager.java index 6eb37c9..e78c25d 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleManager.java +++ b/src/main/java/com/c2kernel/process/module/ModuleManager.java @@ -1,5 +1,6 @@ package com.c2kernel.process.module; +import java.io.IOException; import java.net.URL; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; @@ -8,11 +9,14 @@ import java.util.HashMap; import java.util.Properties; import com.c2kernel.common.CannotManageException; +import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectAlreadyExistsException; import com.c2kernel.common.ObjectCannotBeUpdated; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.lookup.DomainPath; +import com.c2kernel.persistency.outcome.OutcomeValidator; +import com.c2kernel.persistency.outcome.Schema; import com.c2kernel.process.Gateway; import com.c2kernel.scripting.ScriptingEngineException; import com.c2kernel.utils.FileStringUtility; @@ -24,15 +28,29 @@ public class ModuleManager { HashMap modulesXML = new HashMap(); Properties props = new Properties(); boolean isServer; + OutcomeValidator moduleValidator; public ModuleManager(Enumeration moduleEnum, boolean isServer) throws ModuleException { this.isServer = isServer; + try { + Schema moduleSchema = new Schema("Module", 0, false, + FileStringUtility.url2String(Resource.getKernelResourceURL("boot/OD/Module.xsd"))); + moduleValidator = new OutcomeValidator(moduleSchema); + } catch (InvalidDataException ex) { + Logger.error(ex); + throw new ModuleException("Module Schema is not valid"); + } catch (IOException ex) { + throw new ModuleException("Could not load Module Schema from kernel resources"); + } ArrayList loadedModules = new ArrayList(); ArrayList moduleNs = new ArrayList(); while(moduleEnum.hasMoreElements()) { URL newModuleURL = moduleEnum.nextElement(); try { String moduleXML = FileStringUtility.url2String(newModuleURL); + String errors = moduleValidator.validate(moduleXML); + if (errors.length() > 0) + throw new ModuleException("Module XML found at "+newModuleURL+" was not valid: "+errors); Module newModule = (Module)Gateway.getMarshaller().unmarshall(moduleXML); Resource.addModuleBaseURL(newModule.ns, newModule.resURL); modules.add(newModule); -- cgit v1.2.3