[Mono-bugs] [Bug 69189][Cri] New - Soap Serialization (SoapFormatter) not compatable with MS.NET (wrong binary encoding type?)

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Sat, 6 Nov 2004 18:24:39 -0500 (EST)


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by eric@extremeboredom.net.

http://bugzilla.ximian.com/show_bug.cgi?id=69189

--- shadow/69189	2004-11-06 18:24:39.000000000 -0500
+++ shadow/69189.tmp.14478	2004-11-06 18:24:39.000000000 -0500
@@ -0,0 +1,102 @@
+Bug#: 69189
+Product: Mono: Class Libraries
+Version: 1.0
+OS: 
+OS Details: Gentoo Linux / Windows XP Pro
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Critical
+Component: System
+AssignedTo: mono-bugs@ximian.com                            
+ReportedBy: eric@extremeboredom.net               
+QAContact: mono-bugs@ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: Soap Serialization (SoapFormatter) not compatable with MS.NET  (wrong binary encoding type?)
+
+http://filefind.net/Stuff/SoapBug.tar.gz (also attached)
+
+$ ./SoapSerializeTest.exe > out
+$ ./SoapDeserializeTest.exe < out
+
+This will work fine
+
+Now copy 'out' to a windows computer (running .NET Framework 1.1)
+
+C> SoapDeserializeTest.exe <out
+Unhandled Exception: System.ArgumentException: Object type cannot be
+converted to target type.
+   at System.Reflection.RuntimeFieldInfo.InternalSetValue(Object obj,
+Object val, BindingFlags invokeAttr, Binder binder, CultureInfo culture,
+Boolean requiresAccessCheck, Boolean isBinderDefault)
+   at
+System.Runtime.Serialization.FormatterServices.SerializationSetValue(MemberInfo
+fi, Object target, Object value)
+   at
+System.Runtime.Serialization.ObjectManager.CompleteObject(ObjectHolder
+holder, Boolean bObjectFullyComplete)
+   at
+System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups(ObjectHolder
+holder)
+   at System.Runtime.Serialization.ObjectManager.RegisterObject(Object obj,
+Int64 objectID, SerializationInfo info, Int64 idOfContainingObj, MemberInfo
+member, Int32[] arrayIndex)
+   at
+System.Runtime.Serialization.Formatters.Soap.ObjectReader.RegisterObject(Object
+obj, ParseRecord pr, ParseRecord objectPr)
+   at
+System.Runtime.Serialization.Formatters.Soap.ObjectReader.ParseObjectEnd(ParseRecord
+pr)
+   at
+System.Runtime.Serialization.Formatters.Soap.ObjectReader.Parse(ParseRecord pr)
+   at
+System.Runtime.Serialization.Formatters.Soap.SoapHandler.EndElement(String
+prefix, String name, String urn)
+   at System.Runtime.Serialization.Formatters.Soap.SoapParser.ParseXml()
+   at System.Runtime.Serialization.Formatters.Soap.SoapParser.Run()
+   at
+System.Runtime.Serialization.Formatters.Soap.ObjectReader.Deserialize(HeaderHandler
+handler, ISerParser serParser)
+   at
+System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize(Stream
+serializationStream, HeaderHandler handler)
+   at
+System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize(Stream
+serializationStream)
+   at SoapTest.Main()
+
+C> SoapSerializeTest.exe > out2
+C> SoapDeserializeTest.exe <out2
+
+This will work fine
+
+Now copy 'out2' to a linux computer (running Mono 1.0.4)
+
+$ ./SoapDeserializeTest.exe < out2
+
+Unhandled Exception: System.NullReferenceException: Object reference not
+set to an instance of an object
+in <0x00147>
+System.Runtime.Serialization.Formatters.Soap.SoapReader:DeserializeArray (long)
+in <0x00125>
+System.Runtime.Serialization.Formatters.Soap.SoapReader:Deserialize ()
+in <0x00373>
+System.Runtime.Serialization.Formatters.Soap.SoapReader:Deserialize
+(System.IO.Stream,System.Runtime.Serialization.Formatters.ISoapMessage)
+in <0x000c8>
+System.Runtime.Serialization.Formatters.Soap.SoapFormatter:Deserialize
+(System.IO.Stream,System.Runtime.Remoting.Messaging.HeaderHandler)
+in <0x00017>
+System.Runtime.Serialization.Formatters.Soap.SoapFormatter:Deserialize
+(System.IO.Stream)
+in <0x000c2> SoapTest:Main ()
+
+-- 
+
+The big differences I notice between the two files is that mono is using an
+array to encode binary data while MS.NET is using base64, and the "ref" ids
+are 1 higher on MS.NET than mono.
+<someString id="ref-3">yo</someString>
+<someString id="ref-2">yo</someString>