private void ParseWsdlBinding(URTNamespace inparsingNamespace) { Util.Log("WsdlParser.ParseWsdlBinding"); WsdlBinding binding = new WsdlBinding(); binding.name = LookupAttribute(s_nameString, null, true); //binding.nameNs = ParseQName(ref binding.name); binding.type = LookupAttribute(s_typeString, null, true); binding.typeNs = ParseQName(ref binding.type); URTNamespace parsingNamespace = LookupNamespace(binding.typeNs); if (parsingNamespace == null) { parsingNamespace = new URTNamespace(binding.typeNs, this); } binding.parsingNamespace = parsingNamespace; bool bSoapBinding = false; bool bRpcBinding = false; bool bSoapEncoded = false; bool bSoapSuds = false; int curDepth = _XMLReader.Depth; ReadNextXmlElement(); while (_XMLReader.Depth > curDepth) { String elementName = _XMLReader.LocalName; if (MatchingNamespace(s_wsdlSoapNamespaceString) && MatchingStrings(elementName, s_bindingString)) { bSoapBinding = true; WsdlBindingSoapBinding sb = new WsdlBindingSoapBinding(); sb.style = LookupAttribute(s_styleString, null, true); if (sb.style == "rpc") bRpcBinding = true; /* if (sb.style == "document") { throw new SUDSParserException( String.Format(CoreChannel.GetResourceString("Remoting_Suds_SoapStyleNotSupported"), sb.style)); } */ sb.transport = LookupAttribute(s_transportString, null, true); binding.soapBinding = sb; ReadNextXmlElement(); continue; } else if (MatchingNamespace(s_wsdlSudsNamespaceString)) { bSoapSuds = true; if (MatchingStrings(elementName, s_classString) || MatchingStrings(elementName, s_structString)) { WsdlBindingSuds suds = new WsdlBindingSuds(); suds.elementName = elementName; suds.typeName = LookupAttribute(s_typeString, null, true); suds.ns = ParseQName(ref suds.typeName); suds.extendsTypeName = LookupAttribute(s_extendsString, null, false); String use = LookupAttribute(s_rootTypeString, null, false); suds.sudsUse = ProcessSudsUse(use, elementName); if (!MatchingStrings(suds.extendsTypeName, s_emptyString)) suds.extendsNs = ParseQName(ref suds.extendsTypeName); ParseWsdlBindingSuds(suds); binding.suds.Add(suds); continue; } else if (MatchingStrings(elementName, s_interfaceString)) { WsdlBindingSuds suds = new WsdlBindingSuds(); suds.elementName = elementName; //Atomize("interface"); suds.typeName = LookupAttribute(s_typeString, null, true); suds.ns = ParseQName(ref suds.typeName); String use = LookupAttribute(s_rootTypeString, null, false); suds.sudsUse = ProcessSudsUse(use, elementName); ParseWsdlBindingSuds(suds); binding.suds.Add(suds); continue; } } else if (MatchingNamespace(s_wsdlNamespaceString) && MatchingStrings(elementName, s_operationString)) { WsdlBindingOperation op = new WsdlBindingOperation(); op.name = LookupAttribute(s_nameString, null, true); op.nameNs = _parsingInput.TargetNS; ParseWsdlBindingOperation(op, ref bRpcBinding, ref bSoapEncoded); binding.operations.Add(op); continue; } // Ignore others elements such as annotations SkipXmlElement(); } if (bSoapBinding && bRpcBinding && bSoapEncoded || bSoapSuds) wsdlBindings.Add(binding); }
private void ParseWsdlBinding(URTNamespace inparsingNamespace) { WsdlBinding binding; binding = new WsdlBinding { name = this.LookupAttribute(s_nameString, null, true), type = this.LookupAttribute(s_typeString, null, true), typeNs = this.ParseQName(ref binding.type) }; URTNamespace namespace2 = this.LookupNamespace(binding.typeNs); if (namespace2 == null) { namespace2 = new URTNamespace(binding.typeNs, this); } binding.parsingNamespace = namespace2; bool flag = false; bool bRpcBinding = false; bool bSoapEncoded = false; bool flag4 = false; int depth = this._XMLReader.Depth; this.ReadNextXmlElement(); while (this._XMLReader.Depth > depth) { string localName = this._XMLReader.LocalName; if (this.MatchingNamespace(s_wsdlSoapNamespaceString) && MatchingStrings(localName, s_bindingString)) { flag = true; WsdlBindingSoapBinding binding2 = new WsdlBindingSoapBinding { style = this.LookupAttribute(s_styleString, null, true) }; if (binding2.style == "rpc") { bRpcBinding = true; } binding2.transport = this.LookupAttribute(s_transportString, null, true); binding.soapBinding = binding2; this.ReadNextXmlElement(); continue; } if (this.MatchingNamespace(s_wsdlSudsNamespaceString)) { flag4 = true; if (MatchingStrings(localName, s_classString) || MatchingStrings(localName, s_structString)) { WsdlBindingSuds suds; suds = new WsdlBindingSuds { elementName = localName, typeName = this.LookupAttribute(s_typeString, null, true), ns = this.ParseQName(ref suds.typeName), extendsTypeName = this.LookupAttribute(s_extendsString, null, false) }; string use = this.LookupAttribute(s_rootTypeString, null, false); suds.sudsUse = this.ProcessSudsUse(use, localName); if (!MatchingStrings(suds.extendsTypeName, s_emptyString)) { suds.extendsNs = this.ParseQName(ref suds.extendsTypeName); } this.ParseWsdlBindingSuds(suds); binding.suds.Add(suds); } else { WsdlBindingSuds suds2; if (!MatchingStrings(localName, s_interfaceString)) { goto Label_02CC; } suds2 = new WsdlBindingSuds { elementName = localName, typeName = this.LookupAttribute(s_typeString, null, true), ns = this.ParseQName(ref suds2.typeName) }; string str3 = this.LookupAttribute(s_rootTypeString, null, false); suds2.sudsUse = this.ProcessSudsUse(str3, localName); this.ParseWsdlBindingSuds(suds2); binding.suds.Add(suds2); } continue; } if (this.MatchingNamespace(s_wsdlNamespaceString) && MatchingStrings(localName, s_operationString)) { WsdlBindingOperation op = new WsdlBindingOperation { name = this.LookupAttribute(s_nameString, null, true), nameNs = this._parsingInput.TargetNS }; this.ParseWsdlBindingOperation(op, ref bRpcBinding, ref bSoapEncoded); binding.operations.Add(op); continue; } Label_02CC: this.SkipXmlElement(); } if (((flag && bRpcBinding) && bSoapEncoded) || flag4) { this.wsdlBindings.Add(binding); } }