Author: atsushi
Date: 2007-04-27 03:57:43 -0400 (Fri, 27 Apr 2007)
New Revision: 76370

Modified:
   trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog
   trunk/olive/class/System.ServiceModel/System.ServiceModel/EndpointAddress.cs
   
trunk/olive/class/System.ServiceModel/System.ServiceModel/EndpointAddress10.cs
Log:
2007-04-27  Atsushi Enomoto  <[EMAIL PROTECTED]>

        * EndpointAddress.cs, EndpointAddress10.cs :
          more refactoring.
          read Metadata element.



Modified: trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog
===================================================================
--- trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog 
2007-04-27 06:01:25 UTC (rev 76369)
+++ trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog 
2007-04-27 07:57:43 UTC (rev 76370)
@@ -1,3 +1,9 @@
+2007-04-27  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * EndpointAddress.cs, EndpointAddress10.cs :
+         more refactoring.
+         read Metadata element.
+
 2007-04-20  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * EndpointAddress.cs,

Modified: 
trunk/olive/class/System.ServiceModel/System.ServiceModel/EndpointAddress.cs
===================================================================
--- 
trunk/olive/class/System.ServiceModel/System.ServiceModel/EndpointAddress.cs    
    2007-04-27 06:01:25 UTC (rev 76369)
+++ 
trunk/olive/class/System.ServiceModel/System.ServiceModel/EndpointAddress.cs    
    2007-04-27 07:57:43 UTC (rev 76370)
@@ -37,6 +37,7 @@
 using System.Xml.Schema;
 using System.Xml.Serialization;
 using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
 
 namespace System.ServiceModel
 {
@@ -251,42 +252,70 @@
                        XmlReader reader)
                {
                        reader.MoveToContent ();
-                       if (reader.NodeType == XmlNodeType.Element &&
-                           !reader.IsEmptyElement) {
-                               reader.Read ();
-                               reader.MoveToContent ();
+                       if (reader.NodeType != XmlNodeType.Element ||
+                           reader.IsEmptyElement)
+                               throw new ArgumentException ("Cannot detect 
appropriate WS-Addressing Address element.");
 
-                               if (addressingVersion == null) {
-                                       if (reader.NamespaceURI == 
AddressingVersion.WSAddressing10.Namespace)
-                                               addressingVersion = 
AddressingVersion.WSAddressing10;
-                                       else
-                                       if (reader.NamespaceURI == 
AddressingVersion.WSAddressingAugust2004.Namespace)
-                                               addressingVersion = 
AddressingVersion.WSAddressingAugust2004;
-                                       else
-                                               throw new ArgumentException 
("Cannot detect appropriate WS-Addressing version.");
-                               }
-                               
-                               if (reader.LocalName == "Address" && 
-                                       reader.NamespaceURI == 
addressingVersion.Namespace &&
-                                       reader.NodeType == XmlNodeType.Element 
&&
-                                       !reader.IsEmptyElement) {
+                       reader.Read ();
+                       reader.MoveToContent ();
 
-                                       EndpointAddress a = new EndpointAddress 
(
-                                               
reader.ReadElementContentAsString ());
-                                       if (addressingVersion == 
AddressingVersion.WSAddressing10 && 
-                                               a.Uri == w3c_anonymous)
-                                               a = new EndpointAddress 
(anonymous_role);
+                       if (addressingVersion == null) {
+                               if (reader.NamespaceURI == 
AddressingVersion.WSAddressing10.Namespace)
+                                       addressingVersion = 
AddressingVersion.WSAddressing10;
+                               else
+                               if (reader.NamespaceURI == 
AddressingVersion.WSAddressingAugust2004.Namespace)
+                                       addressingVersion = 
AddressingVersion.WSAddressingAugust2004;
+                               else
+                                       throw new ArgumentException ("Cannot 
detect appropriate WS-Addressing version.");
+                       }
 
-                                       reader.MoveToContent ();
-                                       reader.ReadEndElement ();
-                                       return a;
-                               }
+                       EndpointAddress ea = ReadContents (addressingVersion, 
reader);
 
+                       reader.MoveToContent ();
+                       reader.ReadEndElement ();
+                       return ea;
+               }
+               
+               private static EndpointAddress ReadContents (
+                       AddressingVersion addressingVersion, XmlReader reader)
+               {
+                       Uri uri = null;
+                       MetadataSet metadata = null;
+                       EndpointIdentity identity = null;
+                       reader.MoveToContent ();
+                       if (reader.LocalName == "Address" && 
+                           reader.NamespaceURI == addressingVersion.Namespace 
&&
+                           reader.NodeType == XmlNodeType.Element &&
+                           !reader.IsEmptyElement)
+                               uri = new Uri 
(reader.ReadElementContentAsString ());
+                       else
                                throw new XmlException (String.Format (
-                                               "Expecting 'Address' from 
namespace '{0}', but found '{1}' from namespace '{2}'",
-                                               addressingVersion.Namespace, 
reader.LocalName, reader.NamespaceURI));
+                                       "Expecting 'Address' from namespace 
'{0}', but found '{1}' from namespace '{2}'",
+                                       addressingVersion.Namespace, 
reader.LocalName, reader.NamespaceURI));
+
+                       reader.MoveToContent ();
+                       if (reader.LocalName == "Metadata" &&
+                           reader.NamespaceURI == addressingVersion.Namespace 
&&
+                           !reader.IsEmptyElement) {
+                               reader.Read ();
+                               metadata = (MetadataSet) new XmlSerializer 
(typeof (MetadataSet)).Deserialize (reader);
+                               reader.MoveToContent ();
+                               reader.ReadEndElement ();
                        }
-                       throw new ArgumentException ("Cannot detect appropriate 
WS-Addressing Address element.");
+                       reader.MoveToContent ();
+                       if (reader.LocalName == "Identity" &&
+                           reader.NamespaceURI == Constants.WsaIdentityUri) {
+                               // FIXME: implement
+                               reader.Skip ();
+                       }
+
+                       if (addressingVersion == 
AddressingVersion.WSAddressing10 && uri == w3c_anonymous)
+                               uri = anonymous_role;
+
+                       if (metadata == null)
+                               return new EndpointAddress (uri, identity);
+                       return new EndpointAddress (uri, identity,
+                               AddressHeader.CreateAddressHeader (metadata));
                }
 
                public override string ToString ()

Modified: 
trunk/olive/class/System.ServiceModel/System.ServiceModel/EndpointAddress10.cs
===================================================================
--- 
trunk/olive/class/System.ServiceModel/System.ServiceModel/EndpointAddress10.cs  
    2007-04-27 06:01:25 UTC (rev 76369)
+++ 
trunk/olive/class/System.ServiceModel/System.ServiceModel/EndpointAddress10.cs  
    2007-04-27 07:57:43 UTC (rev 76370)
@@ -97,6 +97,10 @@
                        if (address.Identity == null)
                                return;
 
+                       if (address.Headers != null)
+                               foreach (AddressHeader ah in address.Headers)
+                                       ah.WriteAddressHeader (writer);
+
                        writer.WriteStartElement ("Identity", 
Constants.WsaIdentityUri);
                        X509CertificateEndpointIdentity x509 =
                                address.Identity as 
X509CertificateEndpointIdentity;

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to