/// Copyright (C) 2003, Erik LeBel,\r
///\r
\r
+#if !NET_2_0\r
+\r
using System;\r
+using System.Collections.Specialized;\r
using System.Xml;\r
using System.Xml.Schema;\r
using System.Collections;\r
using System.Net;\r
using System.Web.Services.Description;\r
using System.Web.Services.Discovery;\r
-using System.Reflection;
-
-using Microsoft.CSharp;
+using System.Reflection;\r
+\r
+using Microsoft.CSharp;\r
\r
namespace Mono.WebServices\r
{\r
\r
string fileName = null;\r
bool hasBindings = false;\r
-
+ \r
foreach (ServiceDescription desc in descriptions)\r
- {
- if (fileName == null && desc.Services.Count > 0)
+ {\r
+ if (fileName == null && desc.Services.Count > 0)\r
fileName = desc.Services[0].Name;\r
-
+\r
if (desc.Bindings.Count > 0 || desc.Services.Count > 0)\r
- hasBindings = true;
+ hasBindings = true;\r
}\r
\r
if (fileName == null)\r
///\r
private CodeDomProvider GetProvider()\r
{\r
- CodeDomProvider provider;
-
- switch (language.ToUpper ()) {
- case "CS":
- provider = new CSharpCodeProvider ();
- break;
- case "VB":
- provider = new Microsoft.VisualBasic.VBCodeProvider ();
- break;
- default:
- Type type = Type.GetType(language);
- if (type != null) {
- return (CodeDomProvider) Activator.CreateInstance (type);
- }
- throw new Exception ("Unknown language");
- }
- return provider;
+ CodeDomProvider provider;\r
+ Type type;\r
+ \r
+ switch (language.ToUpper ()) {\r
+ case "CS":\r
+ provider = new CSharpCodeProvider ();\r
+ break;\r
+ case "VB":\r
+ provider = new Microsoft.VisualBasic.VBCodeProvider ();\r
+ break;\r
+ case "BOO":\r
+ type = Type.GetType("Boo.Lang.CodeDom.BooCodeProvider, Boo.Lang.CodeDom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67");\r
+ if (type != null){\r
+ return (CodeDomProvider) Activator.CreateInstance (type);\r
+ }\r
+ throw new Exception ("Boo.Lang.CodeDom.BooCodeProvider not available");\r
+ \r
+ default:\r
+ type = Type.GetType(language);\r
+ if (type != null) {\r
+ return (CodeDomProvider) Activator.CreateInstance (type);\r
+ } \r
+ throw new Exception ("Unknown language");\r
+ }\r
+ return provider;\r
}\r
}\r
\r
"wsdl [options] {path | URL} \n\n"\r
+ " -d, -domain:domain Domain of username for server authentication.\n"\r
+ " -l, -language:language Language of generated code. Allowed CS (default)\n"\r
- + " and VB. You can also specify the fully qualified\n"
- + " name of a class that implements the\n"
+ + " and VB. You can also specify the fully qualified\n"\r
+ + " name of a class that implements the\n"\r
+ " System.CodeDom.Compiler.CodeDomProvider Class.\n"\r
+ " -n, -namespace:ns The namespace of the generated code, default\n"\r
+ " namespace if none.\n"\r
string password;\r
string domain;\r
\r
- string url;\r
+ StringCollection urls = new StringCollection ();\r
string className;\r
\r
///\r
else\r
{\r
hasURL = true;\r
- url = argument;\r
+ urls.Add (argument);\r
return;\r
}\r
\r
default:\r
if (argument.StartsWith ("/") && argument.IndexOfAny (Path.InvalidPathChars) == -1) {\r
hasURL = true;\r
- url = argument;\r
+ urls.Add (argument);\r
break;\r
}\r
else\r
return 0;\r
}\r
\r
- if (className == null)\r
- {\r
+ if (className == null) {\r
DiscoveryClientProtocol dcc = CreateClient ();\r
- \r
- if (!url.StartsWith ("http://") && !url.StartsWith ("https://") && !url.StartsWith ("file://"))\r
- url = "file://" + Path.GetFullPath (url);\r
- \r
- dcc.DiscoverAny (url);\r
- dcc.ResolveAll ();\r
- \r
- foreach (object doc in dcc.Documents.Values)\r
- {\r
+\r
+ foreach (string urlEntry in urls) {\r
+ string url = urlEntry;\r
+ dcc.AllowAutoRedirect = true;\r
+ if (!url.StartsWith ("http://") && !url.StartsWith ("https://") && !url.StartsWith ("file://"))\r
+ url = new Uri (Path.GetFullPath (url)).ToString ();\r
+ \r
+ dcc.DiscoverAny (url);\r
+ dcc.ResolveAll ();\r
+ }\r
+\r
+ foreach (object doc in dcc.Documents.Values) {\r
if (doc is ServiceDescription)\r
- descriptions.Add ((ServiceDescription)doc);\r
+ descriptions.Add ((ServiceDescription) doc);\r
else if (doc is XmlSchema)\r
- schemas.Add ((XmlSchema)doc);\r
+ schemas.Add ((XmlSchema) doc);\r
}\r
- \r
- if (descriptions.Count == 0)\r
- throw new Exception ("No WSDL document was found at the url " + url);\r
- }\r
- else\r
- {\r
+\r
+ if (descriptions.Count == 0) {\r
+ Console.WriteLine ("Warning: no classes were generated.");\r
+ return 0;\r
+ }\r
+ } else {\r
string[] names = className.Split (',');\r
if (names.Length != 2) throw new Exception ("Invalid parameter value for 'type'");\r
string cls = names[0].Trim ();\r
Type t = asm.GetType (cls);\r
if (t == null) throw new Exception ("Type '" + cls + "' not found in assembly " + assembly);\r
ServiceDescriptionReflector reflector = new ServiceDescriptionReflector ();\r
- reflector.Reflect (t, url);\r
+ foreach (string url in urls)\r
+ reflector.Reflect (t, url);\r
foreach (XmlSchema s in reflector.Schemas)\r
schemas.Add (s);\r
\r
}\r
\r
// generate the code\r
- if (generator.GenerateCode (descriptions, schemas))\r
- return 1;\r
- else\r
- return 0;\r
+ generator.GenerateCode (descriptions, schemas);\r
+ return 0;\r
}\r
catch (NullReferenceException e)\r
{\r
Console.WriteLine (e);\r
return 2;\r
}\r
+ catch (InvalidCastException e)\r
+ {\r
+ Console.WriteLine (e);\r
+ return 2;\r
+ }\r
catch (Exception exception)\r
{\r
Console.WriteLine("Error: {0}", exception.Message);\r
return d.Run(args);\r
}\r
}\r
-}
+}\r
+\r
+#endif\r