找不到WSDL类型

时间:2014-10-20 08:20:33

标签: django wsdl suds

我正在尝试使用suds为django获取WSDL响应。但是我无缘无故地得到了一个未找到类型的错误。

Type not found: 'ProfileInfo'

这就是我的xml应该是这样的:

 <Profiles>
   <ProfileInfo>
     <Profile ProfileType="1">
       <Customer>
       </Customer>
     </Profile>
   </ProfileInfo>
 </Profiles>

suds客户端为我提供了2个对象:

ns0:ProfileType
ns0:ProfilesType

没有ProfileInfo对象。

这就是我的意思: 我创建了一个ProfilesType对象:

profiles = client.factory.create('ns0:ProfilesType')

此对象如下所示:

(ProfilesType){
   ProfileInfo[] = <empty>
}

由于我没有可以创建的ProfileInfo对象,我尝试了两种方法: 1.将ProfileType对象附加到ProfileInfo

profile = client.factory.create('ns0:ProfileType')
profiles.ProfileInfo.append(profile)

这会生成以下XML,服务器会拒绝该

 <Profiles>
   <ProfileInfo>
     <Customer>
     </Customer>
   </ProfileInfo>
 </Profiles>

2 ..创建一个虚拟的profileinfo对象并向其添加profiletype:

 profile_info = {"ProfileInfo": []}
 profile_info["ProfileInfo"].append(profile)
 profiles.ProfileInfo.append(profile_info)

这会引发错误“Type not found:'ProfileInfo'”

我该怎么办?我一直在尝试各种组合,但似乎没有任何效果。

2 个答案:

答案 0 :(得分:0)

我将尝试泡沫医生,可能会有所帮助,请参阅:Suds: Type not found on response

这个回答让我走上正轨。进口医生没有工作,但这样做了:

https://fedorahosted.org/suds/wiki/Documentation#FIXINGBROKENSCHEMAs

我打开了架构,看看缺少的类型所指的位置,并找到了一个命名空间和位置,这里填写了这个:

from suds.xsd.sxbasic import Import

ns = '<fill in the namespace for the missing type>'
schema_url  = '<fill in the url>'
Import.bind(ns, location)
# repeat this for all missing types
# and than create the client
client = Client(wsdl_url)
message= '%s' % client
# log the message, and this works for me!

答案 1 :(得分:0)

我必须创建一个虚拟的ProfileInfo对象。

profile_info = {"Profile": []}
profile_info["Profile"].append(profile)
profiles = client.factory.create('ns0:ProfilesType')
profiles.ProfileInfo.append(profile_info)