-/****************************************************/\r
-/*Soapformatter class implementation */\r
-/*Author: Jesús M. Rodríguez de la Vega */\r
-/*gsus@brujula.net */\r
-/****************************************************/\r
+// created on 07/04/2003 at 17:16\r
+//\r
+// System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+//\r
+// Authors:\r
+// Jean-Marc Andre (jean-marc.andre@polymtl.ca)\r
+//\r
\r
using System;\r
-using System.Reflection;\r
-using System.Xml;\r
using System.IO;\r
-using System.Runtime.Serialization.Formatters;\r
+using System.Reflection;\r
+using System.Runtime.Remoting;\r
+using System.Runtime.Serialization;\r
+using System.Runtime.Remoting.Messaging;\r
+using System.Xml.Serialization;\r
\r
-namespace System.Runtime.Serialization.Formatters.soap\r
-{\r
- public class SoapFormatter\r
- {\r
- private ObjectSerializer ObjSerializer; \r
- private ObjectDeserializer ObjDeserializer;\r
- /*this is the soapformater's properties \r
- the Binder, Context and SurrogateSelector properties\r
- have not been declared yet*/\r
\r
- public FormatterAssemblyStyle AssemblyFormat\r
- {\r
- get{return AssemblyFormat;}\r
- set{AssemblyFormat= value;}\r
+namespace System.Runtime.Serialization.Formatters.Soap {\r
+ enum RemMessageType {\r
+ MethodCall, MethodResponse, ServerFault, NotRecognize\r
+ }\r
+ \r
+ public class SoapFormatter: IRemotingFormatter, IFormatter {\r
+ private ObjectWriter _objWriter;\r
+ private SoapWriter _soapWriter;\r
+ private SerializationBinder _binder;\r
+ private StreamingContext _context;\r
+ private ISurrogateSelector _selector;\r
+ private FormatterAssemblyStyle _assemblyFormat = FormatterAssemblyStyle.Full;\r
+ private ISoapMessage _topObject;\r
+ \r
+ public SoapFormatter() {\r
+ \r
}\r
-\r
- public ISoapMessage TopObject\r
- {\r
- get{return TopObject;}\r
- set{TopObject= value;}\r
+ \r
+ public SoapFormatter(ISurrogateSelector selector, StreamingContext context):this() {\r
+ _selector = selector;\r
+ _context = context;\r
}\r
-\r
- public FormatterTypeStyle TypeFormat\r
- {\r
- get{return TypeFormat;}\r
- set{TypeFormat= value;}\r
+ \r
+ ~SoapFormatter() {\r
}\r
\r
- //the other constructor are not supplied yet\r
- public SoapFormatter()\r
- { \r
+ \r
+ public object Deserialize(Stream serializationStream) {\r
+ return Deserialize(serializationStream, null);\r
}\r
- \r
- public void Serialize(Stream serializationStream, object graph)\r
- {\r
- ObjSerializer= new ObjectSerializer(serializationStream);\r
- ObjSerializer.BeginWrite();\r
- ObjSerializer.Serialize(graph);\r
+ \r
+ public object Deserialize(Stream serializationStream, HeaderHandler handler) {\r
+ SoapParser parser = new SoapParser(serializationStream);\r
+ SoapReader soapReader = new SoapReader(parser);\r
+ soapReader.Binder = _binder;\r
+ \r
+ \r
+ if(_topObject != null) soapReader.TopObject = _topObject;\r
+ ObjectReader reader = new ObjectReader(_selector, _context, soapReader);\r
+ parser.Run();\r
+ object objReturn = reader.TopObject;\r
+ return objReturn;\r
}\r
-\r
- public object Deserialize(Stream serializationStream) \r
- {\r
- ObjDeserializer= new ObjectDeserializer(serializationStream);\r
- return ObjDeserializer.Deserialize(serializationStream);\r
+ \r
+ \r
+ \r
+ public void Serialize(Stream serializationStream, object graph) {\r
+ Serialize(serializationStream, graph, null);\r
+ }\r
+ \r
+ public void Serialize(Stream serializationStream, object graph, Header[] headers) {\r
+ if(serializationStream == null)\r
+ throw new ArgumentNullException("serializationStream");\r
+ if(!serializationStream.CanWrite)\r
+ throw new SerializationException("Can't write in the serialization stream");\r
+ _soapWriter = new SoapWriter(serializationStream);\r
+ _objWriter = new ObjectWriter((ISoapWriter) _soapWriter, _selector, new StreamingContext(StreamingContextStates.File));\r
+ _soapWriter.Writer = _objWriter;\r
+ _objWriter.Serialize(graph);\r
+ \r
+ }\r
+ \r
+ public ISurrogateSelector SurrogateSelector {\r
+ get {\r
+ return _selector;\r
+ }\r
+ set {\r
+ _selector = value;\r
+ }\r
+ }\r
+ \r
+ \r
+ public SerializationBinder Binder {\r
+ get {\r
+ return _binder;\r
+ }\r
+ set {\r
+ _binder = value;\r
+ }\r
}\r
\r
+ public StreamingContext Context {\r
+ get {\r
+ return _context;\r
+ }\r
+ set {\r
+ _context = value;\r
+ }\r
+ }\r
+ \r
+ public ISoapMessage TopObject {\r
+ get {\r
+ return _topObject;\r
+ }\r
+ set {\r
+ _topObject = value;\r
+ }\r
+ }\r
+ \r
+ [MonoTODO ("Interpret this")]\r
+ public FormatterAssemblyStyle AssemblyFormat\r
+ {\r
+ get {\r
+ return _assemblyFormat;\r
+ }\r
+ set {\r
+ _assemblyFormat = value;\r
+ }\r
+ }\r
+\r
}\r
}\r