* ContractReference.cs, DiscoveryDocumentReference.cs: Delegate handling
authorLluis Sanchez <lluis@novell.com>
Wed, 10 Mar 2004 20:01:17 +0000 (20:01 -0000)
committerLluis Sanchez <lluis@novell.com>
Wed, 10 Mar 2004 20:01:17 +0000 (20:01 -0000)
  of errors to the base class.
* ContractSearchPattern.cs, DiscoveryDocumentLinksPattern.cs,
  DiscoveryDocumentSearchPattern.cs, XmlSchemaSearchPattern.cs: Implemented.
* DiscoveryClientProtocol.cs: Do not throw exceptions in ResolveAll method,
  rather add them to the errors list.
* DiscoveryReference.cs: Generate DiscoveryException where needed, so
  DiscoveryClientProtocol can get the url for which an exception was thrown.
* DiscoveryExceptionDictionary.cs: Implemented.

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

mcs/class/System.Web.Services/System.Web.Services.Discovery/ChangeLog
mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractReference.cs
mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractSearchPattern.cs
mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientProtocol.cs
mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentLinksPattern.cs
mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentReference.cs
mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentSearchPattern.cs
mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryExceptionDictionary.cs
mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryReference.cs
mcs/class/System.Web.Services/System.Web.Services.Discovery/XmlSchemaSearchPattern.cs

index c7ec62a4b58683aff743ebbc9e6149b01f72dc45..16c120f4b3753e20de5b849aa5d35bfc7ede6018 100755 (executable)
@@ -1,3 +1,15 @@
+2004-03-10  Lluis Sanchez Gual  <lluis@ximian.com>
+
+       * ContractReference.cs, DiscoveryDocumentReference.cs: Delegate handling 
+         of errors to the base class.
+       * ContractSearchPattern.cs, DiscoveryDocumentLinksPattern.cs, 
+         DiscoveryDocumentSearchPattern.cs, XmlSchemaSearchPattern.cs: Implemented.
+       * DiscoveryClientProtocol.cs: Do not throw exceptions in ResolveAll method,
+         rather add them to the errors list.
+       * DiscoveryReference.cs: Generate DiscoveryException where needed, so
+         DiscoveryClientProtocol can get the url for which an exception was thrown.
+       * DiscoveryExceptionDictionary.cs: Implemented.
+
 2004-03-10  Lluis Sanchez Gual  <lluis@ximian.com>
 
        * DiscoveryClientProtocol.cs: Read additional information (such as soap
index c4543c739c2847f0a32457621d639a090af6b9c4..97ddaa11a10ac46780f8b1e44a8bcb868598bafc 100755 (executable)
@@ -116,36 +116,43 @@ namespace System.Web.Services.Discovery {
                        {\r
                                if (prot.Documents.Contains (import.Location))  // Already resolved\r
                                        continue;\r
-                                       \r
-                               string url = import.Location;\r
-                               string contentType = null;\r
-                               Stream stream = prot.Download (ref url, ref contentType);\r
-                               XmlTextReader reader = new XmlTextReader (stream);\r
-                               reader.MoveToContent ();\r
                                \r
-                               DiscoveryReference refe;\r
-                               if (ServiceDescription.CanRead (reader))\r
+                               string url = import.Location;\r
+                               try\r
                                {\r
-                                       ServiceDescription refWsdl = ServiceDescription.Read (reader);\r
-                                       refe = new ContractReference ();\r
-                                       refe.ClientProtocol = prot;\r
-                                       refe.Url = url;\r
-                                       ((ContractReference)refe).ResolveInternal (prot, refWsdl);\r
-                                       prot.Documents.Add (url, refWsdl);\r
+                                       string contentType = null;\r
+                                       Stream stream = prot.Download (ref url, ref contentType);\r
+                                       XmlTextReader reader = new XmlTextReader (stream);\r
+                                       reader.MoveToContent ();\r
+                                       \r
+                                       DiscoveryReference refe;\r
+                                       if (ServiceDescription.CanRead (reader))\r
+                                       {\r
+                                               ServiceDescription refWsdl = ServiceDescription.Read (reader);\r
+                                               refe = new ContractReference ();\r
+                                               refe.ClientProtocol = prot;\r
+                                               refe.Url = url;\r
+                                               ((ContractReference)refe).ResolveInternal (prot, refWsdl);\r
+                                               prot.Documents.Add (url, refWsdl);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               XmlSchema schema = XmlSchema.Read (reader, null);\r
+                                               refe = new SchemaReference ();\r
+                                               refe.ClientProtocol = prot;\r
+                                               refe.Url = url;\r
+                                               prot.Documents.Add (url, schema);\r
+                                       }\r
+                                       \r
+                                       if (!prot.References.Contains (url))\r
+                                               prot.References.Add (refe);\r
+                                               \r
+                                       reader.Close ();\r
                                }\r
-                               else\r
+                               catch (Exception ex)\r
                                {\r
-                                       XmlSchema schema = XmlSchema.Read (reader, null);\r
-                                       refe = new SchemaReference ();\r
-                                       refe.ClientProtocol = prot;\r
-                                       refe.Url = url;\r
-                                       prot.Documents.Add (url, schema);\r
+                                       ReportError (url, ex);\r
                                }\r
-                               \r
-                               if (!prot.References.Contains (url))\r
-                                       prot.References.Add (refe);\r
-                                       \r
-                               reader.Close ();\r
                        }\r
                }\r
                 \r
index 87a5d25a927d06138b4f43a74ea6f3ceb2824079..6620cf50d33bfe36f97c43a7d5a818f012fc8f24 100755 (executable)
@@ -3,6 +3,7 @@
 //\r
 // Author:\r
 //   Dave Bettin (javabettin@yahoo.com)\r
+//   Lluis Sanchez Gual (lluis@ximian.com)\r
 //\r
 // Copyright (C) Dave Bettin, 2002\r
 //\r
@@ -18,10 +19,8 @@ namespace System.Web.Services.Discovery {
 \r
                #region Constructors\r
 \r
-               [MonoTODO]\r
                public ContractSearchPattern () \r
                {\r
-                       throw new NotImplementedException ();\r
                }\r
                \r
                #endregion // Constructors\r
@@ -36,10 +35,13 @@ namespace System.Web.Services.Discovery {
 \r
                #region Methods\r
 \r
-               [MonoTODO]\r
                public override DiscoveryReference GetDiscoveryReference (string filename)\r
                {\r
-                       throw new NotImplementedException ();\r
+                       ContractReference refe = new ContractReference ();\r
+                       refe.Url = filename;\r
+                       refe.Ref = filename;\r
+                       refe.DocRef = filename;\r
+                       return refe;\r
                }\r
 \r
                #endregion // Methods\r
index 750e0d75e8face7ae698a0178a719b54b4ecf5bd..3b29dc9f8efc92755447dd2e3b801f41387eaf4b 100755 (executable)
@@ -154,8 +154,10 @@ namespace System.Web.Services.Discovery {
                                references.Add (re.Url, re);\r
                        }\r
                        \r
-                       foreach (object info in doc.AdditionalInfo)\r
-                               additionalInformation.Add (info);\r
+                       if (doc.AdditionalInfo != null) {\r
+                               foreach (object info in doc.AdditionalInfo)\r
+                                       additionalInformation.Add (info);\r
+                       }\r
                }\r
                \r
                public Stream Download (ref string url)\r
@@ -211,10 +213,21 @@ namespace System.Web.Services.Discovery {
                        ArrayList list = new ArrayList (References.Values);\r
                        foreach (DiscoveryReference re in list)\r
                        {\r
-                               if (re is DiscoveryDocumentReference)\r
-                                       ((DiscoveryDocumentReference)re).ResolveAll ();\r
-                               else\r
-                                       re.Resolve ();\r
+                               try\r
+                               {\r
+                                       if (re is DiscoveryDocumentReference)\r
+                                               ((DiscoveryDocumentReference)re).ResolveAll ();\r
+                                       else\r
+                                               re.Resolve ();\r
+                               }\r
+                               catch (DiscoveryException ex)\r
+                               {\r
+                                       Errors [ex.Url] = ex.Exception; \r
+                               }\r
+                               catch (Exception ex)\r
+                               {\r
+                                       Errors [re.Url] = ex;   \r
+                               }\r
                        }\r
                }\r
                \r
@@ -301,6 +314,19 @@ namespace System.Web.Services.Discovery {
                        \r
                        #endregion // Properties\r
                }\r
+               \r
                #endregion // Classes\r
        }\r
+               \r
+       internal class DiscoveryException : Exception\r
+       {\r
+               public string Url;\r
+               public Exception Exception;\r
+               \r
+               public DiscoveryException (string url, Exception origin)\r
+               {\r
+                       Url = url;\r
+                       Exception = origin;\r
+               }\r
+       }\r
 }
index 19621b26d4ba3c83d5208fe227b310463781ed76..4ae5aef4cafbba4a64ccd39e4856a6adb4b4719d 100755 (executable)
@@ -3,6 +3,7 @@
 //\r
 // Author:\r
 //   Dave Bettin (javabettin@yahoo.com)\r
+//   Lluis Sanchez Gual (lluis@ximian.com)\r
 //\r
 // Copyright (C) Dave Bettin, 2002\r
 //\r
@@ -18,10 +19,8 @@ namespace System.Web.Services.Discovery {
 \r
                #region Constructors\r
 \r
-               [MonoTODO]\r
                public DiscoveryDocumentLinksPattern () \r
                {\r
-                       throw new NotImplementedException ();\r
                }\r
                \r
                #endregion // Constructors\r
@@ -36,10 +35,12 @@ namespace System.Web.Services.Discovery {
 \r
                #region Methods\r
 \r
-               [MonoTODO]\r
                public override DiscoveryReference GetDiscoveryReference (string filename)\r
                {\r
-                       throw new NotImplementedException ();\r
+                       DiscoveryDocumentReference refe = new DiscoveryDocumentReference ();\r
+                       refe.Url = filename;\r
+                       refe.Ref = filename;\r
+                       return refe;\r
                }\r
 \r
                #endregion // Methods\r
index 8db4834cbc575b5f552faf0f345843ebac608b06..3dc40d450a7521cfe1521bf746acd20cf1dd0acf 100755 (executable)
@@ -106,10 +106,17 @@ namespace System.Web.Services.Discovery {
                        DiscoveryDocument doc = document;\r
                        foreach (DiscoveryReference re in doc.References)\r
                        {\r
-                               if (re is DiscoveryDocumentReference)\r
-                                       ((DiscoveryDocumentReference)re).ResolveAll ();\r
-                               else\r
-                                       re.Resolve ();\r
+                               try\r
+                               {\r
+                                       if (re is DiscoveryDocumentReference)\r
+                                               ((DiscoveryDocumentReference)re).ResolveAll ();\r
+                                       else\r
+                                               re.Resolve ();\r
+                               }\r
+                               catch (Exception ex)\r
+                               {\r
+                                       ReportError (re.Url, ex);\r
+                               }\r
                        }\r
                }\r
                \r
index 97024add9d2d53a3de51a327c5b2624319d7da18..813016528e657491232a85c65cfd5371baf2939a 100755 (executable)
@@ -3,6 +3,7 @@
 //\r
 // Author:\r
 //   Dave Bettin (javabettin@yahoo.com)\r
+//   Lluis Sanchez Gual (lluis@ximian.com)\r
 //\r
 // Copyright (C) Dave Bettin, 2002\r
 //\r
@@ -18,10 +19,8 @@ namespace System.Web.Services.Discovery {
 \r
                #region Constructors\r
 \r
-               [MonoTODO]\r
                public DiscoveryDocumentSearchPattern () \r
                {\r
-                       throw new NotImplementedException ();\r
                }\r
                \r
                #endregion // Constructors\r
@@ -36,10 +35,12 @@ namespace System.Web.Services.Discovery {
 \r
                #region Methods\r
 \r
-               [MonoTODO]\r
                public override DiscoveryReference GetDiscoveryReference (string filename)\r
                {\r
-                       throw new NotImplementedException ();\r
+                       DiscoveryDocumentReference refe = new DiscoveryDocumentReference ();\r
+                       refe.Url = filename;\r
+                       refe.Ref = filename;\r
+                       return refe;\r
                }\r
 \r
                #endregion // Methods\r
index 09a6aecaa4c01211a8d42b2db751304637230e94..c95da325b258651cf1e9e11dcee48a3def4564d3 100755 (executable)
@@ -3,18 +3,19 @@
 //\r
 // Author:\r
 //   Dave Bettin (javabettin@yahoo.com)\r
+//   Lluis Sanchez Gual (lluis@ximian.com)\r
 //\r
 // Copyright (C) Dave Bettin, 2002\r
 //\r
 \r
 using System.Collections;\r
 \r
-namespace System.Web.Services.Discovery {\r
-       public sealed class DiscoveryExceptionDictionary : DictionaryBase {\r
-\r
+namespace System.Web.Services.Discovery \r
+{\r
+       public sealed class DiscoveryExceptionDictionary : DictionaryBase \r
+       {\r
                #region Constructors\r
 \r
-               [MonoTODO]\r
                public DiscoveryExceptionDictionary () \r
                {\r
                }\r
@@ -24,43 +25,39 @@ namespace System.Web.Services.Discovery {
                #region Properties\r
 \r
                public Exception this[string url] {\r
-                       [MonoTODO]\r
-                       get { throw new NotImplementedException (); }\r
-                       \r
-                       [MonoTODO]\r
-                       set { throw new NotImplementedException (); }\r
+                       get { return (Exception) InnerHashtable [url]; }\r
+                       set { \r
+                               if (url == null)\r
+                                       throw new ArgumentNullException ();\r
+                               InnerHashtable [url] = value; \r
+                       }\r
                }\r
                \r
                public ICollection Keys {\r
-                       [MonoTODO]\r
-                       get { throw new NotImplementedException (); }\r
+                       get { return InnerHashtable.Keys; }\r
                }\r
                \r
                public ICollection Values {\r
-                       [MonoTODO]\r
-                       get { throw new NotImplementedException (); }\r
+                       get { return InnerHashtable.Values; }\r
                }\r
                \r
                #endregion // Properties\r
 \r
                #region Methods\r
 \r
-               [MonoTODO]\r
                public void Add (string url, Exception value)\r
                {\r
-                        throw new NotImplementedException ();\r
+                       InnerHashtable.Add (url, value);\r
                }\r
 \r
-               [MonoTODO]\r
                public bool Contains (string url)\r
                {\r
-                        throw new NotImplementedException ();\r
+                       return InnerHashtable.Contains (url);\r
                }\r
                \r
-               [MonoTODO]\r
                public void Remove (string url)\r
                {\r
-                        throw new NotImplementedException ();\r
+                       InnerHashtable.Remove (url);\r
                }\r
 \r
                #endregion // Methods\r
index 2a4dae50b2b467b1f79a630d6d38098f18a1b2e9..1187e5abfb4b5647927a9b9252b4b9fdddf9fc17 100755 (executable)
@@ -81,21 +81,34 @@ namespace System.Web.Services.Discovery {
                public void Resolve () \r
                {\r
                        if (clientProtocol == null) \r
-                               throw new InvalidOperationException ("The ClientProtocol property is a null reference");\r
+                               throw new InvalidOperationException ("The ClientProtocol property is a null reference.");\r
                        \r
                        if (clientProtocol.Documents.Contains (Url))    // Already resolved\r
                                return;\r
                        \r
-                       string contentType = null;\r
-                       string url = Url;\r
-                       Stream stream = clientProtocol.Download (ref url, ref contentType);\r
-                       Resolve (contentType, stream);\r
+                       try\r
+                       {\r
+                               string contentType = null;\r
+                               string url = Url;\r
+                               Stream stream = clientProtocol.Download (ref url, ref contentType);\r
+                               Resolve (contentType, stream);\r
+                       }\r
+                       catch (Exception ex)\r
+                       {\r
+                               ReportError (Url, ex);\r
+                       }\r
                }\r
                 \r
                protected internal abstract void Resolve (string contentType, Stream stream);\r
                \r
-               public abstract void WriteDocument (object document, Stream stream);            \r
+               public abstract void WriteDocument (object document, Stream stream);\r
 \r
+               internal void ReportError (string url, Exception ex)\r
+               {\r
+                       if (ex is DiscoveryException) throw ex;\r
+                       else throw new DiscoveryException (url, ex);\r
+               }\r
+               \r
                #endregion // Methods\r
        }\r
 }
index f597a6d478a6c561a565bd21d0d83d54f3497a72..27aae32081e835dd449b6133e74a9de6303a1946 100755 (executable)
@@ -3,6 +3,7 @@
 //\r
 // Author:\r
 //   Dave Bettin (javabettin@yahoo.com)\r
+//   Lluis Sanchez Gual (lluis@ximian.com)\r
 //\r
 // Copyright (C) Dave Bettin, 2002\r
 //\r
@@ -18,10 +19,8 @@ namespace System.Web.Services.Discovery {
 \r
                #region Constructors\r
 \r
-               [MonoTODO]\r
                public XmlSchemaSearchPattern () \r
                {\r
-                       throw new NotImplementedException ();\r
                }\r
                \r
                #endregion // Constructors\r
@@ -36,10 +35,12 @@ namespace System.Web.Services.Discovery {
 \r
                #region Methods\r
 \r
-               [MonoTODO]\r
                public override DiscoveryReference GetDiscoveryReference (string filename)\r
                {\r
-                       throw new NotImplementedException ();\r
+                       SchemaReference refe = new SchemaReference ();\r
+                       refe.Url = filename;\r
+                       refe.Ref = filename;\r
+                       return refe;\r
                }\r
 \r
                #endregion // Methods\r