[webservices] Extensions can be unknown XmlElements also, fix.
authorAnkit Jain <radical@corewars.org>
Thu, 3 Feb 2011 19:23:47 +0000 (00:53 +0530)
committerAnkit Jain <radical@corewars.org>
Thu, 3 Feb 2011 19:32:09 +0000 (01:02 +0530)
* class/System.Web.Services/System.Web.Services.Description/BasicProfileChecker.cs:
Extensions can be XmlElement or ServiceDescriptionFormatExtension.
* class/System.Web.Services/System.Web.Services.Description/ServiceDescription.cs:
(AddExtensionNamespaces): Likewise. Also, ignore namespaces from
XmlElement, as we retain and write them out as-is.
(WriteExtension): Emit the XmlElement as-is.
* class/System.Web.Services/Test/System.Web.Services.Description/ServiceDescriptionTest.cs:
Update to write out the wsdl also.

mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileChecker.cs
mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescription.cs
mcs/class/System.Web.Services/Test/System.Web.Services.Description/ServiceDescriptionTest.cs

index c9d73c2e07038f3b382e9a8d12c8c1db5b005ee5..e862414800ec1aef7d9672a26c8ed0cb2685e0e0 100644 (file)
@@ -142,7 +142,7 @@ namespace System.Web.Services.Description
 
                public override void Check (ConformanceCheckContext ctx, BindingCollection value) {
                        foreach (Binding b in value)
-                               foreach (ServiceDescriptionFormatExtension ext in b.Extensions)
+                               foreach (object ext in b.Extensions)
                                        if (ext.GetType () == typeof (SoapBinding))
                                                return;
 
index fb0aab54ef41115b042e8f70d160754b9aac6b79..eee8a30f77f849d2d0b909ca30f0db486b1de7b1 100644 (file)
@@ -339,8 +339,13 @@ namespace System.Web.Services.Description
                
                void AddExtensionNamespaces (XmlSerializerNamespaces ns, ServiceDescriptionFormatExtensionCollection extensions)
                {
-                       foreach (ServiceDescriptionFormatExtension ext in extensions)
+                       foreach (object o in extensions)
                        {
+                               ServiceDescriptionFormatExtension ext = o as ServiceDescriptionFormatExtension;
+                               if (ext == null)
+                                       // o can be XmlElement, skipping that
+                                       continue;
+
                                ExtensionInfo einf = ExtensionManager.GetFormatExtensionInfo (ext.GetType ());
                                foreach (XmlQualifiedName qname in einf.NamespaceDeclarations)
                                        ns.Add (qname.Name, qname.Namespace);
@@ -352,8 +357,12 @@ namespace System.Web.Services.Description
                        ServiceDescriptionFormatExtensionCollection extensions = ExtensionManager.GetExtensionPoint (ob);
                        if (extensions != null)
                        {
-                               foreach (ServiceDescriptionFormatExtension ext in extensions)
-                                       WriteExtension (writer, ext);
+                               foreach (object o in extensions) {
+                                       if (o is ServiceDescriptionFormatExtension)
+                                               WriteExtension (writer, (ServiceDescriptionFormatExtension)o);
+                                       else if (o is XmlElement)
+                                               ((XmlElement)o).WriteTo (writer);
+                               }
                        }
                }
                
index 7ebfc51c1d91ef22deeea8680260905d669ff40b..99fe6c62b0df8c072c2cf370fcb83b016ff37b45 100644 (file)
@@ -141,6 +141,14 @@ namespace MonoTests.System.Web.Services.Description
                    Assert.AreEqual (typeof (SoapAddressBinding), sd.Services [0].Ports [0].Extensions [0].GetType ()); 
                    CheckXmlElement (sd.Services [0].Ports [0].Extensions [1], "portElem");
 
+                   string out_file = Path.GetTempFileName ();
+                   try {
+                           using (FileStream out_fs = new FileStream(out_file, FileMode.Create))
+                                   sd.Write (out_fs);
+                   } finally {
+                           if (!String.IsNullOrEmpty (out_file))
+                                   File.Delete (out_file);
+                   }
                }
 
                void CheckExtensions (DocumentableItem di, string elemName, string val)