DiscoveryDocumentSerializer.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. //
  2. // System.Web.Services.Protocols.DiscoveryDocumentSerializer.cs
  3. //
  4. // Author:
  5. // Lluis Sanchez Gual ([email protected])
  6. //
  7. // Copyright (C) Ximian,Inc., 2003
  8. //
  9. using System;
  10. using System.Xml;
  11. using System.Xml.Serialization;
  12. using System.Text;
  13. using System.Collections;
  14. using System.Globalization;
  15. namespace System.Web.Services.Discovery
  16. {
  17. internal class DiscoveryDocumentReader : XmlSerializationReader
  18. {
  19. public System.Web.Services.Discovery.DiscoveryDocument ReadTree ()
  20. {
  21. Reader.MoveToContent();
  22. return ReadObject_DiscoveryDocument (true, true);
  23. }
  24. public System.Web.Services.Discovery.DiscoveryDocument ReadObject_DiscoveryDocument (bool isNullable, bool checkType)
  25. {
  26. System.Web.Services.Discovery.DiscoveryDocument ob = null;
  27. if (isNullable && ReadNull()) return null;
  28. if (checkType)
  29. {
  30. System.Xml.XmlQualifiedName t = GetXsiType();
  31. if (t != null)
  32. {
  33. if (t.Name != "DiscoveryDocument" || t.Namespace != "http://schemas.xmlsoap.org/disco/")
  34. throw CreateUnknownTypeException(t);
  35. }
  36. }
  37. ob = new System.Web.Services.Discovery.DiscoveryDocument ();
  38. Reader.MoveToElement();
  39. while (Reader.MoveToNextAttribute())
  40. {
  41. if (IsXmlnsAttribute (Reader.Name)) {
  42. }
  43. else {
  44. UnknownNode (ob);
  45. }
  46. }
  47. Reader.MoveToElement();
  48. if (Reader.IsEmptyElement) {
  49. Reader.Skip ();
  50. return ob;
  51. }
  52. Reader.ReadStartElement();
  53. Reader.MoveToContent();
  54. bool b0=false;
  55. System.Collections.ArrayList o2 = null;
  56. int n1=0;
  57. while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
  58. {
  59. if (Reader.NodeType == System.Xml.XmlNodeType.Element)
  60. {
  61. if (Reader.LocalName == "discoveryRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/" && !b0) {
  62. if (o2 == null)
  63. o2 = new System.Collections.ArrayList();
  64. o2.Add (ReadObject_DiscoveryDocumentReference (false, true));
  65. n1++;
  66. }
  67. else if (Reader.LocalName == "contractRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/scl/" && !b0) {
  68. if (o2 == null)
  69. o2 = new System.Collections.ArrayList();
  70. o2.Add (ReadObject_ContractReference (false, true));
  71. n1++;
  72. }
  73. else if (Reader.LocalName == "schemaRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/" && !b0) {
  74. if (o2 == null)
  75. o2 = new System.Collections.ArrayList();
  76. o2.Add (ReadObject_SchemaReference (false, true));
  77. n1++;
  78. }
  79. else {
  80. UnknownNode (ob);
  81. }
  82. }
  83. else
  84. UnknownNode(ob);
  85. Reader.MoveToContent();
  86. }
  87. ob.references = o2;
  88. ReadEndElement();
  89. return ob;
  90. }
  91. public System.Web.Services.Discovery.DiscoveryDocumentReference ReadObject_DiscoveryDocumentReference (bool isNullable, bool checkType)
  92. {
  93. System.Web.Services.Discovery.DiscoveryDocumentReference ob = null;
  94. if (isNullable && ReadNull()) return null;
  95. if (checkType)
  96. {
  97. System.Xml.XmlQualifiedName t = GetXsiType();
  98. if (t != null)
  99. {
  100. if (t.Name != "DiscoveryDocumentReference" || t.Namespace != "http://schemas.xmlsoap.org/disco/")
  101. throw CreateUnknownTypeException(t);
  102. }
  103. }
  104. ob = new System.Web.Services.Discovery.DiscoveryDocumentReference ();
  105. Reader.MoveToElement();
  106. while (Reader.MoveToNextAttribute())
  107. {
  108. if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") {
  109. ob.Ref = Reader.Value;
  110. }
  111. else if (IsXmlnsAttribute (Reader.Name)) {
  112. }
  113. else {
  114. UnknownNode (ob);
  115. }
  116. }
  117. Reader.MoveToElement();
  118. if (Reader.IsEmptyElement) {
  119. Reader.Skip ();
  120. return ob;
  121. }
  122. Reader.ReadStartElement();
  123. Reader.MoveToContent();
  124. while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
  125. {
  126. if (Reader.NodeType == System.Xml.XmlNodeType.Element)
  127. {
  128. UnknownNode (ob);
  129. }
  130. else
  131. UnknownNode(ob);
  132. Reader.MoveToContent();
  133. }
  134. ReadEndElement();
  135. return ob;
  136. }
  137. public System.Web.Services.Discovery.ContractReference ReadObject_ContractReference (bool isNullable, bool checkType)
  138. {
  139. System.Web.Services.Discovery.ContractReference ob = null;
  140. if (isNullable && ReadNull()) return null;
  141. if (checkType)
  142. {
  143. System.Xml.XmlQualifiedName t = GetXsiType();
  144. if (t != null)
  145. {
  146. if (t.Name != "ContractReference" || t.Namespace != "http://schemas.xmlsoap.org/disco/scl/")
  147. throw CreateUnknownTypeException(t);
  148. }
  149. }
  150. ob = new System.Web.Services.Discovery.ContractReference ();
  151. Reader.MoveToElement();
  152. while (Reader.MoveToNextAttribute())
  153. {
  154. if (Reader.LocalName == "docRef" && Reader.NamespaceURI == "") {
  155. ob.DocRef = Reader.Value;
  156. }
  157. else if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") {
  158. ob.Ref = Reader.Value;
  159. }
  160. else if (IsXmlnsAttribute (Reader.Name)) {
  161. }
  162. else {
  163. UnknownNode (ob);
  164. }
  165. }
  166. Reader.MoveToElement();
  167. if (Reader.IsEmptyElement) {
  168. Reader.Skip ();
  169. return ob;
  170. }
  171. Reader.ReadStartElement();
  172. Reader.MoveToContent();
  173. while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
  174. {
  175. if (Reader.NodeType == System.Xml.XmlNodeType.Element)
  176. {
  177. UnknownNode (ob);
  178. }
  179. else
  180. UnknownNode(ob);
  181. Reader.MoveToContent();
  182. }
  183. ReadEndElement();
  184. return ob;
  185. }
  186. public System.Web.Services.Discovery.SchemaReference ReadObject_SchemaReference (bool isNullable, bool checkType)
  187. {
  188. System.Web.Services.Discovery.SchemaReference ob = null;
  189. if (isNullable && ReadNull()) return null;
  190. if (checkType)
  191. {
  192. System.Xml.XmlQualifiedName t = GetXsiType();
  193. if (t != null)
  194. {
  195. if (t.Name != "SchemaReference" || t.Namespace != "http://schemas/xmlsoap.org/disco/schema/")
  196. throw CreateUnknownTypeException(t);
  197. }
  198. }
  199. ob = new System.Web.Services.Discovery.SchemaReference ();
  200. Reader.MoveToElement();
  201. while (Reader.MoveToNextAttribute())
  202. {
  203. if (Reader.LocalName == "targetNamespace" && Reader.NamespaceURI == "") {
  204. ob.TargetNamespace = Reader.Value;
  205. }
  206. else if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") {
  207. ob.Ref = Reader.Value;
  208. }
  209. else if (IsXmlnsAttribute (Reader.Name)) {
  210. }
  211. else {
  212. UnknownNode (ob);
  213. }
  214. }
  215. Reader.MoveToElement();
  216. if (Reader.IsEmptyElement) {
  217. Reader.Skip ();
  218. return ob;
  219. }
  220. Reader.ReadStartElement();
  221. Reader.MoveToContent();
  222. while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
  223. {
  224. if (Reader.NodeType == System.Xml.XmlNodeType.Element)
  225. {
  226. UnknownNode (ob);
  227. }
  228. else
  229. UnknownNode(ob);
  230. Reader.MoveToContent();
  231. }
  232. ReadEndElement();
  233. return ob;
  234. }
  235. protected override void InitCallbacks ()
  236. {
  237. }
  238. protected override void InitIDs ()
  239. {
  240. }
  241. }
  242. internal class DiscoveryDocumentWriter : XmlSerializationWriter
  243. {
  244. public void WriteTree (System.Web.Services.Discovery.DiscoveryDocument ob)
  245. {
  246. WriteStartDocument ();
  247. TopLevelElement ();
  248. WriteObject_DiscoveryDocument (ob, "discovery", "http://schemas.xmlsoap.org/disco/", true, false, true);
  249. }
  250. void WriteObject_DiscoveryDocument (System.Web.Services.Discovery.DiscoveryDocument ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
  251. {
  252. if (ob == null)
  253. {
  254. if (isNullable)
  255. WriteNullTagLiteral(element, namesp);
  256. return;
  257. }
  258. if (writeWrappingElem) {
  259. WriteStartElement (element, namesp, ob);
  260. }
  261. if (needType) WriteXsiType("DiscoveryDocument", "http://schemas.xmlsoap.org/disco/");
  262. if (ob.references != null) {
  263. for (int n3 = 0; n3 < ob.references.Count; n3++) {
  264. if (ob.references[n3] is System.Web.Services.Discovery.SchemaReference) {
  265. WriteObject_SchemaReference (((System.Web.Services.Discovery.SchemaReference) ob.references[n3]), "schemaRef", "http://schemas.xmlsoap.org/disco/", false, false, true);
  266. }
  267. else if (ob.references[n3] is System.Web.Services.Discovery.DiscoveryDocumentReference) {
  268. WriteObject_DiscoveryDocumentReference (((System.Web.Services.Discovery.DiscoveryDocumentReference) ob.references[n3]), "discoveryRef", "http://schemas.xmlsoap.org/disco/", false, false, true);
  269. }
  270. else if (ob.references[n3] is System.Web.Services.Discovery.ContractReference) {
  271. WriteObject_ContractReference (((System.Web.Services.Discovery.ContractReference) ob.references[n3]), "contractRef", "http://schemas.xmlsoap.org/disco/scl/", false, false, true);
  272. }
  273. else if (ob.references[n3] != null) throw CreateUnknownTypeException (ob.references[n3]);
  274. }
  275. }
  276. if (writeWrappingElem) WriteEndElement (ob);
  277. }
  278. void WriteObject_SchemaReference (System.Web.Services.Discovery.SchemaReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
  279. {
  280. if (ob == null)
  281. {
  282. if (isNullable)
  283. WriteNullTagLiteral(element, namesp);
  284. return;
  285. }
  286. if (writeWrappingElem) {
  287. WriteStartElement (element, namesp, ob);
  288. }
  289. if (needType) WriteXsiType("SchemaReference", "http://schemas/xmlsoap.org/disco/schema/");
  290. if (ob.TargetNamespace != "") {
  291. WriteAttribute ("targetNamespace", "", ob.TargetNamespace);
  292. }
  293. WriteAttribute ("ref", "", ob.Ref);
  294. if (writeWrappingElem) WriteEndElement (ob);
  295. }
  296. void WriteObject_DiscoveryDocumentReference (System.Web.Services.Discovery.DiscoveryDocumentReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
  297. {
  298. if (ob == null)
  299. {
  300. if (isNullable)
  301. WriteNullTagLiteral(element, namesp);
  302. return;
  303. }
  304. if (writeWrappingElem) {
  305. WriteStartElement (element, namesp, ob);
  306. }
  307. if (needType) WriteXsiType("DiscoveryDocumentReference", "http://schemas.xmlsoap.org/disco/");
  308. WriteAttribute ("ref", "", ob.Ref);
  309. if (writeWrappingElem) WriteEndElement (ob);
  310. }
  311. void WriteObject_ContractReference (System.Web.Services.Discovery.ContractReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
  312. {
  313. if (ob == null)
  314. {
  315. if (isNullable)
  316. WriteNullTagLiteral(element, namesp);
  317. return;
  318. }
  319. if (writeWrappingElem) {
  320. WriteStartElement (element, namesp, ob);
  321. }
  322. if (needType) WriteXsiType("ContractReference", "http://schemas.xmlsoap.org/disco/scl/");
  323. WriteAttribute ("docRef", "", ob.DocRef);
  324. WriteAttribute ("ref", "", ob.Ref);
  325. if (writeWrappingElem) WriteEndElement (ob);
  326. }
  327. protected override void InitCallbacks ()
  328. {
  329. }
  330. }
  331. }