Browse Source

2006-11-30 Atsushi Enomoto <[email protected]>

	* SoapHeaderMapping.cs : Now HeaderInfo became this type to implement
	  this class. Remapped some members (e.g. IsUnknownHeader -> Custom).
	* Methods.cs : so, split HeaderInfo from here.
	* SoapMessage.cs : Added alias HeaderInfo to SoapHeaderMapping.
	  Renamed some properties.

	* SoapProtocolReflector.cs : Added alias HeaderInfo to
	  SoapHeaderMapping. Renamed some properties.


svn path=/branches/atsushi/mcs/; revision=68741
Atsushi Eno 19 năm trước cách đây
mục cha
commit
b6a1f08fbf

+ 5 - 0
mcs/class/System.Web.Services/System.Web.Services.Description/ChangeLog

@@ -1,3 +1,8 @@
+2006-11-30  Atsushi Enomoto  <[email protected]>
+
+	* SoapProtocolReflector.cs : Added alias HeaderInfo to
+	  SoapHeaderMapping. Renamed some properties.
+
 2006-11-30  Atsushi Enomoto  <[email protected]>
 
 	* HttpSimpleProtocolReflector.cs : LogicalTypeInfo -> ServerType.

+ 2 - 2
mcs/class/System.Web.Services/System.Web.Services.Description/SoapProtocolReflector.cs

@@ -95,9 +95,9 @@ namespace System.Web.Services.Description {
 			AddOperationMsgBindings (method, OperationBinding.Input);
 			AddOperationMsgBindings (method, OperationBinding.Output);
 
-			foreach (HeaderInfo hf in method.Headers)
+			foreach (SoapHeaderMapping hf in method.Headers)
 			{
-				if (hf.IsUnknownHeader) continue;
+				if (hf.Custom) continue;
 				
 				Message msg = new Message ();
 				msg.Name = Operation.Name + hf.HeaderType.Name;

+ 8 - 0
mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog

@@ -1,3 +1,11 @@
+2006-11-30  Atsushi Enomoto  <[email protected]>
+
+	* SoapHeaderMapping.cs : Now HeaderInfo became this type to implement
+	  this class. Remapped some members (e.g. IsUnknownHeader -> Custom).
+	* Methods.cs : so, split HeaderInfo from here.
+	* SoapMessage.cs : Added alias HeaderInfo to SoapHeaderMapping.
+	  Renamed some properties.
+
 2006-11-30  Atsushi Enomoto  <[email protected]>
 
 	* ServerType.cs : Now LogicalTypeInfo became this type to implement

+ 3 - 59
mcs/class/System.Web.Services/System.Web.Services.Protocols/Methods.cs

@@ -29,6 +29,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using HeaderInfo = System.Web.Services.Protocols.SoapHeaderMapping;
+
 using System.Reflection;
 using System.Collections;
 using System.Xml;
@@ -223,7 +225,7 @@ namespace System.Web.Services.Protocols {
 				
 				HeaderInfo header = new HeaderInfo (mems[0], att);
 				allHeaderList.Add (header);
-				if (!header.IsUnknownHeader) {
+				if (!header.Custom) {
 					if ((header.Direction & SoapHeaderDirection.In) != 0)
 						inHeaderList.Add (header);
 					if ((header.Direction & SoapHeaderDirection.Out) != 0)
@@ -427,64 +429,6 @@ namespace System.Web.Services.Protocols {
 		}
 	}
 
-	internal class HeaderInfo
-	{
-		internal MemberInfo Member;
-		internal SoapHeaderAttribute AttributeInfo;
-		internal Type HeaderType;
-		internal bool IsUnknownHeader;
-
-		public HeaderInfo (MemberInfo member, SoapHeaderAttribute attributeInfo)
-		{
-			Member = member;
-			AttributeInfo = attributeInfo;
-			if (Member is PropertyInfo) HeaderType = ((PropertyInfo)Member).PropertyType;
-			else HeaderType = ((FieldInfo)Member).FieldType;
-			
-			if (HeaderType == typeof(SoapHeader) || HeaderType == typeof(SoapUnknownHeader) ||
-				HeaderType == typeof(SoapHeader[]) || HeaderType == typeof(SoapUnknownHeader[]))
-			{
-				IsUnknownHeader = true;
-			}
-			else if (!typeof(SoapHeader).IsAssignableFrom (HeaderType))
-				throw new InvalidOperationException (string.Format ("Header members type must be a SoapHeader subclass"));
-		}
-		
-		public object GetHeaderValue (object ob)
-		{
-			if (Member is PropertyInfo) return ((PropertyInfo)Member).GetValue (ob, null);
-			else return ((FieldInfo)Member).GetValue (ob);
-		}
-
-		public void SetHeaderValue (object ob, SoapHeader header)
-		{
-			object value = header;
-			if (IsUnknownHeader && HeaderType.IsArray)
-			{
-				SoapUnknownHeader uheader = header as SoapUnknownHeader;
-				SoapUnknownHeader[] array = (SoapUnknownHeader[]) GetHeaderValue (ob);
-				if (array == null || array.Length == 0) {
-					value = new SoapUnknownHeader[] { uheader };
-				}
-				else {
-					SoapUnknownHeader[] newArray = new SoapUnknownHeader [array.Length+1];
-					Array.Copy (array, newArray, array.Length);
-					newArray [array.Length] = uheader;
-					value = newArray;
-				}
-			}
-			
-			if (Member is PropertyInfo) ((PropertyInfo)Member).SetValue (ob, value, null);
-			else ((FieldInfo)Member).SetValue (ob, value);
-		}
-		
-		public SoapHeaderDirection Direction
-		{
-			get { return AttributeInfo.Direction; }
-		}
-	}
-
-
 	//
 	// Holds the metadata loaded from the type stub, as well as
 	// the metadata for all the methods in the type

+ 67 - 17
mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderMapping.cs

@@ -28,36 +28,87 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
-
 using System.Reflection;
 
 namespace System.Web.Services.Protocols
 {
-	public sealed class SoapHeaderMapping
+#if NET_2_0
+	public
+#else
+	internal
+#endif
+	sealed class SoapHeaderMapping
 	{
-		internal SoapHeaderMapping ()
+		MemberInfo member;
+		Type header_type;
+		bool is_unknown_header;
+		SoapHeaderDirection direction;
+
+		internal SoapHeaderMapping (MemberInfo member, SoapHeaderAttribute attributeInfo)
+		{
+			this.member = member;
+			direction = attributeInfo.Direction;
+			if (member is PropertyInfo)
+				header_type = ((PropertyInfo) member).PropertyType;
+			else
+				header_type = ((FieldInfo) member).FieldType;
+			
+			if (HeaderType == typeof(SoapHeader) || HeaderType == typeof(SoapUnknownHeader) ||
+				HeaderType == typeof(SoapHeader[]) || HeaderType == typeof(SoapUnknownHeader[]))
+			{
+				is_unknown_header = true;
+			}
+			else if (!typeof(SoapHeader).IsAssignableFrom (HeaderType))
+				throw new InvalidOperationException (string.Format ("Header members type must be a SoapHeader subclass"));
+		}
+		
+		internal object GetHeaderValue (object ob)
 		{
+			if (member is PropertyInfo)
+				return ((PropertyInfo) member).GetValue (ob, null);
+			else
+				return ((FieldInfo) member).GetValue (ob);
 		}
 
-		[MonoTODO]
-		public bool Custom {
-			get { throw new NotImplementedException (); }
+		internal void SetHeaderValue (object ob, SoapHeader header)
+		{
+			object value = header;
+			if (Custom && HeaderType.IsArray)
+			{
+				SoapUnknownHeader uheader = header as SoapUnknownHeader;
+				SoapUnknownHeader[] array = (SoapUnknownHeader[]) GetHeaderValue (ob);
+				if (array == null || array.Length == 0) {
+					value = new SoapUnknownHeader[] { uheader };
+				}
+				else {
+					SoapUnknownHeader[] newArray = new SoapUnknownHeader [array.Length+1];
+					Array.Copy (array, newArray, array.Length);
+					newArray [array.Length] = uheader;
+					value = newArray;
+				}
+			}
+			
+			if (member is PropertyInfo)
+				((PropertyInfo) member).SetValue (ob, value, null);
+			else
+				((FieldInfo) member).SetValue (ob, value);
+		}
+		
+		public SoapHeaderDirection Direction
+		{
+			get { return direction; }
 		}
 
-		[MonoTODO]
-		public SoapHeaderDirection Direction {
-			get { throw new NotImplementedException (); }
+		public MemberInfo MemberInfo {
+			get { return member; }
 		}
 
-		[MonoTODO]
 		public Type HeaderType {
-			get { throw new NotImplementedException (); }
+			get { return header_type; }
 		}
 
-		[MonoTODO]
-		public MemberInfo MemberInfo {
-			get { throw new NotImplementedException (); }
+		public bool Custom {
+			get { return is_unknown_header; }
 		}
 
 		[MonoTODO]
@@ -65,6 +116,5 @@ namespace System.Web.Services.Protocols
 			get { throw new NotImplementedException (); }
 		}
 	}
-}
 
-#endif
+}

+ 5 - 3
mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs

@@ -29,6 +29,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using HeaderInfo = System.Web.Services.Protocols.SoapHeaderMapping;
+
 using System.ComponentModel;
 using System.IO;
 using System.Web.Services;
@@ -206,7 +208,7 @@ namespace System.Web.Services.Protocols {
 			Headers.Clear ();
 			foreach (HeaderInfo hi in headers) 
 			{
-				if ((hi.Direction & direction) != 0 && !hi.IsUnknownHeader) 
+				if ((hi.Direction & direction) != 0 && !hi.Custom) 
 				{
 					SoapHeader headerVal = hi.GetHeaderValue (target) as SoapHeader;
 					if (headerVal != null)
@@ -222,7 +224,7 @@ namespace System.Web.Services.Protocols {
 				HeaderInfo hinfo = FindHeader (headersInfo, header.GetType ());
 				if (hinfo != null) {
 					hinfo.SetHeaderValue (target, header);
-					header.DidUnderstand = !hinfo.IsUnknownHeader;
+					header.DidUnderstand = !hinfo.Custom;
 				}
 			}
 		}
@@ -234,7 +236,7 @@ namespace System.Web.Services.Protocols {
 			foreach (HeaderInfo headerInfo in headersInfo) {
 				if (headerInfo.HeaderType == headerType)
 					return headerInfo;
-				else if (headerInfo.IsUnknownHeader) 
+				else if (headerInfo.Custom) 
 					unknownHeaderInfo = headerInfo;
 			}
 			return unknownHeaderInfo;