Example #1
0
        private void ResolveWsdlNestedType(WsdlBinding binding, WsdlBindingSuds suds, WsdlBindingSudsNestedType nested)
        {
            Util.Log("WsdlParser.ResolveWsdlNestedType "+binding.name+" ns "+binding.parsingNamespace.Namespace+" suds "+suds.typeName+" nestedName "+nested.name+" nestedTypeName "+nested.typeName);
            String className = suds.typeName;
            String ns = nested.ns;
            String nestedName = nested.name;
            String nestedTypeName = nested.typeName;
            if (suds.ns != ns)
            {
                throw new SUDSParserException(
                                             String.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_CantResolveNestedTypeNS"),
                                                           suds.typeName, suds.ns));
            }

            URTNamespace sudsNamespace = AddNewNamespace(suds.ns);

            URTComplexType outerType = sudsNamespace.LookupComplexType(suds.typeName);
            if (outerType == null)
            {
                throw new SUDSParserException(
                                             String.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_CantResolveNestedType"),
                                                           suds.typeName, suds.ns));
            }

            BaseType innerType = sudsNamespace.LookupType(nested.typeName);
            if (innerType == null)
            {
                // Can be URTSimpleType for Enum
                Util.Log("WsdlParser.ResolveWsdlNestedType cann't find inner type "+nested.typeName+" className "+className+" ns "+ns);

                innerType = sudsNamespace.LookupComplexType(nested.typeName);
                if (innerType == null)
                {
                    innerType = new URTComplexType(nested.typeName, sudsNamespace.Name, sudsNamespace.Namespace, sudsNamespace.EncodedNS, _blockDefault ,false, false, this, sudsNamespace);
                    sudsNamespace.AddComplexType((URTComplexType)innerType);
                }
            }


            innerType.bNestedType = true;
            innerType.NestedTypeName = nested.name;
            innerType.FullNestedTypeName = nested.typeName;
            innerType.OuterTypeName = suds.typeName;

            outerType.AddNestedType(innerType);
        }
Example #2
0
        private void ResolveWsdlClass(WsdlBinding binding, WsdlBindingSuds suds, bool bFirstSuds)
        {
            // bFirstSuds is true then the suds class is the class for the binding. 
            // The other suds are additional class without bindings in the same namespace.
            Util.Log("WsdlParser.ResolveWsdlClass suds "+suds);
            URTComplexType parsingComplexType;
            //URTNamespace parsingNamespace = binding.parsingNamespace;
            URTNamespace parsingNamespace;
            //URTNamespace parsingNamespace = binding.typeNs;

            if (suds != null)
            {
                Util.Log("WsdlParser.ResolveWsdlClass suds not null "+suds.elementName+" "+suds.typeName);
                // Suds
                parsingNamespace = AddNewNamespace(suds.ns);
                parsingComplexType = parsingNamespace.LookupComplexType(suds.typeName);
                if (parsingComplexType == null)
                {
                    parsingComplexType = new URTComplexType(suds.typeName, parsingNamespace.Name, parsingNamespace.Namespace, parsingNamespace.EncodedNS, _blockDefault ,false, false, this, parsingNamespace);
                    parsingNamespace.AddComplexType(parsingComplexType);
                }

                if (MatchingStrings(suds.elementName, s_structString))
                    parsingComplexType.IsValueType = true;

                parsingComplexType.SudsUse = suds.sudsUse;

                if (suds.sudsUse == SudsUse.MarshalByRef || 
                    suds.sudsUse == SudsUse.ServicedComponent
                   )
                {
                    Util.Log("WsdlParser.ResolveWsdlClass MarshalByRef IsSudsType true 1 "+suds.elementName+" "+suds.typeName);
                    parsingComplexType.IsSUDSType = true; 

                    if (_bWrappedProxy)
                        parsingComplexType.SUDSType = SUDSType.ClientProxy;
                    else
                        parsingComplexType.SUDSType = SUDSType.MarshalByRef;


                    if ((suds.extendsTypeName != null) && (suds.extendsTypeName.Length > 0))
                    {
                        URTNamespace extendsNamespace = AddNewNamespace(suds.extendsNs);                    
                        /*
                        if (extendsNamespace == null)
                            extendsNamespace = new URTNamespace(suds.extendsTypeName, this);
                            */

                        URTComplexType extendsComplexType = extendsNamespace.LookupComplexType(suds.extendsTypeName);                   
                        if (extendsComplexType == null)
                        {
                            extendsComplexType = new URTComplexType(suds.extendsTypeName, extendsNamespace.Name, extendsNamespace.Namespace, extendsNamespace.EncodedNS, _blockDefault ,true, false, this, extendsNamespace);
                            extendsNamespace.AddComplexType(extendsComplexType);
                        }
                        else
                        {
                            Util.Log("WsdlParser.ResolveWsdlClass IsSudsType true 2 "+suds.elementName+" "+suds.typeName);
                            extendsComplexType.IsSUDSType = true;
                        }

                        if (_bWrappedProxy)
                            extendsComplexType.SUDSType = SUDSType.ClientProxy;
                        else
                            extendsComplexType.SUDSType = SUDSType.MarshalByRef;

                        extendsComplexType.SudsUse = suds.sudsUse;

                        // Only top of inheritance hierarchy is marked
                        //parsingComplexType.SUDSType = SUDSType.None; 
                    }
                }

                foreach (WsdlBindingSudsNestedType nestedType in suds.nestedTypes)
                {
                    ResolveWsdlNestedType(binding, suds, nestedType);
                }
            }
            else
            {
                // No suds
                Util.Log("WsdlParser.ResolveWsdlClass no suds ");
                parsingNamespace = AddNewNamespace(binding.typeNs);
                String name = binding.name;
                int index = binding.name.IndexOf("Binding");
                if (index > 0)
                {
                    //name = Atomize(binding.name.Substring(0,index));
                    name = binding.name.Substring(0,index);
                }

                parsingComplexType = parsingNamespace.LookupComplexTypeEqual(name);
                if (parsingComplexType == null)
                {
                    parsingComplexType = new URTComplexType(name, parsingNamespace.Name, parsingNamespace.Namespace, parsingNamespace.EncodedNS, _blockDefault ,true, false, this, parsingNamespace);
                    parsingNamespace.AddComplexType(parsingComplexType);                    
                }
                else
                {
                    Util.Log("WsdlParser.ResolveWsdlClass IsSudsType true 3 "+name);
                    parsingComplexType.IsSUDSType = true;
                }
                if (_bWrappedProxy)
                    parsingComplexType.SUDSType = SUDSType.ClientProxy;
                else
                    parsingComplexType.SUDSType = SUDSType.MarshalByRef;

                parsingComplexType.SudsUse = SudsUse.MarshalByRef;
            }

            // Resolve address
            parsingComplexType.ConnectURLs = ResolveWsdlAddress(binding);

            // Resolve extends and implements
            if (suds != null)
            {
                if (!MatchingStrings(suds.extendsTypeName, s_emptyString))
                {
                    parsingComplexType.Extends(suds.extendsTypeName, suds.extendsNs);
                }

                foreach (WsdlBindingSudsImplements impl in suds.implements)
                parsingComplexType.Implements(impl.typeName, impl.ns, this);  
            }




            if (bFirstSuds && 
                (parsingComplexType.SudsUse == SudsUse.MarshalByRef || 
                 parsingComplexType.SudsUse == SudsUse.ServicedComponent || 
                 parsingComplexType.SudsUse == SudsUse.Delegate || 
                 parsingComplexType.SudsUse == SudsUse.Interface))
            {
                // Resolve methods

                ArrayList methodInfos = ResolveWsdlMethodInfo(binding);

                foreach (WsdlMethodInfo methodInfo in methodInfos)
                {
                    if ((methodInfo.inputMethodName != null) && (methodInfo.outputMethodName != null))
                    {
                        RRMethod parsingRRMethod = new RRMethod(methodInfo, parsingComplexType);
                        parsingRRMethod.AddRequest(methodInfo.methodName, methodInfo.methodNameNs);
                        parsingRRMethod.AddResponse(methodInfo.methodName, methodInfo.methodNameNs);
                        parsingComplexType.AddMethod(parsingRRMethod);
                    }
                    else if (methodInfo.inputMethodName != null)
                    {
                        OnewayMethod parsingOWMethod = new OnewayMethod(methodInfo, parsingComplexType);
                        parsingComplexType.AddMethod(parsingOWMethod);
                        parsingOWMethod.AddMessage(methodInfo.methodName, methodInfo.methodNameNs);
                    }
                    else
                    {
                        throw new SUDSParserException(
                                                     String.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_WsdlInvalidMessage"),
                                                                   methodInfo.methodName));
                    }
                }
            }
        }
Example #3
0
        private void ResolveWsdlInterface(WsdlBinding binding, WsdlBindingSuds suds)
        {
            Util.Log("WsdlParser.ResolveWsdlInterface "+binding.name+" ns "+binding.parsingNamespace.Namespace+" suds "+suds.typeName);

            URTNamespace parsingNamespace = binding.parsingNamespace;

            URTNamespace sudsNamespace = AddNewNamespace(suds.ns);
            /*
            if (sudsNamespace == null)
            {
                sudsNamespace = new URTNamespace(suds.ns, this);
            }
            */

            URTInterface parsingInterface = sudsNamespace.LookupInterface(suds.typeName);           
            if (parsingInterface == null)
            {
                parsingInterface = new URTInterface(suds.typeName, sudsNamespace.Name, sudsNamespace.Namespace, sudsNamespace.EncodedNS, this);
                sudsNamespace.AddInterface(parsingInterface);
            }

            if (suds.extendsTypeName != null)
            {
                parsingInterface.Extends(suds.extendsTypeName, suds.extendsNs, this);
            }
            foreach (WsdlBindingSudsImplements impl in suds.implements)
            {
                parsingInterface.Extends(impl.typeName, impl.ns, this);             
            }

            ArrayList methodInfos = ResolveWsdlMethodInfo(binding);

            foreach (WsdlMethodInfo methodInfo in methodInfos)          
            {
                if ((methodInfo.inputMethodName != null) && (methodInfo.outputMethodName != null))
                {
                    RRMethod parsingRRMethod = new RRMethod(methodInfo, null);
                    parsingRRMethod.AddRequest(methodInfo.methodName, methodInfo.methodNameNs);
                    parsingRRMethod.AddResponse(methodInfo.methodName, methodInfo.methodNameNs);
                    parsingInterface.AddMethod(parsingRRMethod);
                }
                else if (methodInfo.inputMethodName != null)
                {
                    OnewayMethod parsingOWMethod = new OnewayMethod(methodInfo.methodName, methodInfo.soapAction, null);
                    parsingOWMethod.AddMessage(methodInfo.methodName, methodInfo.methodNameNs);                 
                    parsingInterface.AddMethod(parsingOWMethod);
                }
                else
                {
                    throw new SUDSParserException(
                                                 String.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_WsdlInvalidMessage"),
                                                               methodInfo.methodName));

                }
            }
        }
Example #4
0
        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);
        }
Example #5
0
        private void ParseWsdlBindingSuds(WsdlBindingSuds suds)
        {
            Util.Log("WsdlParser.ParseWsdlBindingSuds");            
            int curDepth = _XMLReader.Depth; 
            ReadNextXmlElement();               
            while (_XMLReader.Depth > curDepth)
            {
                String elementName = _XMLReader.LocalName;

                if (MatchingStrings(elementName, s_implementsString) ||
                    MatchingStrings(elementName, s_extendsString))
                {
                    WsdlBindingSudsImplements impl = new WsdlBindingSudsImplements();
                    impl.typeName = LookupAttribute(s_typeString, null, true);
                    impl.ns = ParseQName(ref impl.typeName);
                    suds.implements.Add(impl);
                    ReadNextXmlElement();
                    continue;                   
                }
                else if (MatchingStrings(elementName, s_nestedTypeString))
                {
                    WsdlBindingSudsNestedType nestedType = new WsdlBindingSudsNestedType();
                    nestedType.name = LookupAttribute(s_nameString, null, true);
                    nestedType.typeName = LookupAttribute(s_typeString, null, true);
                    nestedType.ns = ParseQName(ref nestedType.typeName);
                    suds.nestedTypes.Add(nestedType);
                    ReadNextXmlElement();
                    continue;                   
                }


                // Ignore others elements such as annotations
                SkipXmlElement();
            }
        }
 private void ResolveWsdlNestedType(WsdlBinding binding, WsdlBindingSuds suds, WsdlBindingSudsNestedType nested)
 {
     string typeName = suds.typeName;
     string ns = nested.ns;
     string name = nested.name;
     string text3 = nested.typeName;
     if (suds.ns != ns)
     {
         throw new SUDSParserException(string.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_CantResolveNestedTypeNS"), new object[] { suds.typeName, suds.ns }));
     }
     URTNamespace xns = this.AddNewNamespace(suds.ns);
     URTComplexType complexType = xns.LookupComplexType(suds.typeName);
     if (complexType == null)
     {
         throw new SUDSParserException(string.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_CantResolveNestedType"), new object[] { suds.typeName, suds.ns }));
     }
     BaseType type = xns.LookupType(nested.typeName);
     if (type == null)
     {
         type = xns.LookupComplexType(nested.typeName);
         if (type == null)
         {
             type = new URTComplexType(nested.typeName, xns.Name, xns.Namespace, xns.EncodedNS, this._blockDefault, false, false, this, xns);
             xns.AddComplexType((URTComplexType) type);
         }
     }
     type.bNestedType = true;
     type.NestedTypeName = nested.name;
     type.FullNestedTypeName = nested.typeName;
     type.OuterTypeName = suds.typeName;
     complexType.AddNestedType(type);
 }
 private void ResolveWsdlInterface(WsdlBinding binding, WsdlBindingSuds suds)
 {
     URTNamespace parsingNamespace = binding.parsingNamespace;
     URTNamespace namespace2 = this.AddNewNamespace(suds.ns);
     URTInterface iface = namespace2.LookupInterface(suds.typeName);
     if (iface == null)
     {
         iface = new URTInterface(suds.typeName, namespace2.Name, namespace2.Namespace, namespace2.EncodedNS, this);
         namespace2.AddInterface(iface);
     }
     if (suds.extendsTypeName != null)
     {
         iface.Extends(suds.extendsTypeName, suds.extendsNs, this);
     }
     foreach (WsdlBindingSudsImplements implements in suds.implements)
     {
         iface.Extends(implements.typeName, implements.ns, this);
     }
     foreach (WsdlMethodInfo info in this.ResolveWsdlMethodInfo(binding))
     {
         if ((info.inputMethodName == null) || (info.outputMethodName == null))
         {
             if (info.inputMethodName == null)
             {
                 throw new SUDSParserException(string.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_WsdlInvalidMessage"), new object[] { info.methodName }));
             }
             OnewayMethod method2 = new OnewayMethod(info.methodName, info.soapAction, null);
             method2.AddMessage(info.methodName, info.methodNameNs);
             iface.AddMethod(method2);
         }
         else
         {
             RRMethod method = new RRMethod(info, null);
             method.AddRequest(info.methodName, info.methodNameNs);
             method.AddResponse(info.methodName, info.methodNameNs);
             iface.AddMethod(method);
         }
     }
 }
 private void ResolveWsdlClass(WsdlBinding binding, WsdlBindingSuds suds, bool bFirstSuds)
 {
     URTComplexType complexType;
     URTNamespace namespace2;
     if (suds != null)
     {
         namespace2 = this.AddNewNamespace(suds.ns);
         complexType = namespace2.LookupComplexType(suds.typeName);
         if (complexType == null)
         {
             complexType = new URTComplexType(suds.typeName, namespace2.Name, namespace2.Namespace, namespace2.EncodedNS, this._blockDefault, false, false, this, namespace2);
             namespace2.AddComplexType(complexType);
         }
         if (MatchingStrings(suds.elementName, s_structString))
         {
             complexType.IsValueType = true;
         }
         complexType.SudsUse = suds.sudsUse;
         if ((suds.sudsUse == SudsUse.MarshalByRef) || (suds.sudsUse == SudsUse.ServicedComponent))
         {
             complexType.IsSUDSType = true;
             if (this._bWrappedProxy)
             {
                 complexType.SUDSType = SUDSType.ClientProxy;
             }
             else
             {
                 complexType.SUDSType = SUDSType.MarshalByRef;
             }
             if ((suds.extendsTypeName != null) && (suds.extendsTypeName.Length > 0))
             {
                 URTNamespace xns = this.AddNewNamespace(suds.extendsNs);
                 URTComplexType type = xns.LookupComplexType(suds.extendsTypeName);
                 if (type == null)
                 {
                     type = new URTComplexType(suds.extendsTypeName, xns.Name, xns.Namespace, xns.EncodedNS, this._blockDefault, true, false, this, xns);
                     xns.AddComplexType(type);
                 }
                 else
                 {
                     type.IsSUDSType = true;
                 }
                 if (this._bWrappedProxy)
                 {
                     type.SUDSType = SUDSType.ClientProxy;
                 }
                 else
                 {
                     type.SUDSType = SUDSType.MarshalByRef;
                 }
                 type.SudsUse = suds.sudsUse;
             }
         }
         foreach (WsdlBindingSudsNestedType type3 in suds.nestedTypes)
         {
             this.ResolveWsdlNestedType(binding, suds, type3);
         }
     }
     else
     {
         namespace2 = this.AddNewNamespace(binding.typeNs);
         string name = binding.name;
         int index = binding.name.IndexOf("Binding");
         if (index > 0)
         {
             name = binding.name.Substring(0, index);
         }
         complexType = namespace2.LookupComplexTypeEqual(name);
         if (complexType == null)
         {
             complexType = new URTComplexType(name, namespace2.Name, namespace2.Namespace, namespace2.EncodedNS, this._blockDefault, true, false, this, namespace2);
             namespace2.AddComplexType(complexType);
         }
         else
         {
             complexType.IsSUDSType = true;
         }
         if (this._bWrappedProxy)
         {
             complexType.SUDSType = SUDSType.ClientProxy;
         }
         else
         {
             complexType.SUDSType = SUDSType.MarshalByRef;
         }
         complexType.SudsUse = SudsUse.MarshalByRef;
     }
     complexType.ConnectURLs = this.ResolveWsdlAddress(binding);
     if (suds != null)
     {
         if (!MatchingStrings(suds.extendsTypeName, s_emptyString))
         {
             complexType.Extends(suds.extendsTypeName, suds.extendsNs);
         }
         foreach (WsdlBindingSudsImplements implements in suds.implements)
         {
             complexType.Implements(implements.typeName, implements.ns, this);
         }
     }
     if (bFirstSuds && (((complexType.SudsUse == SudsUse.MarshalByRef) || (complexType.SudsUse == SudsUse.ServicedComponent)) || ((complexType.SudsUse == SudsUse.Delegate) || (complexType.SudsUse == SudsUse.Interface))))
     {
         foreach (WsdlMethodInfo info in this.ResolveWsdlMethodInfo(binding))
         {
             if ((info.inputMethodName == null) || (info.outputMethodName == null))
             {
                 if (info.inputMethodName == null)
                 {
                     throw new SUDSParserException(string.Format(CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Suds_WsdlInvalidMessage"), new object[] { info.methodName }));
                 }
                 OnewayMethod method2 = new OnewayMethod(info, complexType);
                 complexType.AddMethod(method2);
                 method2.AddMessage(info.methodName, info.methodNameNs);
             }
             else
             {
                 RRMethod method = new RRMethod(info, complexType);
                 method.AddRequest(info.methodName, info.methodNameNs);
                 method.AddResponse(info.methodName, info.methodNameNs);
                 complexType.AddMethod(method);
             }
         }
     }
 }
 private void ParseWsdlBindingSuds(WsdlBindingSuds suds)
 {
     int depth = this._XMLReader.Depth;
     this.ReadNextXmlElement();
     while (this._XMLReader.Depth > depth)
     {
         string localName = this._XMLReader.LocalName;
         if (MatchingStrings(localName, s_implementsString) || MatchingStrings(localName, s_extendsString))
         {
             WsdlBindingSudsImplements implements;
             implements = new WsdlBindingSudsImplements {
                 typeName = this.LookupAttribute(s_typeString, null, true),
                 ns = this.ParseQName(ref implements.typeName)
             };
             suds.implements.Add(implements);
             this.ReadNextXmlElement();
         }
         else if (MatchingStrings(localName, s_nestedTypeString))
         {
             WsdlBindingSudsNestedType type;
             type = new WsdlBindingSudsNestedType {
                 name = this.LookupAttribute(s_nameString, null, true),
                 typeName = this.LookupAttribute(s_typeString, null, true),
                 ns = this.ParseQName(ref type.typeName)
             };
             suds.nestedTypes.Add(type);
             this.ReadNextXmlElement();
         }
         else
         {
             this.SkipXmlElement();
         }
     }
 }
 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);
     }
 }