Exemplo n.º 1
0
        private void ParseWsdlPortTypeOperationContent(WsdlPortType portType, WsdlPortTypeOperation portTypeOperation)
        { 
            Util.Log("WsdlParser.ParseWsdlPortTypeOperationContent type "+portType.name+" operationName "+portTypeOperation.name);
            int curDepth = _XMLReader.Depth; 

            ReadNextXmlElement();               
            while (_XMLReader.Depth > curDepth)
            {
                String elementName = _XMLReader.LocalName;

                if (MatchingStrings(elementName, s_inputString))
                {
                    WsdlPortTypeOperationContent portContent = new WsdlPortTypeOperationContent();
                    portContent.element = Atomize("input");
                    portContent.name = LookupAttribute(s_nameString, null, false);

                    if (MatchingStrings(portContent.name, s_emptyString))
                    {
                        portContent.name = Atomize(portTypeOperation.name+"Request");
                        if (portType.sections.ContainsKey(portContent.name))
                            throw new SUDSParserException(String.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_DuplicatePortTypesOperationName"), portTypeOperation.name));

                        portType.sections[portContent.name] = portTypeOperation; //for request response
                        portType.sections[portTypeOperation.name] = portTypeOperation; // for one way don't know yet if one way or response
                    }
                    else
                    {
                        if (portType.sections.ContainsKey(portContent.name))
                            throw new SUDSParserException(String.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_DuplicatePortSectionName"), portContent.name));


                        portType.sections[portContent.name] = portTypeOperation;
                    }

                    portContent.message = LookupAttribute(s_messageString, null, true);
                    portContent.messageNs = ParseQName(ref portContent.message);
                    portTypeOperation.contents.Add(portContent);
                    ReadNextXmlElement();
                    continue;                   
                }
                else if (MatchingStrings(elementName, s_outputString))
                {
                    WsdlPortTypeOperationContent portContent = new WsdlPortTypeOperationContent();                  
                    portContent.element = Atomize("output");
                    portContent.name = LookupAttribute(s_nameString, null, false);
                    portContent.nameNs = ParseQName(ref portContent.name);
                    if (MatchingStrings(portContent.name, s_emptyString))
                        portContent.name = Atomize(portTypeOperation.name+"Response");
                    if (!portType.sections.ContainsKey(portContent.name))
                        portType.sections[portContent.name] = portTypeOperation;
                    portContent.message = LookupAttribute(s_messageString, null, true);
                    portContent.messageNs = ParseQName(ref portContent.message);
                    portTypeOperation.contents.Add(portContent);                    
                    ReadNextXmlElement();
                    continue;                   
                }

                // Ignore others elements such as annotations
                SkipXmlElement();
            }
        }
 private void ParseWsdlPortTypeOperationContent(WsdlPortType portType, WsdlPortTypeOperation portTypeOperation)
 {
     int depth = this._XMLReader.Depth;
     this.ReadNextXmlElement();
     while (this._XMLReader.Depth > depth)
     {
         string localName = this._XMLReader.LocalName;
         if (MatchingStrings(localName, s_inputString))
         {
             WsdlPortTypeOperationContent content = new WsdlPortTypeOperationContent {
                 element = this.Atomize("input"),
                 name = this.LookupAttribute(s_nameString, null, false)
             };
             if (MatchingStrings(content.name, s_emptyString))
             {
                 content.name = this.Atomize(portTypeOperation.name + "Request");
                 if (portType.sections.ContainsKey(content.name))
                 {
                     throw new SUDSParserException(string.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_DuplicatePortTypesOperationName"), new object[] { portTypeOperation.name }));
                 }
                 portType.sections[content.name] = portTypeOperation;
                 portType.sections[portTypeOperation.name] = portTypeOperation;
             }
             else
             {
                 if (portType.sections.ContainsKey(content.name))
                 {
                     throw new SUDSParserException(string.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_DuplicatePortSectionName"), new object[] { content.name }));
                 }
                 portType.sections[content.name] = portTypeOperation;
             }
             content.message = this.LookupAttribute(s_messageString, null, true);
             content.messageNs = this.ParseQName(ref content.message);
             portTypeOperation.contents.Add(content);
             this.ReadNextXmlElement();
         }
         else if (MatchingStrings(localName, s_outputString))
         {
             WsdlPortTypeOperationContent content2;
             content2 = new WsdlPortTypeOperationContent {
                 element = this.Atomize("output"),
                 name = this.LookupAttribute(s_nameString, null, false),
                 nameNs = this.ParseQName(ref content2.name)
             };
             if (MatchingStrings(content2.name, s_emptyString))
             {
                 content2.name = this.Atomize(portTypeOperation.name + "Response");
             }
             if (!portType.sections.ContainsKey(content2.name))
             {
                 portType.sections[content2.name] = portTypeOperation;
             }
             content2.message = this.LookupAttribute(s_messageString, null, true);
             content2.messageNs = this.ParseQName(ref content2.message);
             portTypeOperation.contents.Add(content2);
             this.ReadNextXmlElement();
         }
         else
         {
             this.SkipXmlElement();
         }
     }
 }