//-----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------
namespace System.IdentityModel.Protocols.WSTrust
{
using System.Collections.ObjectModel;
using System.Xml;
public class EndpointReference
{
Collection _details = new Collection();
Uri uri;
public Collection Details
{
get
{
return _details;
}
}
public EndpointReference(string uri)
{
if (uri == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("uri");
}
Uri tempUri = new Uri(uri);
if (!tempUri.IsAbsoluteUri)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("uri", SR.GetString(SR.ID0013));
}
this.uri = tempUri;
}
public Uri Uri
{
get
{
return uri;
}
}
public void WriteTo(XmlWriter writer)
{
if (writer == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("writer");
}
writer.WriteStartElement(WSAddressing10Constants.Prefix, WSAddressing10Constants.Elements.EndpointReference, WSAddressing10Constants.NamespaceUri);
writer.WriteStartElement(WSAddressing10Constants.Prefix, WSAddressing10Constants.Elements.Address, WSAddressing10Constants.NamespaceUri);
writer.WriteString(this.Uri.AbsoluteUri);
writer.WriteEndElement();
foreach ( XmlElement element in _details )
{
element.WriteTo( writer );
}
writer.WriteEndElement();
}
///
/// Reads an from xml reader.
///
/// The xml reader.
/// An instance.
public static EndpointReference ReadFrom(XmlReader reader)
{
return ReadFrom(XmlDictionaryReader.CreateDictionaryReader(reader));
}
///
/// Reads an from xml dictionary reader. The addressing version is defaulted to
/// .
///
/// The xml dictionary reader.
/// An instance.
public static EndpointReference ReadFrom(XmlDictionaryReader reader)
{
if (reader == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("reader");
}
reader.ReadFullStartElement();
reader.MoveToContent();
if (reader.IsNamespaceUri(WSAddressing10Constants.NamespaceUri) || reader.IsNamespaceUri(WSAddressing200408Constants.NamespaceUri))
{
if (reader.IsStartElement(WSAddressing10Constants.Elements.Address, WSAddressing10Constants.NamespaceUri) ||
reader.IsStartElement(WSAddressing10Constants.Elements.Address, WSAddressing200408Constants.NamespaceUri))
{
EndpointReference er = new EndpointReference(reader.ReadElementContentAsString());
while ( reader.IsStartElement() )
{
bool emptyElement = reader.IsEmptyElement;
XmlReader subtreeReader = reader.ReadSubtree();
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.Load( subtreeReader );
er._details.Add( doc.DocumentElement );
if ( !emptyElement )
{
reader.ReadEndElement();
}
}
reader.ReadEndElement();
return er;
}
}
return null;
}
}
}