public XmlDocSource Read(string configPath, string assemblySearchPath) { var xmlDocSource = new XmlDocSource(); var config = XDocument.Load(configPath); var apiNode = config.XPathSelectElement("configuration/tradingApi"); var profile = apiNode.XPathSelectElement("profiles").Descendants("profile").First(); foreach(var dtoAssemblyName in profile.Descendants("dtoAssemblies").Descendants("add").Select(n => n.Attribute("assembly").Value).ToArray()) { xmlDocSource.Dtos.Add(AssemblyWithXmlDocs.CreateFromName(dtoAssemblyName, assemblySearchPath)); } var routeNodes = profile.XPathSelectElement("routes").XPathSelectElements("add").ToList(); xmlDocSource.Routes = new List<RouteElement>(); foreach (var item in routeNodes) { var map = new RouteElement() { Endpoint = item.Attribute("endpoint").Value /*+ item.Attribute("pathInfo").Value*/, Name = item.Attribute("name").Value, Type = item.Attribute("type").Value }; xmlDocSource.Routes.Add(map); } xmlDocSource.RouteAssembly = AssemblyWithXmlDocs.CreateFromName(xmlDocSource.Routes[0].Type.Substring(xmlDocSource.Routes[0].Type.IndexOf(",") + 1).Trim(), assemblySearchPath); return xmlDocSource; }
public MetadataGenerationResult GenerateJsonSchema(XmlDocSource xmlDocSource) { var results = new MetadataGenerationResult(); //Checks that each DTO type can be documented // merge canemittype to emitter //results.AddValidationResults(new Auditor().AuditTypes(xmlDocSource)); //Creates Jschema for all DTO types where it can find XML docs try { results.JsonSchema = new JsonSchemaDtoEmitter().EmitDtoJson(xmlDocSource); } catch (MetadataValidationException e) { results.MetadataGenerationErrors.Add(new MetadataGenerationError(MetadataType.JsonSchema, typeof(object), e)); } try { //Checks that DTOs all have valid XML comments XmlDocUtils.EnsureXmlDocsAreValid(xmlDocSource); } catch (MetadataValidationException ex) { results.MetadataGenerationErrors.Add(new MetadataGenerationError(MetadataType.SMD, typeof(object), new MetadataValidationException(typeof(object), "", ex.Message, "", ex))); } return results; }
public MetadataGenerationResult GenerateJsonSchema(XmlDocSource xmlDocSource) { var results = new MetadataGenerationResult(); //Checks that each DTO type can be documented // merge canemittype to emitter //results.AddValidationResults(new Auditor().AuditTypes(xmlDocSource)); //Creates Jschema for all DTO types where it can find XML docs try { results.JsonSchema = new JsonSchemaDtoEmitter().EmitDtoJson(xmlDocSource); } catch (MetadataValidationException e) { results.MetadataGenerationErrors.Add(new MetadataGenerationError(MetadataType.JsonSchema, typeof(object), e)); } try { //Checks that DTOs all have valid XML comments XmlDocUtils.EnsureXmlDocsAreValid(xmlDocSource); } catch (MetadataValidationException ex) { results.MetadataGenerationErrors.Add(new MetadataGenerationError(MetadataType.SMD, typeof(object), new MetadataValidationException(typeof(object), "", ex.Message, "", ex))); } return(results); }
public XmlDocSource Read(string configPath, string assemblySearchPath) { var xmlDocSource = new XmlDocSource(); var config = XDocument.Load(configPath); var apiNode = config.XPathSelectElement("configuration/tradingApi"); var profile = apiNode.XPathSelectElement("profiles").Descendants("profile").First(); foreach (var dtoAssemblyName in profile.Descendants("dtoAssemblies").Descendants("add").Select(n => n.Attribute("assembly").Value).ToArray()) { xmlDocSource.Dtos.Add(AssemblyWithXmlDocs.CreateFromName(dtoAssemblyName, assemblySearchPath)); } var routeNodes = profile.XPathSelectElement("routes").XPathSelectElements("add").ToList(); xmlDocSource.Routes = new List <RouteElement>(); foreach (var item in routeNodes) { var map = new RouteElement() { Endpoint = item.Attribute("endpoint").Value /*+ item.Attribute("pathInfo").Value*/, Name = item.Attribute("name").Value, Type = item.Attribute("type").Value }; xmlDocSource.Routes.Add(map); } xmlDocSource.RouteAssembly = AssemblyWithXmlDocs.CreateFromName(xmlDocSource.Routes[0].Type.Substring(xmlDocSource.Routes[0].Type.IndexOf(",") + 1).Trim(), assemblySearchPath); return(xmlDocSource); }
public static void EnsureXmlDocsAreValid(XmlDocSource xmlDocSource) { foreach (var assembly in xmlDocSource.Dtos.Select(a => a.Assembly)) { foreach (Type type in assembly.GetTypes()) { var doc = type.GetXmlDocs(); doc.EnsureXmlDocsValid(); } } }
public MetadataGenerationResult GenerateSmd(XmlDocSource xmlDocSource, JObject jsonSchema) { MetadataGenerationResult result = new Emitter().EmitSmdJson(xmlDocSource, true, jsonSchema); try { //Checks that services all have valid XML comments xmlDocSource.RouteAssembly.AssemblyXML.EnsureXmlDocsValid(); } catch (MetadataValidationException ex) { result.MetadataGenerationErrors.Add(new MetadataGenerationError(MetadataType.SMD, typeof(object), new MetadataValidationException(typeof(object), "", ex.Message, "", ex))); } return(result); }
public MetadataGenerationResult GenerateSmd(XmlDocSource xmlDocSource, JObject jsonSchema) { MetadataGenerationResult result = new Emitter().EmitSmdJson(xmlDocSource, true, jsonSchema); try { //Checks that services all have valid XML comments xmlDocSource.RouteAssembly.AssemblyXML.EnsureXmlDocsValid(); } catch (MetadataValidationException ex) { result.MetadataGenerationErrors.Add(new MetadataGenerationError(MetadataType.SMD, typeof(object), new MetadataValidationException(typeof(object), "", ex.Message, "", ex))); } return result; }