-// \r
-// System.Web.Services.Protocols.SoapExtension.cs\r
-//\r
-// Author:\r
-// Tim Coleman (tim@timcoleman.com)\r
-//\r
-// Copyright (C) Tim Coleman, 2002\r
-//\r
+//
+// System.Web.Services.Protocols.SoapExtension.cs
+//
+// Author:
+// Tim Coleman (tim@timcoleman.com)
+//
+// Copyright (C) Tim Coleman, 2002
+//
//
// Permission is hereby granted, free of charge, to any person obtaining
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-\r
-using System.IO;\r
-using System.Collections;\r
-using System.Web.Services.Configuration;\r
-\r
-namespace System.Web.Services.Protocols {\r
- public abstract class SoapExtension {\r
-\r
- #region Fields\r
-\r
- Stream stream;\r
-\r
- #endregion\r
-\r
- #region Constructors\r
-\r
- protected SoapExtension ()\r
- {\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- public virtual Stream ChainStream (Stream stream)\r
- {\r
- return stream;\r
- }\r
-\r
- public abstract object GetInitializer (Type serviceType);\r
- public abstract object GetInitializer (LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute);\r
- public abstract void Initialize (object initializer);\r
- public abstract void ProcessMessage (SoapMessage message);\r
-\r
-\r
+
+using System.IO;
+using System.Collections;
+using System.Web.Services.Configuration;
+
+namespace System.Web.Services.Protocols {
+ public abstract class SoapExtension {
+
+ #region Fields
+
+ Stream stream;
+
+ #endregion
+
+ #region Constructors
+
+ protected SoapExtension ()
+ {
+ }
+
+ #endregion // Constructors
+
+ #region Methods
+
+ public virtual Stream ChainStream (Stream stream)
+ {
+ return stream;
+ }
+
+ public abstract object GetInitializer (Type serviceType);
+ public abstract object GetInitializer (LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute);
+ public abstract void Initialize (object initializer);
+ public abstract void ProcessMessage (SoapMessage message);
+
+
#if !TARGET_JVM
- static ArrayList[] globalExtensions;\r
+ static ArrayList[] globalExtensions;
#else
static ArrayList[] globalExtensions {
get {
}
}
#endif
-\r
- internal static SoapExtension[] CreateExtensionChain (SoapExtensionRuntimeConfig[] extensionConfigs)\r
- {\r
- if (extensionConfigs == null) return null;\r
- SoapExtension[] res = new SoapExtension [extensionConfigs.Length];\r
- CreateExtensionChain (extensionConfigs, res, 0);\r
- return res;\r
- }\r
-\r
- internal static SoapExtension[] CreateExtensionChain (SoapExtensionRuntimeConfig[] hiPrioExts, SoapExtensionRuntimeConfig[] medPrioExts, SoapExtensionRuntimeConfig[] lowPrioExts)\r
- {\r
- int len = 0;\r
- if (hiPrioExts != null) len += hiPrioExts.Length;\r
- if (medPrioExts != null) len += medPrioExts.Length;\r
- if (lowPrioExts != null) len += lowPrioExts.Length;\r
- if (len == 0) return null;\r
-\r
- SoapExtension[] res = new SoapExtension [len];\r
- int pos = 0;\r
- if (hiPrioExts != null) pos = CreateExtensionChain (hiPrioExts, res, pos);\r
- if (medPrioExts != null) pos = CreateExtensionChain (medPrioExts, res, pos);\r
- if (lowPrioExts != null) pos = CreateExtensionChain (lowPrioExts, res, pos);\r
- return res;\r
- }\r
-\r
- static int CreateExtensionChain (SoapExtensionRuntimeConfig[] extensionConfigs, SoapExtension[] destArray, int pos)\r
- {\r
- for (int n=0; n<extensionConfigs.Length; n++)\r
- {\r
- SoapExtensionRuntimeConfig econf = extensionConfigs [n];\r
- SoapExtension ext = (SoapExtension) Activator.CreateInstance (econf.Type);\r
- ext.Initialize (econf.InitializationInfo);\r
- destArray [pos++] = ext;\r
- }\r
- return pos;\r
- }\r
-\r
- static void InitializeGlobalExtensions ()\r
- {\r
- globalExtensions = new ArrayList[2];\r
- \r
+
+ internal static SoapExtension[] CreateExtensionChain (SoapExtensionRuntimeConfig[] extensionConfigs)
+ {
+ if (extensionConfigs == null) return null;
+ SoapExtension[] res = new SoapExtension [extensionConfigs.Length];
+ CreateExtensionChain (extensionConfigs, res, 0);
+ return res;
+ }
+
+ internal static SoapExtension[] CreateExtensionChain (SoapExtensionRuntimeConfig[] hiPrioExts, SoapExtensionRuntimeConfig[] medPrioExts, SoapExtensionRuntimeConfig[] lowPrioExts)
+ {
+ int len = 0;
+ if (hiPrioExts != null) len += hiPrioExts.Length;
+ if (medPrioExts != null) len += medPrioExts.Length;
+ if (lowPrioExts != null) len += lowPrioExts.Length;
+ if (len == 0) return null;
+
+ SoapExtension[] res = new SoapExtension [len];
+ int pos = 0;
+ if (hiPrioExts != null) pos = CreateExtensionChain (hiPrioExts, res, pos);
+ if (medPrioExts != null) pos = CreateExtensionChain (medPrioExts, res, pos);
+ if (lowPrioExts != null) pos = CreateExtensionChain (lowPrioExts, res, pos);
+ return res;
+ }
+
+ static int CreateExtensionChain (SoapExtensionRuntimeConfig[] extensionConfigs, SoapExtension[] destArray, int pos)
+ {
+ for (int n=0; n<extensionConfigs.Length; n++)
+ {
+ SoapExtensionRuntimeConfig econf = extensionConfigs [n];
+ SoapExtension ext = (SoapExtension) Activator.CreateInstance (econf.Type);
+ ext.Initialize (econf.InitializationInfo);
+ destArray [pos++] = ext;
+ }
+ return pos;
+ }
+
+ static void InitializeGlobalExtensions ()
+ {
+ globalExtensions = new ArrayList[2];
+
#if NET_2_0
- SoapExtensionTypeElementCollection exts = WebServicesSection.Instance.SoapExtensionTypes;\r
+ SoapExtensionTypeElementCollection exts = WebServicesSection.Current.SoapExtensionTypes;
#else
- ArrayList exts = WSConfig.Instance.ExtensionTypes;\r
- if (exts == null) return;\r
+ ArrayList exts = WSConfig.Instance.ExtensionTypes;
+ if (exts == null) return;
#endif
-\r
+
#if NET_2_0
- foreach (SoapExtensionTypeElement econf in exts)\r
+ foreach (SoapExtensionTypeElement econf in exts)
#else
- foreach (WSExtensionConfig econf in exts)\r
+ foreach (WSExtensionConfig econf in exts)
#endif
- {\r
- if (globalExtensions [(int)econf.Group] == null) globalExtensions [(int)econf.Group] = new ArrayList ();\r
- ArrayList destList = globalExtensions [(int) econf.Group];\r
- bool added = false;\r
- for (int n=0; n<destList.Count && !added; n++)\r
+ {
+ if (globalExtensions [(int)econf.Group] == null) globalExtensions [(int)econf.Group] = new ArrayList ();
+ ArrayList destList = globalExtensions [(int) econf.Group];
+ bool added = false;
+ for (int n=0; n<destList.Count && !added; n++)
#if NET_2_0
- if (((SoapExtensionTypeElement)destList [n]).Priority > econf.Priority) {\r
+ if (((SoapExtensionTypeElement)destList [n]).Priority > econf.Priority) {
#else
- if (((WSExtensionConfig)destList [n]).Priority > econf.Priority) {\r
+ if (((WSExtensionConfig)destList [n]).Priority > econf.Priority) {
#endif
- destList.Insert (n, econf);\r
- added = true;\r
- }\r
- if (!added) destList.Add (econf);\r
- }\r
- }\r
-\r
- internal static SoapExtensionRuntimeConfig[][] GetTypeExtensions (Type serviceType)\r
- {\r
- if (globalExtensions == null) InitializeGlobalExtensions();\r
- \r
- SoapExtensionRuntimeConfig[][] exts = new SoapExtensionRuntimeConfig[2][];\r
-\r
- for (int group = 0; group < 2; group++)\r
- {\r
- ArrayList globList = globalExtensions[group];\r
- if (globList == null) continue;\r
- exts [group] = new SoapExtensionRuntimeConfig [globList.Count];\r
- for (int n=0; n<globList.Count; n++)\r
- {\r
+ destList.Insert (n, econf);
+ added = true;
+ }
+ if (!added) destList.Add (econf);
+ }
+ }
+
+ internal static SoapExtensionRuntimeConfig[][] GetTypeExtensions (Type serviceType)
+ {
+ if (globalExtensions == null) InitializeGlobalExtensions();
+
+ SoapExtensionRuntimeConfig[][] exts = new SoapExtensionRuntimeConfig[2][];
+
+ for (int group = 0; group < 2; group++)
+ {
+ ArrayList globList = globalExtensions[group];
+ if (globList == null) continue;
+ exts [group] = new SoapExtensionRuntimeConfig [globList.Count];
+ for (int n=0; n<globList.Count; n++)
+ {
#if NET_2_0
- SoapExtensionTypeElement econf = (SoapExtensionTypeElement) globList [n];\r
+ SoapExtensionTypeElement econf = (SoapExtensionTypeElement) globList [n];
#else
- WSExtensionConfig econf = (WSExtensionConfig) globList [n];\r
+ WSExtensionConfig econf = (WSExtensionConfig) globList [n];
#endif
- SoapExtensionRuntimeConfig typeconf = new SoapExtensionRuntimeConfig ();\r
- typeconf.Type = econf.Type;\r
- SoapExtension ext = (SoapExtension) Activator.CreateInstance (econf.Type);\r
- typeconf.InitializationInfo = ext.GetInitializer (serviceType);\r
- exts [group][n] = typeconf;\r
- }\r
- }\r
- return exts;\r
- }\r
-\r
- internal static SoapExtensionRuntimeConfig[] GetMethodExtensions (LogicalMethodInfo method)\r
- {\r
- object[] ats = method.GetCustomAttributes (typeof (SoapExtensionAttribute));\r
- SoapExtensionRuntimeConfig[] exts = new SoapExtensionRuntimeConfig [ats.Length];\r
- int[] priorities = new int[ats.Length];\r
-\r
- for (int n=0; n<ats.Length; n++)\r
- {\r
- SoapExtensionAttribute at = (SoapExtensionAttribute) ats[n];\r
- SoapExtensionRuntimeConfig econf = new SoapExtensionRuntimeConfig ();\r
- econf.Type = at.ExtensionType;\r
- priorities [n] = at.Priority;\r
- SoapExtension ext = (SoapExtension) Activator.CreateInstance (econf.Type);\r
- econf.InitializationInfo = ext.GetInitializer (method, at);\r
- exts [n] = econf;\r
- }\r
- Array.Sort (priorities, exts);\r
- return exts;\r
- }\r
-\r
- internal static Stream ExecuteChainStream (SoapExtension[] extensions, Stream stream)\r
- {\r
- if (extensions == null) return stream;\r
-\r
- Stream newStream = stream;\r
- foreach (SoapExtension ext in extensions)\r
- newStream = ext.ChainStream (newStream);\r
- return newStream;\r
- }\r
-\r
- internal static void ExecuteProcessMessage(SoapExtension[] extensions, SoapMessage message, Stream stream, bool inverseOrder) \r
- {\r
- if (extensions == null) return;\r
-\r
- message.InternalStream = stream;\r
-\r
- if (inverseOrder)\r
- {\r
- for (int n = extensions.Length-1; n >= 0; n--)\r
- extensions[n].ProcessMessage (message);\r
- }\r
- else\r
- {\r
- for (int n = 0; n < extensions.Length; n++)\r
- extensions[n].ProcessMessage (message);\r
- }\r
+ SoapExtensionRuntimeConfig typeconf = new SoapExtensionRuntimeConfig ();
+ typeconf.Type = econf.Type;
+ SoapExtension ext = (SoapExtension) Activator.CreateInstance (econf.Type);
+ typeconf.InitializationInfo = ext.GetInitializer (serviceType);
+ exts [group][n] = typeconf;
+ }
+ }
+ return exts;
+ }
+
+ internal static SoapExtensionRuntimeConfig[] GetMethodExtensions (LogicalMethodInfo method)
+ {
+ object[] ats = method.GetCustomAttributes (typeof (SoapExtensionAttribute));
+ SoapExtensionRuntimeConfig[] exts = new SoapExtensionRuntimeConfig [ats.Length];
+ int[] priorities = new int[ats.Length];
+
+ for (int n=0; n<ats.Length; n++)
+ {
+ SoapExtensionAttribute at = (SoapExtensionAttribute) ats[n];
+ SoapExtensionRuntimeConfig econf = new SoapExtensionRuntimeConfig ();
+ econf.Type = at.ExtensionType;
+ priorities [n] = at.Priority;
+ SoapExtension ext = (SoapExtension) Activator.CreateInstance (econf.Type);
+ econf.InitializationInfo = ext.GetInitializer (method, at);
+ exts [n] = econf;
+ }
+ Array.Sort (priorities, exts);
+ return exts;
+ }
+
+ internal static Stream ExecuteChainStream (SoapExtension[] extensions, Stream stream)
+ {
+ if (extensions == null) return stream;
+
+ Stream newStream = stream;
+ foreach (SoapExtension ext in extensions)
+ newStream = ext.ChainStream (newStream);
+ return newStream;
+ }
+
+ internal static void ExecuteProcessMessage(SoapExtension[] extensions, SoapMessage message, Stream stream, bool inverseOrder)
+ {
+ if (extensions == null) return;
+
+ message.InternalStream = stream;
+
+ if (inverseOrder)
+ {
+ for (int n = extensions.Length-1; n >= 0; n--)
+ extensions[n].ProcessMessage (message);
+ }
+ else
+ {
+ for (int n = 0; n < extensions.Length; n++)
+ extensions[n].ProcessMessage (message);
+ }
}
-\r
- #endregion // Methods\r
- }\r
-\r
- internal class SoapExtensionRuntimeConfig\r
- {\r
- public Type Type;\r
- public int Priority;\r
- public object InitializationInfo;\r
- }\r
+
+ #endregion // Methods
+ }
+
+ internal class SoapExtensionRuntimeConfig
+ {
+ public Type Type;
+ public int Priority;
+ public object InitializationInfo;
+ }
}