/// <summary> /// Resolves metadata from the specified file. /// </summary> /// <param name="fileInfo">The file information.</param> /// <returns>A list of metadata sections.</returns> public IEnumerable <MetadataSection> Resolve(FileInfo fileInfo) { using (FileStream fileStream = fileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.Read)) { using (XmlReader reader = XmlReader.Create(fileStream)) { MetadataFileType type = DetermineFileType(reader); switch (type) { case MetadataFileType.Wsdl: return(LoadAsWsdl(reader, fileInfo.FullName)); case MetadataFileType.Xsd: return(LoadAsXmlSchema(reader, fileInfo.FullName)); case MetadataFileType.Policy: return(LoadAsPolicy(reader, fileInfo.FullName)); case MetadataFileType.Epr: return(LoadAsEpr(reader, fileInfo.FullName)); case MetadataFileType.UnknownXml: return(LoadAsUnknownXml(reader, fileInfo.FullName)); } throw new MetadataDiscoveryException("The file '{0}' does not appear to be an XML metadata file."); } } }
internal async Task LoadFromStreamAsync(Stream stream, string uri, string basePath, CancellationToken cancellationToken) { using (var reader = XmlNS.XmlReader.Create(stream, new XmlNS.XmlReaderSettings() { XmlResolver = null, DtdProcessing = XmlNS.DtdProcessing.Ignore })) { MetadataFileType fileType = DetermineFileType(reader); switch (fileType) { case MetadataFileType.Xsd: await LoadAsXmlSchemaAsync(reader, uri, basePath, cancellationToken).ConfigureAwait(false); break; case MetadataFileType.Wsdl: await LoadAsWsdlAsync(reader, uri, basePath, cancellationToken).ConfigureAwait(false); break; case MetadataFileType.Policy: LoadAsPolicy(reader); break; case MetadataFileType.Epr: await LoadAsEPRAsync(reader, cancellationToken).ConfigureAwait(false); break; case MetadataFileType.UnknownXml: LoadAsUnknownXml(reader); break; default: throw new MetadataExchangeException(MetadataResources.ErrNotXmlMetadataFileFormat, uri); } } }
private static Edmx Load(Edmx edmx, MetadataFileType fileType, Stream metadataStream) { switch (fileType) { case MetadataFileType.ConceptualModel: edmx.Runtimes.First().ConceptualModels.ConceptualSchema = ConceptualSchema.Load(metadataStream); return(edmx); case MetadataFileType.StorageModel: edmx.Runtimes.First().StorageModels.StorageSchema = StorageSchema.Load(metadataStream); return(edmx); case MetadataFileType.Mapping: edmx.Runtimes.First().Mappings.Mapping = Mapping.Load(metadataStream); return(edmx); case MetadataFileType.Edmx: return(Load(metadataStream)); default: throw new ArgumentException(String.Format("The fileType '{0}' must represent an edmx, csdl, ssdl or msl file.", fileType)); } }