Python SOAP库suds的问题:未理解WSDL

2 投票
3 回答
3121 浏览
提问于 2025-04-15 15:43

下面的代码会抛出一个SAXParseException错误,提示“标签不匹配”:

from suds.client import Client <br>
url = 'http://www.didww.com/api/?wsdl'
client = Client(url, cache=None)      
print client

这是suds的问题,还是wsdl里面有错误呢?

3 个回答

0

我试着重现你遇到的问题,但对我来说一切都正常。

我使用的是suds 0.4版本。

运行

from suds.client import Client

client = Client('http://api.didww.com/api/index.php?wsdl', cache=None)

print client

得到的结果是

Suds ( https://fedorahosted.org/suds/ )  version: 0.4 GA  build: R699-20100913

Service ( DID World Wide ) tns="urn:didww"
Prefixes (2)
  ns0 = "http://schemas.xmlsoap.org/soap/encoding/"
  ns1 = "urn:didww"
Ports (1):
  (DID World WidePort)
     Methods (11):

    buildmapping(xs:string auth_string, xs:int did_id,   xs:string map_proto,s:string map_uri, xs:int add_did, )
        change_mapping(xs:string auth_string, xs:string did_number, xs:string map_proto, xs:string map_uri, xs:int add_did, )
        did_cancel(xs:string auth_string, xs:string did_number, )
        get_did_details(xs:string auth_string, xs:string did_number, )
        get_region_details(xs:string auth_string, xs:string uniq, )
        getcities(xs:string auth_string, xs:int country_id, )
        getcountries(xs:string auth_string, )
        new_order_renew(xs:string auth_string, xs:string did_number, xs:int period, xs:int autorenew, )
        neworder(xs:string auth_string, xs:string hashkey, xs:string uniq, xs:int autorenew, xs:int period, )
        order_autorenew_status(xs:string auth_string, xs:string did_number, xs:int status, )
        order_cancel(xs:string auth_string, xs:string did_number, )
     Types (55):
        ns0:Array
        CitiesArray
        City
        CountriesArray
        Country
        DID
        DID_data
        ns0:ENTITIES
        ns0:ENTITY
        ns0:ID
        ns0:IDREF
        ns0:IDREFS
        ns0:NCName
        ns0:NMTOKEN
        ns0:NMTOKENS
        ns0:NOTATION
        ns0:Name
        ns0:QName
        Region
        ns0:Struct
        ns0:anyURI
        ns0:arrayCoordinate
        ns0:base64
        ns0:base64Binary
        ns0:boolean
        ns0:byte
        ns0:date
        ns0:dateTime
        ns0:decimal
        ns0:double
        ns0:duration
        ns0:float
        ns0:gDay
        ns0:gMonth
        ns0:gMonthDay
        ns0:gYear
        ns0:gYearMonth
        ns0:hexBinary
        ns0:int
        ns0:integer
        ns0:language
        ns0:long
        ns0:negativeInteger
        ns0:nonNegativeInteger
        ns0:nonPositiveInteger
        ns0:normalizedString
        ns0:positiveInteger
        ns0:short
        ns0:string
        ns0:time
        ns0:token
        ns0:unsignedByte
        ns0:unsignedInt
        ns0:unsignedLong
        ns0:unsignedShort

我猜他们之前的wsdl文件有点问题,但现在看起来一切都没问题了。

希望这能帮到你。

1

你有没有在浏览器或者XML查看器中查看过WSDL文件?这样可以帮助你判断问题是不是出在这个文件上。错误提示说明这个文件可能有些问题。

1

看起来对我来说是有效的,我使用的是suds 0.3.3版本(没有缓存选项 - 在我这个版本的suds中,None并不是一个有效的缓存选项):

In [4]: from suds.client import Client
In [5]: url = 'https://xml.192.com/IDSearch.cfc?wsdl'
In [6]: c = Client(url)
In [7]: print c

Suds ( https://fedorahosted.org/suds/ )  version: 0.3.3 GA  build:     R413-20081204

Service ( IDSearch ) tns="http://corpwsdl.oneninetwo"
Prefixes (1)
  ns0 = "http://rpc.xml.coldfusion"
Ports (1):
  (IDSearch.cfc)
     Methods (1):
        search(xs:string xml, )
     Types (1):
        ns0:CFCInvocationException

撰写回答