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