diff --git a/src/Core/WinSWCore/ServiceDescriptor.cs b/src/Core/WinSWCore/ServiceDescriptor.cs
index 1627658..b9eee89 100755
--- a/src/Core/WinSWCore/ServiceDescriptor.cs
+++ b/src/Core/WinSWCore/ServiceDescriptor.cs
@@ -140,7 +140,28 @@ namespace winsw
public static ServiceDescriptor FromXML(string xml)
{
var dom = new XmlDocument();
- dom.LoadXml(xml);
+ XmlReaderSettings settings = new XmlReaderSettings();
+ Assembly a = Assembly.GetExecutingAssembly();
+
+ settings.ValidationType = ValidationType.Schema;
+ settings.ValidationEventHandler += new ValidationEventHandler((object sender, ValidationEventArgs e) => {
+ if (e.Severity == XmlSeverityType.Error)
+ {
+ throw new XmlException("[Error] XML validation - " + e.Message);
+ }
+ });
+
+ using (Stream schemaStream = a.GetManifestResourceStream("winsw.XMLSchema.xsd"))
+ {
+ using (XmlReader schemaReader = XmlReader.Create(schemaStream))
+ {
+ settings.Schemas.Add(null, schemaReader);
+ }
+ }
+
+ var reader = XmlReader.Create(new StringReader(xml), settings);
+
+ dom.Load(reader);
return new ServiceDescriptor(dom);
}
diff --git a/src/Core/WinSWCore/XMLSchema.xsd b/src/Core/WinSWCore/XMLSchema.xsd
index aeede14..0e079b0 100644
--- a/src/Core/WinSWCore/XMLSchema.xsd
+++ b/src/Core/WinSWCore/XMLSchema.xsd
@@ -3,12 +3,137 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Test/winswTests/ServiceDescriptorTests.cs b/src/Test/winswTests/ServiceDescriptorTests.cs
index b18e9e2..a9274d3 100644
--- a/src/Test/winswTests/ServiceDescriptorTests.cs
+++ b/src/Test/winswTests/ServiceDescriptorTests.cs
@@ -455,13 +455,13 @@ $@"
jenkins
";
-
- var dom = new XmlDocument();
+ XmlDocument dom = new XmlDocument();
dom.LoadXml(seedXml);
+
var serviceDescriptor = new ServiceDescriptor(dom);
var reader = XmlReader.Create(new StringReader(seedXml));
- Assert.That(() => serviceDescriptor.ValidateAndLoadXmlSchema(reader), Throws.TypeOf());
+ Assert.That(() => serviceDescriptor.ValidateAndLoadXmlSchema(reader), Throws.Exception.TypeOf());
}
}
}