* HttpGetTypeStubInfo.cs, HttpPostTypeStubInfo.cs, HttpSimpleTypeStubInfo.cs,
[mono.git] / mcs / class / System.Web.Services / System.Web.Services.Protocols / XmlReturnReader.cs
1 // \r
2 // System.Web.Services.Protocols.XmlReturnReader.cs\r
3 //\r
4 // Author:\r
5 //   Tim Coleman (tim@timcoleman.com)\r
6 //\r
7 // Copyright (C) Tim Coleman, 2002\r
8 //\r
9 \r
10 using System.IO;\r
11 using System.Net;\r
12 using System.Xml.Serialization;\r
13 using System.Web.Services;\r
14 \r
15 namespace System.Web.Services.Protocols {\r
16         public class XmlReturnReader : MimeReturnReader {\r
17 \r
18                 XmlSerializer serializer;\r
19                 \r
20                 #region Constructors\r
21 \r
22                 public XmlReturnReader () \r
23                 {\r
24                 }\r
25                 \r
26                 #endregion // Constructors\r
27 \r
28                 #region Methods\r
29 \r
30                 public override object GetInitializer (LogicalMethodInfo methodInfo)\r
31                 {\r
32                         LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (methodInfo.DeclaringType);\r
33                         return new XmlSerializer (methodInfo.ReturnType, sti.WebServiceLiteralNamespace);\r
34                 }\r
35 \r
36                 public override object[] GetInitializers (LogicalMethodInfo[] methodInfos)\r
37                 {\r
38                         XmlReflectionImporter importer = new XmlReflectionImporter ();\r
39                         XmlMapping[] sers = new XmlMapping [methodInfos.Length];\r
40                         for (int n=0; n<sers.Length; n++)\r
41                         {\r
42                                 LogicalMethodInfo metinfo = methodInfos[n];\r
43                                 if (metinfo.IsVoid) \r
44                                         sers[n] = null;\r
45                                 else\r
46                                 {\r
47                                         LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (metinfo.DeclaringType);\r
48                                         sers[n] = importer.ImportTypeMapping (methodInfos[n].ReturnType, sti.WebServiceLiteralNamespace);\r
49                                 }\r
50                         }\r
51                         return XmlSerializer.FromMappings (sers);\r
52                 }\r
53                 \r
54                 public override void Initialize (object o)\r
55                 {\r
56                         serializer = (XmlSerializer)o;\r
57                 }\r
58 \r
59                 public override object Read (WebResponse response, Stream responseStream)\r
60                 {\r
61                         object result = null;\r
62                         if (serializer != null)\r
63                         {\r
64                                 if (response.ContentType.IndexOf ("text/xml") == -1)\r
65                                         throw new InvalidOperationException ("Result was not XML");\r
66                                 \r
67                                 result = serializer.Deserialize (responseStream);\r
68                         }\r
69                         responseStream.Close ();\r
70                         return result;\r
71                 }\r
72 \r
73                 #endregion // Methods\r
74         }\r
75 }