X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web.Services%2FSystem.Web.Services.Protocols%2FSoapMessage.cs;h=038cd76137607d85f2362f0db161d838585cddd6;hb=a57c3b9782ca02e4f060ac37dac5b2a20f16772a;hp=8fc0f04e2889b793da84a85e8c1808ef0a6f7885;hpb=a3ea7ceb4d4f5e2cb8ea421313e8939640fb898c;p=mono.git diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs index 8fc0f04e288..038cd761376 100644 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs +++ b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs @@ -1,12 +1,12 @@ -// -// System.Web.Services.Protocols.SoapMessage.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// +// +// System.Web.Services.Protocols.SoapMessage.cs +// +// Author: +// Tim Coleman (tim@timcoleman.com) +// Lluis Sanchez Gual (lluis@ximian.com) +// +// Copyright (C) Tim Coleman, 2002 +// // // Permission is hereby granted, free of charge, to any person obtaining @@ -28,216 +28,230 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // - -using System.IO; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public abstract class SoapMessage { - - #region Fields - - string content_type = "text/xml"; - string content_encoding; - SoapException exception = null; - SoapHeaderCollection headers; - SoapMessageStage stage; - Stream stream; - object[] inParameters; - object[] outParameters; - -#if NET_2_0 - SoapProtocolVersion soapVersion; -#endif - - #endregion // Fields - - #region Constructors - - internal SoapMessage () - { - headers = new SoapHeaderCollection (); - } - - internal SoapMessage (Stream stream, SoapException exception) - { - this.exception = exception; - this.stream = stream; - headers = new SoapHeaderCollection (); - } - - #endregion - - #region Properties - - internal object[] InParameters - { - get { return inParameters; } - set { inParameters = value; } - } - - internal object[] OutParameters - { - get { return outParameters; } - set { outParameters = value; } - } - - public abstract string Action - { - get; - } - - public string ContentType { - get { return content_type; } - set { content_type = value; } - } - - public SoapException Exception { - get { return exception; } -#if NET_2_0 - set { exception = value; } -#endif - } - - public SoapHeaderCollection Headers { - get { return headers; } - } - - public abstract LogicalMethodInfo MethodInfo { - get; - } - - public abstract bool OneWay { - get; - } - - public SoapMessageStage Stage { - get { return stage; } - } - - internal void SetStage (SoapMessageStage stage) - { - this.stage = stage; - } - - public Stream Stream { - get { - return stream; - } - } - - public abstract string Url { - get; - } - -#if NET_1_1 - public string ContentEncoding - { - get { return content_encoding; } - set { content_encoding = value; } - } -#else - internal string ContentEncoding - { - get { return content_encoding; } - set { content_encoding = value; } - } -#endif - -#if NET_2_0 - [System.Runtime.InteropServices.ComVisible(false)] - public virtual SoapProtocolVersion SoapVersion { - get { return soapVersion; } - } -#endif - - internal Stream InternalStream - { - // for getter use public stream property - set { - stream = value; - } - } - - #endregion Properties - - #region Methods - - protected abstract void EnsureInStage (); - protected abstract void EnsureOutStage (); - - protected void EnsureStage (SoapMessageStage stage) - { - if ((((int) stage) & ((int) Stage)) == 0) - throw new InvalidOperationException ("The current SoapMessageStage is not the asserted stage or stages."); - } - - public object GetInParameterValue (int index) - { - return inParameters [index]; - } - - public object GetOutParameterValue (int index) - { - if (MethodInfo.IsVoid) return outParameters [index]; - else return outParameters [index + 1]; - } - - public object GetReturnValue () - { - if (!MethodInfo.IsVoid && exception == null) return outParameters [0]; - else return null; - } - - internal void SetHeaders (SoapHeaderCollection headers) - { - this.headers = headers; - } - - internal void SetException (SoapException ex) - { - exception = ex; - } - - internal void CollectHeaders (object target, HeaderInfo[] headers, SoapHeaderDirection direction) - { - Headers.Clear (); - foreach (HeaderInfo hi in headers) - { - if ((hi.Direction & direction) != 0 && !hi.IsUnknownHeader) - { - SoapHeader headerVal = hi.GetHeaderValue (target) as SoapHeader; - if (headerVal != null) - Headers.Add (headerVal); - } - } - } - - internal void UpdateHeaderValues (object target, HeaderInfo[] headersInfo) - { - foreach (SoapHeader header in Headers) - { - HeaderInfo hinfo = FindHeader (headersInfo, header.GetType ()); - if (hinfo != null) { + +using HeaderInfo = System.Web.Services.Protocols.SoapHeaderMapping; + +using System.ComponentModel; +using System.IO; +using System.Web.Services; + +namespace System.Web.Services.Protocols { + public abstract class SoapMessage { + + #region Fields + + string content_type = "text/xml"; + string content_encoding; + SoapException exception = null; + SoapHeaderCollection headers; + SoapMessageStage stage; + Stream stream; + object[] inParameters; + object[] outParameters; + +#if NET_2_0 + SoapProtocolVersion soapVersion; +#endif + + #endregion // Fields + + #region Constructors + + internal SoapMessage () + { + headers = new SoapHeaderCollection (); + } + + internal SoapMessage (Stream stream, SoapException exception) + { + this.exception = exception; + this.stream = stream; + headers = new SoapHeaderCollection (); + } + + #endregion + + #region Properties + + internal object[] InParameters + { + get { return inParameters; } + set { inParameters = value; } + } + + internal object[] OutParameters + { + get { return outParameters; } + set { outParameters = value; } + } + + public abstract string Action + { + get; + } + + public string ContentType { + get { return content_type; } + set { content_type = value; } + } + + public SoapException Exception { + get { return exception; } +#if NET_2_0 + set { exception = value; } +#endif + } + + public SoapHeaderCollection Headers { + get { return headers; } + } + + public abstract LogicalMethodInfo MethodInfo { + get; + } + + public abstract bool OneWay { + get; + } + + public SoapMessageStage Stage { + get { return stage; } + } + + internal void SetStage (SoapMessageStage stage) + { + this.stage = stage; + } + + public Stream Stream { + get { + return stream; + } + } + + public abstract string Url { + get; + } + +#if NET_1_1 + public string ContentEncoding + { + get { return content_encoding; } + set { content_encoding = value; } + } +#else + internal string ContentEncoding + { + get { return content_encoding; } + set { content_encoding = value; } + } +#endif + + internal bool IsSoap12 { + get { +#if NET_2_0 + return SoapVersion == SoapProtocolVersion.Soap12; +#else + return false; +#endif + } + } + +#if NET_2_0 + [System.Runtime.InteropServices.ComVisible(false)] + [DefaultValue (SoapProtocolVersion.Default)] + public virtual SoapProtocolVersion SoapVersion { + get { return soapVersion; } + } +#endif + + internal Stream InternalStream + { + // for getter use public stream property + set { + stream = value; + } + } + + #endregion Properties + + #region Methods + + protected abstract void EnsureInStage (); + protected abstract void EnsureOutStage (); + + protected void EnsureStage (SoapMessageStage stage) + { + if ((((int) stage) & ((int) Stage)) == 0) + throw new InvalidOperationException ("The current SoapMessageStage is not the asserted stage or stages."); + } + + public object GetInParameterValue (int index) + { + return inParameters [index]; + } + + public object GetOutParameterValue (int index) + { + if (MethodInfo.IsVoid) return outParameters [index]; + else return outParameters [index + 1]; + } + + public object GetReturnValue () + { + if (!MethodInfo.IsVoid && exception == null) return outParameters [0]; + else return null; + } + + internal void SetHeaders (SoapHeaderCollection headers) + { + this.headers = headers; + } + + internal void SetException (SoapException ex) + { + exception = ex; + } + + internal void CollectHeaders (object target, HeaderInfo[] headers, SoapHeaderDirection direction) + { + Headers.Clear (); + foreach (HeaderInfo hi in headers) + { + if ((hi.Direction & direction) != 0 && !hi.Custom) + { + SoapHeader headerVal = hi.GetHeaderValue (target) as SoapHeader; + if (headerVal != null) + Headers.Add (headerVal); + } + } + } + + internal void UpdateHeaderValues (object target, HeaderInfo[] headersInfo) + { + foreach (SoapHeader header in Headers) + { + HeaderInfo hinfo = FindHeader (headersInfo, header.GetType ()); + if (hinfo != null) { hinfo.SetHeaderValue (target, header); - header.DidUnderstand = !hinfo.IsUnknownHeader; - } - } - } - - HeaderInfo FindHeader (HeaderInfo[] headersInfo, Type headerType) + header.DidUnderstand = !hinfo.Custom; + } + } + } + + HeaderInfo FindHeader (HeaderInfo[] headersInfo, Type headerType) { HeaderInfo unknownHeaderInfo = null; - + foreach (HeaderInfo headerInfo in headersInfo) { if (headerInfo.HeaderType == headerType) return headerInfo; - else if (headerInfo.IsUnknownHeader) + else if (headerInfo.Custom) unknownHeaderInfo = headerInfo; } return unknownHeaderInfo; - } - - #endregion // Methods - } + } + + #endregion // Methods + } }