+2006-11-30 Atsushi Enomoto <atsushi@ximian.com>
+
+ * SoapProtocolReflector.cs : Added alias HeaderInfo to
+ SoapHeaderMapping. Renamed some properties.
+
2006-11-30 Atsushi Enomoto <atsushi@ximian.com>
* HttpSimpleProtocolReflector.cs : LogicalTypeInfo -> ServerType.
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;
+2006-11-30 Atsushi Enomoto <atsushi@ximian.com>
+
+ * 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 <atsushi@ximian.com>
* ServerType.cs : Now LogicalTypeInfo became this type to implement
// 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;
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)
}
}
- 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
// 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]
get { throw new NotImplementedException (); }
}
}
-}
-#endif
+}
// 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;
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)
HeaderInfo hinfo = FindHeader (headersInfo, header.GetType ());
if (hinfo != null) {
hinfo.SetHeaderValue (target, header);
- header.DidUnderstand = !hinfo.IsUnknownHeader;
+ header.DidUnderstand = !hinfo.Custom;
}
}
}
foreach (HeaderInfo headerInfo in headersInfo) {
if (headerInfo.HeaderType == headerType)
return headerInfo;
- else if (headerInfo.IsUnknownHeader)
+ else if (headerInfo.Custom)
unknownHeaderInfo = headerInfo;
}
return unknownHeaderInfo;