DiscoveryDocumentSerializer.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  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.Schema;
  12. using System.Xml.Serialization;
  13. using System.Text;
  14. using System.Collections;
  15. using System.Globalization;
  16. namespace System.Web.Services.Discovery
  17. {
  18. internal class DiscoveryDocumentReader : XmlSerializationReader
  19. {
  20. public object ReadRoot_DiscoveryDocument ()
  21. {
  22. Reader.MoveToContent();
  23. if (Reader.LocalName != "discovery" || Reader.NamespaceURI != "http://schemas.xmlsoap.org/disco/")
  24. throw CreateUnknownNodeException();
  25. return ReadObject_DiscoveryDocument (true, true);
  26. }
  27. public System.Web.Services.Discovery.DiscoveryDocument ReadObject_DiscoveryDocument (bool isNullable, bool checkType)
  28. {
  29. System.Web.Services.Discovery.DiscoveryDocument ob = null;
  30. if (isNullable && ReadNull()) return null;
  31. if (checkType)
  32. {
  33. System.Xml.XmlQualifiedName t = GetXsiType();
  34. if (t != null)
  35. {
  36. if (t.Name != "DiscoveryDocument" || t.Namespace != "http://schemas.xmlsoap.org/disco/")
  37. throw CreateUnknownTypeException(t);
  38. }
  39. }
  40. ob = new System.Web.Services.Discovery.DiscoveryDocument ();
  41. Reader.MoveToElement();
  42. while (Reader.MoveToNextAttribute())
  43. {
  44. if (IsXmlnsAttribute (Reader.Name)) {
  45. }
  46. else {
  47. UnknownNode (ob);
  48. }
  49. }
  50. Reader.MoveToElement();
  51. if (Reader.IsEmptyElement) {
  52. Reader.Skip ();
  53. return ob;
  54. }
  55. Reader.ReadStartElement();
  56. Reader.MoveToContent();
  57. bool b0=false, b1=false;
  58. System.Collections.ArrayList o3 = null;
  59. System.Collections.ArrayList o5 = null;
  60. int n2=0, n4=0;
  61. while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
  62. {
  63. if (Reader.NodeType == System.Xml.XmlNodeType.Element)
  64. {
  65. if (Reader.LocalName == "discoveryRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/" && !b0) {
  66. if (o3 == null)
  67. o3 = new System.Collections.ArrayList();
  68. o3.Add (ReadObject_DiscoveryDocumentReference (false, true));
  69. n2++;
  70. }
  71. else if (Reader.LocalName == "soap" && Reader.NamespaceURI == "http://schemas/xmlsoap.org/disco/schema/soap/" && !b1) {
  72. if (o5 == null)
  73. o5 = new System.Collections.ArrayList();
  74. o5.Add (ReadObject_SoapBinding (false, true));
  75. n4++;
  76. }
  77. else if (Reader.LocalName == "contractRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/scl/" && !b0) {
  78. if (o3 == null)
  79. o3 = new System.Collections.ArrayList();
  80. o3.Add (ReadObject_ContractReference (false, true));
  81. n2++;
  82. }
  83. else if (Reader.LocalName == "schemaRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/" && !b0) {
  84. if (o3 == null)
  85. o3 = new System.Collections.ArrayList();
  86. o3.Add (ReadObject_SchemaReference (false, true));
  87. n2++;
  88. }
  89. else {
  90. UnknownNode (ob);
  91. }
  92. }
  93. else
  94. UnknownNode(ob);
  95. Reader.MoveToContent();
  96. }
  97. ob.@references = o3;
  98. ob.@additionalInfo = o5;
  99. ReadEndElement();
  100. return ob;
  101. }
  102. public System.Web.Services.Discovery.DiscoveryDocumentReference ReadObject_DiscoveryDocumentReference (bool isNullable, bool checkType)
  103. {
  104. System.Web.Services.Discovery.DiscoveryDocumentReference ob = null;
  105. if (isNullable && ReadNull()) return null;
  106. if (checkType)
  107. {
  108. System.Xml.XmlQualifiedName t = GetXsiType();
  109. if (t != null)
  110. {
  111. if (t.Name != "DiscoveryDocumentReference" || t.Namespace != "http://schemas.xmlsoap.org/disco/")
  112. throw CreateUnknownTypeException(t);
  113. }
  114. }
  115. ob = new System.Web.Services.Discovery.DiscoveryDocumentReference ();
  116. Reader.MoveToElement();
  117. while (Reader.MoveToNextAttribute())
  118. {
  119. if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") {
  120. ob.@Ref = Reader.Value;
  121. }
  122. else if (IsXmlnsAttribute (Reader.Name)) {
  123. }
  124. else {
  125. UnknownNode (ob);
  126. }
  127. }
  128. Reader.MoveToElement();
  129. if (Reader.IsEmptyElement) {
  130. Reader.Skip ();
  131. return ob;
  132. }
  133. Reader.ReadStartElement();
  134. Reader.MoveToContent();
  135. while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
  136. {
  137. if (Reader.NodeType == System.Xml.XmlNodeType.Element)
  138. {
  139. UnknownNode (ob);
  140. }
  141. else
  142. UnknownNode(ob);
  143. Reader.MoveToContent();
  144. }
  145. ReadEndElement();
  146. return ob;
  147. }
  148. public System.Web.Services.Discovery.SoapBinding ReadObject_SoapBinding (bool isNullable, bool checkType)
  149. {
  150. System.Web.Services.Discovery.SoapBinding ob = null;
  151. if (isNullable && ReadNull()) return null;
  152. if (checkType)
  153. {
  154. System.Xml.XmlQualifiedName t = GetXsiType();
  155. if (t != null)
  156. {
  157. if (t.Name != "SoapBinding" || t.Namespace != "http://schemas/xmlsoap.org/disco/schema/soap/")
  158. throw CreateUnknownTypeException(t);
  159. }
  160. }
  161. ob = new System.Web.Services.Discovery.SoapBinding ();
  162. Reader.MoveToElement();
  163. while (Reader.MoveToNextAttribute())
  164. {
  165. if (Reader.LocalName == "binding" && Reader.NamespaceURI == "") {
  166. ob.@Binding = ToXmlQualifiedName (Reader.Value);
  167. }
  168. else if (Reader.LocalName == "address" && Reader.NamespaceURI == "") {
  169. ob.@Address = Reader.Value;
  170. }
  171. else if (IsXmlnsAttribute (Reader.Name)) {
  172. }
  173. else {
  174. UnknownNode (ob);
  175. }
  176. }
  177. Reader.MoveToElement();
  178. if (Reader.IsEmptyElement) {
  179. Reader.Skip ();
  180. return ob;
  181. }
  182. Reader.ReadStartElement();
  183. Reader.MoveToContent();
  184. while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
  185. {
  186. if (Reader.NodeType == System.Xml.XmlNodeType.Element)
  187. {
  188. UnknownNode (ob);
  189. }
  190. else
  191. UnknownNode(ob);
  192. Reader.MoveToContent();
  193. }
  194. ReadEndElement();
  195. return ob;
  196. }
  197. public System.Web.Services.Discovery.ContractReference ReadObject_ContractReference (bool isNullable, bool checkType)
  198. {
  199. System.Web.Services.Discovery.ContractReference ob = null;
  200. if (isNullable && ReadNull()) return null;
  201. if (checkType)
  202. {
  203. System.Xml.XmlQualifiedName t = GetXsiType();
  204. if (t != null)
  205. {
  206. if (t.Name != "ContractReference" || t.Namespace != "http://schemas.xmlsoap.org/disco/scl/")
  207. throw CreateUnknownTypeException(t);
  208. }
  209. }
  210. ob = new System.Web.Services.Discovery.ContractReference ();
  211. Reader.MoveToElement();
  212. while (Reader.MoveToNextAttribute())
  213. {
  214. if (Reader.LocalName == "docRef" && Reader.NamespaceURI == "") {
  215. ob.@DocRef = Reader.Value;
  216. }
  217. else if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") {
  218. ob.@Ref = Reader.Value;
  219. }
  220. else if (IsXmlnsAttribute (Reader.Name)) {
  221. }
  222. else {
  223. UnknownNode (ob);
  224. }
  225. }
  226. Reader.MoveToElement();
  227. if (Reader.IsEmptyElement) {
  228. Reader.Skip ();
  229. return ob;
  230. }
  231. Reader.ReadStartElement();
  232. Reader.MoveToContent();
  233. while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
  234. {
  235. if (Reader.NodeType == System.Xml.XmlNodeType.Element)
  236. {
  237. UnknownNode (ob);
  238. }
  239. else
  240. UnknownNode(ob);
  241. Reader.MoveToContent();
  242. }
  243. ReadEndElement();
  244. return ob;
  245. }
  246. public System.Web.Services.Discovery.SchemaReference ReadObject_SchemaReference (bool isNullable, bool checkType)
  247. {
  248. System.Web.Services.Discovery.SchemaReference ob = null;
  249. if (isNullable && ReadNull()) return null;
  250. if (checkType)
  251. {
  252. System.Xml.XmlQualifiedName t = GetXsiType();
  253. if (t != null)
  254. {
  255. if (t.Name != "SchemaReference" || t.Namespace != "http://schemas/xmlsoap.org/disco/schema/")
  256. throw CreateUnknownTypeException(t);
  257. }
  258. }
  259. ob = new System.Web.Services.Discovery.SchemaReference ();
  260. Reader.MoveToElement();
  261. while (Reader.MoveToNextAttribute())
  262. {
  263. if (Reader.LocalName == "targetNamespace" && Reader.NamespaceURI == "") {
  264. ob.@TargetNamespace = Reader.Value;
  265. }
  266. else if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") {
  267. ob.@Ref = Reader.Value;
  268. }
  269. else if (IsXmlnsAttribute (Reader.Name)) {
  270. }
  271. else {
  272. UnknownNode (ob);
  273. }
  274. }
  275. Reader.MoveToElement();
  276. if (Reader.IsEmptyElement) {
  277. Reader.Skip ();
  278. return ob;
  279. }
  280. Reader.ReadStartElement();
  281. Reader.MoveToContent();
  282. while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
  283. {
  284. if (Reader.NodeType == System.Xml.XmlNodeType.Element)
  285. {
  286. UnknownNode (ob);
  287. }
  288. else
  289. UnknownNode(ob);
  290. Reader.MoveToContent();
  291. }
  292. ReadEndElement();
  293. return ob;
  294. }
  295. protected override void InitCallbacks ()
  296. {
  297. }
  298. protected override void InitIDs ()
  299. {
  300. }
  301. }
  302. internal class DiscoveryDocumentWriter : XmlSerializationWriter
  303. {
  304. public void WriteRoot_DiscoveryDocument (object o)
  305. {
  306. WriteStartDocument ();
  307. System.Web.Services.Discovery.DiscoveryDocument ob = (System.Web.Services.Discovery.DiscoveryDocument) o;
  308. TopLevelElement ();
  309. WriteObject_DiscoveryDocument (ob, "discovery", "http://schemas.xmlsoap.org/disco/", true, false, true);
  310. }
  311. void WriteObject_DiscoveryDocument (System.Web.Services.Discovery.DiscoveryDocument 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("DiscoveryDocument", "http://schemas.xmlsoap.org/disco/");
  323. if (ob.@references != null) {
  324. for (int n6 = 0; n6 < [email protected]; n6++) {
  325. if (ob.@references[n6] == null) { }
  326. else if (ob.@references[n6].GetType() == typeof(System.Web.Services.Discovery.SchemaReference)) {
  327. WriteObject_SchemaReference (((System.Web.Services.Discovery.SchemaReference) ob.@references[n6]), "schemaRef", "http://schemas.xmlsoap.org/disco/", false, false, true);
  328. }
  329. else if (ob.@references[n6].GetType() == typeof(System.Web.Services.Discovery.DiscoveryDocumentReference)) {
  330. WriteObject_DiscoveryDocumentReference (((System.Web.Services.Discovery.DiscoveryDocumentReference) ob.@references[n6]), "discoveryRef", "http://schemas.xmlsoap.org/disco/", false, false, true);
  331. }
  332. else if (ob.@references[n6].GetType() == typeof(System.Web.Services.Discovery.ContractReference)) {
  333. WriteObject_ContractReference (((System.Web.Services.Discovery.ContractReference) ob.@references[n6]), "contractRef", "http://schemas.xmlsoap.org/disco/scl/", false, false, true);
  334. }
  335. else throw CreateUnknownTypeException (ob.@references[n6]);
  336. }
  337. }
  338. if (ob.@additionalInfo != null) {
  339. for (int n7 = 0; n7 < [email protected]; n7++) {
  340. WriteObject_SoapBinding (((System.Web.Services.Discovery.SoapBinding) ob.@additionalInfo[n7]), "soap", "http://schemas/xmlsoap.org/disco/schema/soap/", false, false, true);
  341. }
  342. }
  343. if (writeWrappingElem) WriteEndElement (ob);
  344. }
  345. void WriteObject_SchemaReference (System.Web.Services.Discovery.SchemaReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
  346. {
  347. if (ob == null)
  348. {
  349. if (isNullable)
  350. WriteNullTagLiteral(element, namesp);
  351. return;
  352. }
  353. if (writeWrappingElem) {
  354. WriteStartElement (element, namesp, ob);
  355. }
  356. if (needType) WriteXsiType("SchemaReference", "http://schemas/xmlsoap.org/disco/schema/");
  357. if (ob.@TargetNamespace != "") {
  358. WriteAttribute ("targetNamespace", "", ob.@TargetNamespace);
  359. }
  360. WriteAttribute ("ref", "", ob.@Ref);
  361. if (writeWrappingElem) WriteEndElement (ob);
  362. }
  363. void WriteObject_DiscoveryDocumentReference (System.Web.Services.Discovery.DiscoveryDocumentReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
  364. {
  365. if (ob == null)
  366. {
  367. if (isNullable)
  368. WriteNullTagLiteral(element, namesp);
  369. return;
  370. }
  371. if (writeWrappingElem) {
  372. WriteStartElement (element, namesp, ob);
  373. }
  374. if (needType) WriteXsiType("DiscoveryDocumentReference", "http://schemas.xmlsoap.org/disco/");
  375. WriteAttribute ("ref", "", ob.@Ref);
  376. if (writeWrappingElem) WriteEndElement (ob);
  377. }
  378. void WriteObject_ContractReference (System.Web.Services.Discovery.ContractReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
  379. {
  380. if (ob == null)
  381. {
  382. if (isNullable)
  383. WriteNullTagLiteral(element, namesp);
  384. return;
  385. }
  386. if (writeWrappingElem) {
  387. WriteStartElement (element, namesp, ob);
  388. }
  389. if (needType) WriteXsiType("ContractReference", "http://schemas.xmlsoap.org/disco/scl/");
  390. WriteAttribute ("docRef", "", ob.@DocRef);
  391. WriteAttribute ("ref", "", ob.@Ref);
  392. if (writeWrappingElem) WriteEndElement (ob);
  393. }
  394. void WriteObject_SoapBinding (System.Web.Services.Discovery.SoapBinding ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
  395. {
  396. if (ob == null)
  397. {
  398. if (isNullable)
  399. WriteNullTagLiteral(element, namesp);
  400. return;
  401. }
  402. if (writeWrappingElem) {
  403. WriteStartElement (element, namesp, ob);
  404. }
  405. if (needType) WriteXsiType("SoapBinding", "http://schemas/xmlsoap.org/disco/schema/soap/");
  406. WriteAttribute ("binding", "", FromXmlQualifiedName (ob.@Binding));
  407. WriteAttribute ("address", "", ob.@Address);
  408. if (writeWrappingElem) WriteEndElement (ob);
  409. }
  410. protected override void InitCallbacks ()
  411. {
  412. }
  413. }
  414. }