e2cfc3f9cb89856e53cbd10ec9579e9b88ca1ca0
[mono.git] / mcs / class / System.Web.Services / System.Web.Services.Discovery / DiscoveryDocumentSerializer.cs
1 // 
2 // System.Web.Services.Protocols.DiscoveryDocumentSerializer.cs
3 //
4 // Author:
5 //   Lluis Sanchez Gual (lluis@ximian.com)
6 //
7 // Copyright (C) Ximian,Inc., 2003
8 //
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30
31 using System;
32 using System.Xml;
33 using System.Xml.Schema;
34 using System.Xml.Serialization;
35 using System.Text;
36 using System.Collections;
37 using System.Globalization;
38
39 namespace System.Web.Services.Discovery
40 {
41         internal class DiscoveryDocumentReader : XmlSerializationReader
42         {
43                 public object ReadRoot_DiscoveryDocument ()
44                 {
45                         Reader.MoveToContent();
46                         if (Reader.LocalName != "discovery" || Reader.NamespaceURI != "http://schemas.xmlsoap.org/disco/")
47                                 throw CreateUnknownNodeException();
48                         return ReadObject_DiscoveryDocument (true, true);
49                 }
50
51                 public System.Web.Services.Discovery.DiscoveryDocument ReadObject_DiscoveryDocument (bool isNullable, bool checkType)
52                 {
53                         System.Web.Services.Discovery.DiscoveryDocument ob = null;
54                         if (isNullable && ReadNull()) return null;
55
56                         if (checkType) 
57                         {
58                                 System.Xml.XmlQualifiedName t = GetXsiType();
59                                 if (t != null) 
60                                 {
61                                         if (t.Name != "DiscoveryDocument" || t.Namespace != "http://schemas.xmlsoap.org/disco/")
62                                                 throw CreateUnknownTypeException(t);
63                                 }
64                         }
65
66                         ob = new System.Web.Services.Discovery.DiscoveryDocument ();
67
68                         Reader.MoveToElement();
69
70                         while (Reader.MoveToNextAttribute())
71                         {
72                                 if (IsXmlnsAttribute (Reader.Name)) {
73                                 }
74                                 else {
75                                         UnknownNode (ob);
76                                 }
77                         }
78
79                         Reader.MoveToElement();
80                         if (Reader.IsEmptyElement) {
81                                 Reader.Skip ();
82                                 return ob;
83                         }
84
85                         Reader.ReadStartElement();
86                         Reader.MoveToContent();
87
88                         bool b0=false, b1=false;
89
90                         System.Collections.ArrayList o3 = null;
91                         System.Collections.ArrayList o5 = null;
92                         int n2=0, n4=0;
93
94                         while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
95                         {
96                                 if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
97                                 {
98                                         if (Reader.LocalName == "discoveryRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/" && !b0) {
99                                                 if (o3 == null)
100                                                         o3 = new System.Collections.ArrayList();
101                                                 o3.Add (ReadObject_DiscoveryDocumentReference (false, true));
102                                                 n2++;
103                                         }
104                                         else if (Reader.LocalName == "soap" && Reader.NamespaceURI == "http://schemas/xmlsoap.org/disco/schema/soap/" && !b1) {
105                                                 if (o5 == null)
106                                                         o5 = new System.Collections.ArrayList();
107                                                 o5.Add (ReadObject_SoapBinding (false, true));
108                                                 n4++;
109                                         }
110                                         else if (Reader.LocalName == "contractRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/scl/" && !b0) {
111                                                 if (o3 == null)
112                                                         o3 = new System.Collections.ArrayList();
113                                                 o3.Add (ReadObject_ContractReference (false, true));
114                                                 n2++;
115                                         }
116                                         else if (Reader.LocalName == "schemaRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/" && !b0) {
117                                                 if (o3 == null)
118                                                         o3 = new System.Collections.ArrayList();
119                                                 o3.Add (ReadObject_SchemaReference (false, true));
120                                                 n2++;
121                                         }
122                                         else {
123                                                 UnknownNode (ob);
124                                         }
125                                 }
126                                 else
127                                         UnknownNode(ob);
128
129                                 Reader.MoveToContent();
130                         }
131
132                         ob.@references = o3;
133                         ob.@additionalInfo = o5;
134
135                         ReadEndElement();
136
137                         return ob;
138                 }
139
140                 public System.Web.Services.Discovery.DiscoveryDocumentReference ReadObject_DiscoveryDocumentReference (bool isNullable, bool checkType)
141                 {
142                         System.Web.Services.Discovery.DiscoveryDocumentReference ob = null;
143                         if (isNullable && ReadNull()) return null;
144
145                         if (checkType) 
146                         {
147                                 System.Xml.XmlQualifiedName t = GetXsiType();
148                                 if (t != null) 
149                                 {
150                                         if (t.Name != "DiscoveryDocumentReference" || t.Namespace != "http://schemas.xmlsoap.org/disco/")
151                                                 throw CreateUnknownTypeException(t);
152                                 }
153                         }
154
155                         ob = new System.Web.Services.Discovery.DiscoveryDocumentReference ();
156
157                         Reader.MoveToElement();
158
159                         while (Reader.MoveToNextAttribute())
160                         {
161                                 if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") {
162                                         ob.@Ref = Reader.Value;
163                                 }
164                                 else if (IsXmlnsAttribute (Reader.Name)) {
165                                 }
166                                 else {
167                                         UnknownNode (ob);
168                                 }
169                         }
170
171                         Reader.MoveToElement();
172                         if (Reader.IsEmptyElement) {
173                                 Reader.Skip ();
174                                 return ob;
175                         }
176
177                         Reader.ReadStartElement();
178                         Reader.MoveToContent();
179
180                         while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
181                         {
182                                 if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
183                                 {
184                                         UnknownNode (ob);
185                                 }
186                                 else
187                                         UnknownNode(ob);
188
189                                 Reader.MoveToContent();
190                         }
191
192                         ReadEndElement();
193
194                         return ob;
195                 }
196
197                 public System.Web.Services.Discovery.SoapBinding ReadObject_SoapBinding (bool isNullable, bool checkType)
198                 {
199                         System.Web.Services.Discovery.SoapBinding ob = null;
200                         if (isNullable && ReadNull()) return null;
201
202                         if (checkType) 
203                         {
204                                 System.Xml.XmlQualifiedName t = GetXsiType();
205                                 if (t != null) 
206                                 {
207                                         if (t.Name != "SoapBinding" || t.Namespace != "http://schemas/xmlsoap.org/disco/schema/soap/")
208                                                 throw CreateUnknownTypeException(t);
209                                 }
210                         }
211
212                         ob = new System.Web.Services.Discovery.SoapBinding ();
213
214                         Reader.MoveToElement();
215
216                         while (Reader.MoveToNextAttribute())
217                         {
218                                 if (Reader.LocalName == "binding" && Reader.NamespaceURI == "") {
219                                         ob.@Binding = ToXmlQualifiedName (Reader.Value);
220                                 }
221                                 else if (Reader.LocalName == "address" && Reader.NamespaceURI == "") {
222                                         ob.@Address = Reader.Value;
223                                 }
224                                 else if (IsXmlnsAttribute (Reader.Name)) {
225                                 }
226                                 else {
227                                         UnknownNode (ob);
228                                 }
229                         }
230
231                         Reader.MoveToElement();
232                         if (Reader.IsEmptyElement) {
233                                 Reader.Skip ();
234                                 return ob;
235                         }
236
237                         Reader.ReadStartElement();
238                         Reader.MoveToContent();
239
240                         while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
241                         {
242                                 if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
243                                 {
244                                         UnknownNode (ob);
245                                 }
246                                 else
247                                         UnknownNode(ob);
248
249                                 Reader.MoveToContent();
250                         }
251
252                         ReadEndElement();
253
254                         return ob;
255                 }
256
257                 public System.Web.Services.Discovery.ContractReference ReadObject_ContractReference (bool isNullable, bool checkType)
258                 {
259                         System.Web.Services.Discovery.ContractReference ob = null;
260                         if (isNullable && ReadNull()) return null;
261
262                         if (checkType) 
263                         {
264                                 System.Xml.XmlQualifiedName t = GetXsiType();
265                                 if (t != null) 
266                                 {
267                                         if (t.Name != "ContractReference" || t.Namespace != "http://schemas.xmlsoap.org/disco/scl/")
268                                                 throw CreateUnknownTypeException(t);
269                                 }
270                         }
271
272                         ob = new System.Web.Services.Discovery.ContractReference ();
273
274                         Reader.MoveToElement();
275
276                         while (Reader.MoveToNextAttribute())
277                         {
278                                 if (Reader.LocalName == "docRef" && Reader.NamespaceURI == "") {
279                                         ob.@DocRef = Reader.Value;
280                                 }
281                                 else if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") {
282                                         ob.@Ref = Reader.Value;
283                                 }
284                                 else if (IsXmlnsAttribute (Reader.Name)) {
285                                 }
286                                 else {
287                                         UnknownNode (ob);
288                                 }
289                         }
290
291                         Reader.MoveToElement();
292                         if (Reader.IsEmptyElement) {
293                                 Reader.Skip ();
294                                 return ob;
295                         }
296
297                         Reader.ReadStartElement();
298                         Reader.MoveToContent();
299
300                         while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
301                         {
302                                 if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
303                                 {
304                                         UnknownNode (ob);
305                                 }
306                                 else
307                                         UnknownNode(ob);
308
309                                 Reader.MoveToContent();
310                         }
311
312                         ReadEndElement();
313
314                         return ob;
315                 }
316
317                 public System.Web.Services.Discovery.SchemaReference ReadObject_SchemaReference (bool isNullable, bool checkType)
318                 {
319                         System.Web.Services.Discovery.SchemaReference ob = null;
320                         if (isNullable && ReadNull()) return null;
321
322                         if (checkType) 
323                         {
324                                 System.Xml.XmlQualifiedName t = GetXsiType();
325                                 if (t != null) 
326                                 {
327                                         if (t.Name != "SchemaReference" || t.Namespace != "http://schemas/xmlsoap.org/disco/schema/")
328                                                 throw CreateUnknownTypeException(t);
329                                 }
330                         }
331
332                         ob = new System.Web.Services.Discovery.SchemaReference ();
333
334                         Reader.MoveToElement();
335
336                         while (Reader.MoveToNextAttribute())
337                         {
338                                 if (Reader.LocalName == "targetNamespace" && Reader.NamespaceURI == "") {
339                                         ob.@TargetNamespace = Reader.Value;
340                                 }
341                                 else if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") {
342                                         ob.@Ref = Reader.Value;
343                                 }
344                                 else if (IsXmlnsAttribute (Reader.Name)) {
345                                 }
346                                 else {
347                                         UnknownNode (ob);
348                                 }
349                         }
350
351                         Reader.MoveToElement();
352                         if (Reader.IsEmptyElement) {
353                                 Reader.Skip ();
354                                 return ob;
355                         }
356
357                         Reader.ReadStartElement();
358                         Reader.MoveToContent();
359
360                         while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
361                         {
362                                 if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
363                                 {
364                                         UnknownNode (ob);
365                                 }
366                                 else
367                                         UnknownNode(ob);
368
369                                 Reader.MoveToContent();
370                         }
371
372                         ReadEndElement();
373
374                         return ob;
375                 }
376
377                 protected override void InitCallbacks ()
378                 {
379                 }
380
381                 protected override void InitIDs ()
382                 {
383                 }
384
385         }
386
387         internal class DiscoveryDocumentWriter : XmlSerializationWriter
388         {
389                 public void WriteRoot_DiscoveryDocument (object o)
390                 {
391                         WriteStartDocument ();
392                         System.Web.Services.Discovery.DiscoveryDocument ob = (System.Web.Services.Discovery.DiscoveryDocument) o;
393                         TopLevelElement ();
394                         WriteObject_DiscoveryDocument (ob, "discovery", "http://schemas.xmlsoap.org/disco/", true, false, true);
395                 }
396
397                 void WriteObject_DiscoveryDocument (System.Web.Services.Discovery.DiscoveryDocument ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
398                 {
399                         if (ob == null)
400                         {
401                                 if (isNullable)
402                                         WriteNullTagLiteral(element, namesp);
403                                 return;
404                         }
405
406                         if (writeWrappingElem) {
407                                 WriteStartElement (element, namesp, ob);
408                         }
409
410                         if (needType) WriteXsiType("DiscoveryDocument", "http://schemas.xmlsoap.org/disco/");
411
412                         if (ob.@references != null) {
413                                 for (int n6 = 0; n6 < ob.@references.Count; n6++) {
414                                         if (ob.@references[n6] == null) { }
415                                         else if (ob.@references[n6].GetType() == typeof(System.Web.Services.Discovery.SchemaReference)) {
416                                                 WriteObject_SchemaReference (((System.Web.Services.Discovery.SchemaReference) ob.@references[n6]), "schemaRef", "http://schemas.xmlsoap.org/disco/", false, false, true);
417                                         }
418                                         else if (ob.@references[n6].GetType() == typeof(System.Web.Services.Discovery.DiscoveryDocumentReference)) {
419                                                 WriteObject_DiscoveryDocumentReference (((System.Web.Services.Discovery.DiscoveryDocumentReference) ob.@references[n6]), "discoveryRef", "http://schemas.xmlsoap.org/disco/", false, false, true);
420                                         }
421                                         else if (ob.@references[n6].GetType() == typeof(System.Web.Services.Discovery.ContractReference)) {
422                                                 WriteObject_ContractReference (((System.Web.Services.Discovery.ContractReference) ob.@references[n6]), "contractRef", "http://schemas.xmlsoap.org/disco/scl/", false, false, true);
423                                         }
424                                         else throw CreateUnknownTypeException (ob.@references[n6]);
425                                 }
426                         }
427                         if (ob.@additionalInfo != null) {
428                                 for (int n7 = 0; n7 < ob.@additionalInfo.Count; n7++) {
429                                         WriteObject_SoapBinding (((System.Web.Services.Discovery.SoapBinding) ob.@additionalInfo[n7]), "soap", "http://schemas/xmlsoap.org/disco/schema/soap/", false, false, true);
430                                 }
431                         }
432                         if (writeWrappingElem) WriteEndElement (ob);
433                 }
434
435                 void WriteObject_SchemaReference (System.Web.Services.Discovery.SchemaReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
436                 {
437                         if (ob == null)
438                         {
439                                 if (isNullable)
440                                         WriteNullTagLiteral(element, namesp);
441                                 return;
442                         }
443
444                         if (writeWrappingElem) {
445                                 WriteStartElement (element, namesp, ob);
446                         }
447
448                         if (needType) WriteXsiType("SchemaReference", "http://schemas/xmlsoap.org/disco/schema/");
449
450                         if (ob.@TargetNamespace != "") {
451                                 WriteAttribute ("targetNamespace", "", ob.@TargetNamespace);
452                         }
453                         WriteAttribute ("ref", "", ob.@Ref);
454
455                         if (writeWrappingElem) WriteEndElement (ob);
456                 }
457
458                 void WriteObject_DiscoveryDocumentReference (System.Web.Services.Discovery.DiscoveryDocumentReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
459                 {
460                         if (ob == null)
461                         {
462                                 if (isNullable)
463                                         WriteNullTagLiteral(element, namesp);
464                                 return;
465                         }
466
467                         if (writeWrappingElem) {
468                                 WriteStartElement (element, namesp, ob);
469                         }
470
471                         if (needType) WriteXsiType("DiscoveryDocumentReference", "http://schemas.xmlsoap.org/disco/");
472
473                         WriteAttribute ("ref", "", ob.@Ref);
474
475                         if (writeWrappingElem) WriteEndElement (ob);
476                 }
477
478                 void WriteObject_ContractReference (System.Web.Services.Discovery.ContractReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
479                 {
480                         if (ob == null)
481                         {
482                                 if (isNullable)
483                                         WriteNullTagLiteral(element, namesp);
484                                 return;
485                         }
486
487                         if (writeWrappingElem) {
488                                 WriteStartElement (element, namesp, ob);
489                         }
490
491                         if (needType) WriteXsiType("ContractReference", "http://schemas.xmlsoap.org/disco/scl/");
492
493                         WriteAttribute ("docRef", "", ob.@DocRef);
494                         WriteAttribute ("ref", "", ob.@Ref);
495
496                         if (writeWrappingElem) WriteEndElement (ob);
497                 }
498
499                 void WriteObject_SoapBinding (System.Web.Services.Discovery.SoapBinding ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
500                 {
501                         if (ob == null)
502                         {
503                                 if (isNullable)
504                                         WriteNullTagLiteral(element, namesp);
505                                 return;
506                         }
507
508                         if (writeWrappingElem) {
509                                 WriteStartElement (element, namesp, ob);
510                         }
511
512                         if (needType) WriteXsiType("SoapBinding", "http://schemas/xmlsoap.org/disco/schema/soap/");
513
514                         WriteAttribute ("binding", "", FromXmlQualifiedName (ob.@Binding));
515                         WriteAttribute ("address", "", ob.@Address);
516
517                         if (writeWrappingElem) WriteEndElement (ob);
518                 }
519
520                 protected override void InitCallbacks ()
521                 {
522                 }
523
524         }
525
526 }
527