2008-04-11 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Fri, 11 Apr 2008 06:34:35 +0000 (06:34 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Fri, 11 Apr 2008 06:34:35 +0000 (06:34 -0000)
* XmlTypeMapping.cs : .NET 2.0 has a weird behavior that swallows
  exception from IXmlSerializable.GetSchema().

* XmlSerializerTestClasses.cs, XmlSerializerTests.cs : added test
for IXmlSerializable serialization whose GetSchema() borks.

svn path=/trunk/mcs/; revision=100415

mcs/class/System.XML/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs
mcs/class/System.XML/Test/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTestClasses.cs
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTests.cs

index 49d9824faace1ff3bbe2c2fa4932d7a7af17a01d..80c5e8bca13a7843ba66ee9feb33cd1ac340af05 100644 (file)
@@ -1,3 +1,8 @@
+2008-04-11  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlTypeMapping.cs : .NET 2.0 has a weird behavior that swallows
+         exception from IXmlSerializable.GetSchema().
+
 2008-04-01  Lluis Sanchez Gual <lluis@novell.com> 
 
        * TypeData.cs: Prefix with a '@' type names that are equal to keywords.
index 71cd1af40b565d60e8a36d258beca5b4246aadcd..703bd82c51ae267de4b247e6250e02cd8c22f8ed 100644 (file)
@@ -247,7 +247,15 @@ namespace System.Xml.Serialization
                        }
 #endif
                        IXmlSerializable serializable = (IXmlSerializable)Activator.CreateInstance (typeData.Type, true);
+#if NET_2_0
+                       try {
+                               _schema = serializable.GetSchema();
+                       } catch (Exception) {
+                               // LAMESPEC: .NET has a bad exception catch and swallows it silently.
+                       }
+#else
                        _schema = serializable.GetSchema();
+#endif
                        if (_schema != null) 
                        {
                                if (_schema.Id == null || _schema.Id.Length == 0) 
index ca3bd8ac52aeba16fcb2094179ffeee944285d37..ae693146f8b13355cd48bd623cc6e8997325a183 100644 (file)
@@ -1,3 +1,8 @@
+2008-04-11  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlSerializerTestClasses.cs, XmlSerializerTests.cs : added test
+       for IXmlSerializable serialization whose GetSchema() borks.
+
 2008-04-01  Lluis Sanchez Gual <lluis@novell.com> 
 
        * XmlSerializerTestClasses.cs, XmlSerializerTests.cs: Test nullable
index 1bb0d0b672cb19531a0cebac27fe56cdcaa85af6..5a7d6c3b737fceaefda145cf18def185f2b9d2ba 100644 (file)
@@ -889,5 +889,24 @@ namespace MonoTests.System.Xml.TestClasses
                [SoapEnum ("Large")]
                B
        }
+
+       public class ErrorneousGetSchema : IXmlSerializable
+       {
+               public XmlSchema GetSchema ()
+               {
+                       throw new ApplicationException ("unexpected");
+               }
+
+               public void ReadXml (XmlReader reader)
+               {
+               }
+
+               public void WriteXml (XmlWriter writer)
+               {
+               }
+
+               // it should be serialized IF it is NOT IXmlSerializable.
+               public string Whoa = "whoa";
+       }
 }
 
index 2ab5a03fad93cef2b3d55521ce7dbcaa745e50e0..f4a6f26544c5701187918de48d99529264a01ca8 100644 (file)
@@ -2374,6 +2374,16 @@ namespace MonoTests.System.XmlSerialization
                        ser.Serialize (TextWriter.Null, new InvalidTypeContainer ());
                }
 
+               [Test]
+#if !NET_2_0
+               [ExpectedException (typeof (ApplicationException))]
+#endif
+               public void SerializeErrorneousIXmlSerializable ()
+               {
+                       Serialize (new ErrorneousGetSchema ());
+                       Assert.AreEqual ("<:ErrorneousGetSchema></>", Infoset (sw.ToString ()));
+               }
+
 #if NET_2_0
                public void DateTimeRoundtrip ()
                {