Merge pull request #656 from LogosBible/collection_lock
[mono.git] / data / net_2_0 / DefaultWsdlHelpGenerator.aspx
index 888406d136d2a97dffc9c82077b716cdc0d8fd97..f4d74bff7f5bca96ad3fc764e518b4d710854177 100644 (file)
@@ -10,6 +10,7 @@
 --%>
 
 <%@ Import Namespace="System.Collections" %>
+<%@ Import Namespace="System.Collections.Generic" %>
 <%@ Import Namespace="System.IO" %>
 <%@ Import Namespace="System.Xml.Serialization" %>
 <%@ Import Namespace="System.Xml" %>
@@ -122,15 +123,20 @@ void BuildOperationInfo ()
        
        // Protocols supported by the operation
        CurrentOperationProtocols = "";
+       WebServiceProtocols testProtocols = 0;
        ArrayList prots = FindServiceProtocols (CurrentOperationName);
        for (int n=0; n<prots.Count; n++) {
+               string prot = (string) prots [n];
                if (n != 0) CurrentOperationProtocols += ", ";
-               CurrentOperationProtocols += (string) prots[n];
+               CurrentOperationProtocols += prot;
+               if (prot == "HttpGet")
+                       testProtocols |= WebServiceProtocols.HttpGet;
+               else if (prot == "HttpPost") {
+                       testProtocols |= WebServiceProtocols.HttpPost;
+                       if (Context.Request.IsLocal)
+                               testProtocols |= WebServiceProtocols.HttpPostLocalhost;
+               }
        }
-       
-       WebServiceProtocols testProtocols = WebServiceProtocols.HttpGet | WebServiceProtocols.HttpPost;
-       if (Context.Request.IsLocal)
-           testProtocols |= WebServiceProtocols.HttpPostLocalhost;
        CurrentOperationSupportsTest = (WebServicesSection.Current.EnabledProtocols & testProtocols) != 0;
 
        // Operation format
@@ -468,10 +474,15 @@ private CodeDomProvider GetProvider(string langId)
 //
 // Document generation
 //
+class UTF8StringWriter : StringWriter {
+       public override Encoding Encoding {
+               get { return Encoding.UTF8; }
+       }
+}
 
 string GenerateDocument ()
 {
-       StringWriter sw = new StringWriter ();
+       UTF8StringWriter sw = new UTF8StringWriter ();
        
        if (CurrentDocType == "wsdl")
                descriptions [CurrentDocInd].Write (sw);
@@ -1030,7 +1041,7 @@ public class HtmlSampleGenerator: SampleGenerator
                        if (elem == null) throw new InvalidOperationException ("Element not found: " + qname);
                        WriteElementSample (xtw, qname.Namespace, elem);
                }
-               
+
                void WriteElementSample (XmlTextWriter xtw, string ns, XmlSchemaElement elem)
                {
                        bool sharedAnnType = false;
@@ -1124,9 +1135,18 @@ public class HtmlSampleGenerator: SampleGenerator
                {
                        WriteAttributes (xtw, stype.Attributes, stype.AnyAttribute);
                }
-               
+
+               Dictionary<XmlSchemaComplexType,int> recursed_types = new Dictionary<XmlSchemaComplexType,int> ();
                void WriteComplexTypeElements (XmlTextWriter xtw, string ns, XmlSchemaComplexType stype)
                {
+                       int prev = 0;
+                       if (recursed_types.ContainsKey (stype))
+                               prev = recursed_types [stype];
+
+                       if (prev > 1)
+                               return;
+                       recursed_types [stype] = ++prev;
+
                        if (stype.Particle != null)
                                WriteParticleComplexContent (xtw, ns, stype.Particle);
                        else
@@ -1136,6 +1156,8 @@ public class HtmlSampleGenerator: SampleGenerator
                                else if (stype.ContentModel is XmlSchemaComplexContent)
                                        WriteComplexContent (xtw, ns, (XmlSchemaComplexContent)stype.ContentModel);
                        }
+                       prev = recursed_types [stype];
+                       recursed_types [stype] = --prev;
                }
 
                void WriteAttributes (XmlTextWriter xtw, XmlSchemaObjectCollection atts, XmlSchemaAnyAttribute anyat)
@@ -1516,8 +1538,9 @@ public class HtmlSampleGenerator: SampleGenerator
 </script>
 
 <head runat="server">
-       <link rel="alternate" type="text/xml" href="<%=Request.FilePath%>?disco"/>
-
+       <%
+       Response.Write ("<link rel=\"alternate\" type=\"text/xml\" href=\"" + Request.FilePath + "?disco\"/>");
+       %>
        <title><%=WebServiceName%> Web Service</title>
     <style type="text/css">
                BODY { font-family: Arial; margin-left: 20px; margin-top: 20px; font-size: x-small}