Jelajahi Sumber

* SoapReflectionImporter.cs, XmlMembersMapping.cs, XmlReflectionImporter.cs,
XmlSchemaImporter.cs, XmlTypeMapElementInfo.cs, XmlTypeMapping.cs:
When using rpc format on a web service, members don't need to have any
specific namespace. Added a flag for turning namespace check on/off.

svn path=/trunk/mcs/; revision=20868

Lluis Sanchez 22 tahun lalu
induk
melakukan
e50b09d072

+ 7 - 0
mcs/class/System.XML/System.Xml.Serialization/ChangeLog

@@ -1,3 +1,10 @@
+2003-12-08  Lluis Sanchez Gual <[email protected]>
+
+	* SoapReflectionImporter.cs, XmlMembersMapping.cs, XmlReflectionImporter.cs,
+	  XmlSchemaImporter.cs, XmlTypeMapElementInfo.cs, XmlTypeMapping.cs:
+	  When using rpc format on a web service, members don't need to have any
+	  specific namespace. Added a flag for turning namespace check on/off.
+
 2003-11-27  Lluis Sanchez Gual <[email protected]>
 
 	* XmlSerializationReader.cs: Generate identifiers for arrays user a counter.

+ 1 - 1
mcs/class/System.XML/System.Xml.Serialization/SoapReflectionImporter.cs

@@ -66,7 +66,7 @@ namespace System.Xml.Serialization {
 				XmlTypeMapMember mapMem = CreateMapMember (members[n], ns);
 				mapping[n] = new XmlMemberMapping (members[n].MemberName, ns, mapMem, true);
 			}
-			XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, mapping);
+			XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, writeAccessors, mapping);
 			mps.RelatedMaps = relatedMaps;
 			mps.Format = SerializationFormat.Encoded;
 			return mps;

+ 4 - 3
mcs/class/System.XML/System.Xml.Serialization/XmlMembersMapping.cs

@@ -22,15 +22,15 @@ namespace System.Xml.Serialization {
 		{
 		}
 
-		internal XmlMembersMapping (XmlMemberMapping[] mapping): this ("", null, false, mapping)
+		internal XmlMembersMapping (XmlMemberMapping[] mapping): this ("", null, false, false, mapping)
 		{
 		}
 
-		internal XmlMembersMapping (string elementName, string ns, XmlMemberMapping[] mapping): this (elementName, ns, true, mapping)
+		internal XmlMembersMapping (string elementName, string ns, XmlMemberMapping[] mapping): this (elementName, ns, true, false, mapping)
 		{
 		}
 
-		internal XmlMembersMapping (string elementName, string ns, bool hasWrapperElement, XmlMemberMapping[] mapping)
+		internal XmlMembersMapping (string elementName, string ns, bool hasWrapperElement, bool writeAccessors, XmlMemberMapping[] mapping)
 		{
 			_elementName = elementName;
 			_namespace = ns;
@@ -38,6 +38,7 @@ namespace System.Xml.Serialization {
 			_mapping = mapping;
 
 			ClassMap map = new ClassMap ();
+			map.IgnoreMemberNamespace = writeAccessors;
 			foreach (XmlMemberMapping mm in mapping)
 				map.AddMember (mm.TypeMapMember);
 			ObjectMap = map;

+ 1 - 1
mcs/class/System.XML/System.Xml.Serialization/XmlReflectionImporter.cs

@@ -79,7 +79,7 @@ namespace System.Xml.Serialization {
 				XmlTypeMapMember mapMem = CreateMapMember (members[n], ns);
 				mapping[n] = new XmlMemberMapping (members[n].MemberName, ns, mapMem, false);
 			}
-			XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, mapping);
+			XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, false, mapping);
 			mps.RelatedMaps = relatedMaps;
 			mps.Format = SerializationFormat.Literal;
 			return mps;

+ 1 - 1
mcs/class/System.XML/System.Xml.Serialization/XmlSchemaImporter.cs

@@ -166,7 +166,7 @@ namespace System.Xml.Serialization {
 				mapping[n] = ImportMemberMapping (members[n].MemberName, members[n].MemberType.Namespace, td);
 			}
 			BuildPendingMaps ();
-			return new XmlMembersMapping (name, ns, hasWrapperElement, mapping);
+			return new XmlMembersMapping (name, ns, hasWrapperElement, false, mapping);
 		}
 		
 		public XmlMembersMapping ImportEncodedMembersMapping (string name, string ns, SoapSchemaMember member)

+ 1 - 1
mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapElementInfo.cs

@@ -28,7 +28,7 @@ namespace System.Xml.Serialization
 		XmlTypeMapping _mappedType;
 		TypeData _type;
 		bool _wrappedElement = true;
-
+		
 		public XmlTypeMapElementInfo (XmlTypeMapMember member, TypeData type)
 		{
 			_member = member;

+ 17 - 4
mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs

@@ -143,6 +143,7 @@ namespace System.Xml.Serialization
 		XmlTypeMapMemberAnyAttribute _defaultAnyAttribute;
 		XmlTypeMapMemberNamespaces _namespaceDeclarations;
 		XmlTypeMapMember _xmlTextCollector;
+		bool _ignoreMemberNamespace;
 
 		public void AddMember (XmlTypeMapMember member)
 		{
@@ -151,7 +152,7 @@ namespace System.Xml.Serialization
 			{
 				XmlTypeMapMemberAttribute atm = (XmlTypeMapMemberAttribute)member;
 				if (_attributeMembers == null) _attributeMembers = new Hashtable();
-				string key = atm.AttributeName + "/" + atm.Namespace;
+				string key = BuildKey (atm.AttributeName, atm.Namespace);
 				if (_attributeMembers.ContainsKey (key))
 					throw new InvalidOperationException ("The XML attribute named '" + atm.AttributeName + "' from namespace '" + atm.Namespace + "' already present in the current scope. Use XML attributes to specify another XML name or namespace for the attribute.");
 				_attributeMembers.Add (key, member);
@@ -195,7 +196,7 @@ namespace System.Xml.Serialization
 			ICollection elemsInfo = ((XmlTypeMapMemberElement)member).ElementInfo;
 			foreach (XmlTypeMapElementInfo elem in elemsInfo)
 			{
-				string key = elem.ElementName+"/"+elem.Namespace;
+				string key = BuildKey (elem.ElementName, elem.Namespace);
 				if (_elements.ContainsKey (key)) 
 					throw new InvalidOperationException ("The XML element named '" + elem.ElementName + "' from namespace '" + elem.Namespace + "' already present in the current scope. Use XML attributes to specify another XML name or namespace for the element.");
 				_elements.Add (key, elem);
@@ -212,13 +213,13 @@ namespace System.Xml.Serialization
 		public XmlTypeMapMemberAttribute GetAttribute (string name, string ns)
 		{
 			if (_attributeMembers == null) return null;
-			return (XmlTypeMapMemberAttribute)_attributeMembers[name + "/" + ns];
+			return (XmlTypeMapMemberAttribute)_attributeMembers [BuildKey(name,ns)];
 		}
 
 		public XmlTypeMapElementInfo GetElement (string name, string ns)
 		{
 			if (_elements == null) return null;
-			return (XmlTypeMapElementInfo)_elements[name + "/" + ns];
+			return (XmlTypeMapElementInfo)_elements [BuildKey(name,ns)];
 		}
 		
 		public XmlTypeMapElementInfo GetElement (int index)
@@ -240,11 +241,23 @@ namespace System.Xml.Serialization
 			return _elementsByIndex [index];
 		}
 		
+		private string BuildKey (string name, string ns)
+		{
+			if (_ignoreMemberNamespace) return name;
+			else return name + " / " + ns;
+		}
+		
 		public ICollection AllElementInfos
 		{
 			get { return _elements.Values; }
 		}
 		
+		
+		public bool IgnoreMemberNamespace
+		{
+			get { return _ignoreMemberNamespace; }
+			set { _ignoreMemberNamespace = value; }
+		}
 
 		public XmlTypeMapMember FindMember (string name)
 		{