1 // 2 // System.Web.Services.Protocols.DiscoveryDocument.cs 3 // 4 // Author: 5 // Dave Bettin (javabettin@yahoo.com) 6 // Tim Coleman (tim@timcoleman.com) 7 // Lluis Sanchez Gual (lluis@ximian.com) 8 // 9 // Copyright (C) Dave Bettin, 2002 10 // Copyright (C) Tim Coleman, 2002 11 // 12 13 // 14 // Permission is hereby granted, free of charge, to any person obtaining 15 // a copy of this software and associated documentation files (the 16 // "Software"), to deal in the Software without restriction, including 17 // without limitation the rights to use, copy, modify, merge, publish, 18 // distribute, sublicense, and/or sell copies of the Software, and to 19 // permit persons to whom the Software is furnished to do so, subject to 20 // the following conditions: 21 // 22 // The above copyright notice and this permission notice shall be 23 // included in all copies or substantial portions of the Software. 24 // 25 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 32 // 33 34 using System.Collections; 35 using System.IO; 36 using System.Xml; 37 using System.Xml.Serialization; 38 39 namespace System.Web.Services.Discovery { 40 [XmlRoot ("discovery", Namespace = "http://schemas.xmlsoap.org/disco/")] 41 public sealed class DiscoveryDocument { 42 43 #region Fields 44 45 public const string Namespace = "http://schemas.xmlsoap.org/disco/"; 46 47 [XmlElement(typeof(ContractReference), Namespace="http://schemas.xmlsoap.org/disco/scl/")] 48 [XmlElement(typeof(DiscoveryDocumentReference))] 49 [XmlElement(typeof(SchemaReference))] 50 internal ArrayList references = new ArrayList(); 51 52 [XmlElement(typeof(SoapBinding), ElementName="soap", Namespace="http://schemas/xmlsoap.org/disco/schema/soap/")] 53 internal ArrayList additionalInfo = new ArrayList(); 54 55 #endregion // Fields 56 57 #region Constructors 58 DiscoveryDocument()59 public DiscoveryDocument () 60 { 61 } 62 63 #endregion // Constructors 64 65 #region Properties 66 67 [XmlIgnore] 68 public IList References { 69 get { return references; } 70 } 71 72 [XmlIgnore] 73 internal IList AdditionalInfo { 74 get { return additionalInfo; } 75 } 76 77 #endregion // Properties 78 79 #region Methods 80 CanRead(XmlReader xmlReader)81 public static bool CanRead (XmlReader xmlReader) 82 { 83 xmlReader.MoveToContent (); 84 return xmlReader.NodeType == XmlNodeType.Element && 85 xmlReader.LocalName == "discovery" && 86 xmlReader.NamespaceURI == Namespace; 87 } 88 Read(Stream stream)89 public static DiscoveryDocument Read (Stream stream) 90 { 91 return Read (new XmlTextReader (stream)); 92 } 93 Read(TextReader textReader)94 public static DiscoveryDocument Read (TextReader textReader) 95 { 96 return Read (new XmlTextReader (textReader)); 97 } 98 Read(XmlReader xmlReader)99 public static DiscoveryDocument Read (XmlReader xmlReader) 100 { 101 DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer(); 102 return (DiscoveryDocument) ser.Deserialize (xmlReader); 103 } 104 Write(Stream stream)105 public void Write (Stream stream) 106 { 107 DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer(); 108 ser.Serialize (stream, this, GetNamespaceList()); 109 } 110 Write(TextWriter textWriter)111 public void Write (TextWriter textWriter) 112 { 113 DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer(); 114 ser.Serialize (textWriter, this, GetNamespaceList()); 115 } 116 Write(XmlWriter xmlWriter)117 public void Write (XmlWriter xmlWriter) 118 { 119 DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer(); 120 ser.Serialize (xmlWriter, this, GetNamespaceList()); 121 } 122 GetNamespaceList()123 XmlSerializerNamespaces GetNamespaceList () 124 { 125 XmlSerializerNamespaces ns = new XmlSerializerNamespaces (); 126 ns.Add ("scl", ContractReference.Namespace); 127 return ns; 128 } 129 130 #endregion // Methods 131 } 132 133 internal class DiscoveryDocumentSerializer : XmlSerializer 134 { Serialize(object o, XmlSerializationWriter writer)135 protected override void Serialize (object o, XmlSerializationWriter writer) 136 { 137 DiscoveryDocumentWriter xsWriter = writer as DiscoveryDocumentWriter; 138 xsWriter.WriteRoot_DiscoveryDocument (o); 139 } 140 Deserialize(XmlSerializationReader reader)141 protected override object Deserialize (XmlSerializationReader reader) 142 { 143 DiscoveryDocumentReader xsReader = reader as DiscoveryDocumentReader; 144 return xsReader.ReadRoot_DiscoveryDocument (); 145 } 146 CreateWriter()147 protected override XmlSerializationWriter CreateWriter () 148 { 149 return new DiscoveryDocumentWriter (); 150 } 151 CreateReader()152 protected override XmlSerializationReader CreateReader () 153 { 154 return new DiscoveryDocumentReader (); 155 } 156 } 157 } 158