public UddiException(SoapException soapException) : base("", soapException)
        {
            dispositionReport        = null;
            hasDispositionReportData = false;

            //
            // The soap exception passed in SHOULD contain a disposition report.
            // Deserialize it into an object and use the error number in this exception
            //
            if (false == Utility.StringEmpty(soapException.Detail.InnerXml))
            {
                //
                // Translate the XML into the current version.
                //
                string dispositionReportXml = UddiVersionSupport.Translate(soapException.Detail.InnerXml, UddiVersionSupport.CurrentVersion);

                StringReader reader = new StringReader(dispositionReportXml);
                if (null == serializer)
                {
                    serializer = new XmlSerializer(typeof(DispositionReport));
                }

                dispositionReport = ( DispositionReport )serializer.Deserialize(reader);
                reader.Close();
            }

            hasDispositionReportData = (null != dispositionReport) &&
                                       (null != dispositionReport.Results) &&
                                       (dispositionReport.Results.Count > 0);
        }
        //
        // TODO: at some point it may be necessary to pass in the current version as a parameter if the transforms become
        // more complicated.
        //

        /// <summary>
        /// Constructor.  We read all the XML sent from the server, do our version manipulation, then write the new XML
        /// into our inner responseStream object.
        /// </summary>
        /// <param name="responseStream">This object should be the responseStream from a WebResponse object.</param>
        public UddiResponseStream(Stream responseStream)
        {
            try
            {
                //
                // Get the XML the server sent to us.
                //
                StreamReader reader      = new StreamReader(responseStream);
                string       responseXml = reader.ReadToEnd();
                reader.Close();

                //
                // TODO: Consider making this class more generic, ie. have a IUddiResponseHandler interface:
                //	IUddiResponseHandler
                //		string HandleResponse( string xml );
                //

                //
                // Translate the incoming XML into the current version.
                //
                string transformedXml = UddiVersionSupport.Translate(responseXml, UddiVersionSupport.CurrentVersion);

                //
                // Write this transformed XML into the 'real' stream.
                //
                StreamUtility.WriteStringToStream(this, transformedXml);
            }
            finally
            {
                this.Position = 0;
            }
        }
        /// <summary>
        /// Before we actually close the request stream, we want to manipulate the XML.
        /// </summary>
        public override void Close()
        {
            try
            {
                //
                // Rewind ourselves.
                //
                this.Position = 0;

                //
                // Read the XML that was written; this is the XML request that will be sent to the Uddi server.
                //
                StreamReader reader     = new StreamReader(this);
                string       requestXml = reader.ReadToEnd();

                //
                // TODO: Consider making this class more generic, ie. have a IUddiRequestHandler interface:
                //	IUddiResponseHandler
                //		string HandleRequest( string xml );
                //

                //
                // Transform the content to a correct version on the server if we are not using the current version.
                //
                string transformedXml = requestXml;
                if (uddiVersion != UddiVersionSupport.CurrentVersion)
                {
                    transformedXml = UddiVersionSupport.Translate(requestXml, uddiVersion);
                }

                //
                // Write the transformed data to the 'real' stream.
                //
                StreamUtility.WriteStringToStream(innerStream, transformedXml);
            }
            finally
            {
                //
                // Make sure we clean up properly.
                //
                innerStream.Close();
                base.Close();
            }
        }