如何使用已经形成xml的请求消息来提供suds

时间:2012-04-11 16:17:53

标签: python testing soap suds

我有一些web服务要测试,在服务器上运行,在axis2上。

我收到了一些我们应该使用我们的网络服务从第三方收到的xml数据。 xml数据根据我们的web服务的wsdl格式良好。

以便测试我做:(跟随suds中给出的axis2.py测试文件)

url = 'http://localhost:8080/axis2/services/{0}?wsdl'.format('myWebService')
print 'url=%s' % url
client = Client(url)
print client
with open("input.xml") as f:
    inputXml = f.read()
print client.service.myWebserviceRequest(inputXml)

我收到以下错误消息:

urllib2.URLError: <urlopen error [Errno 10061] No connection could be made becau
se the target machine actively refused it>

就我所看到的语句print Client而言,suds正在等待不在xml表单下的对象,而是在python表单下。 (这就是axis.py代码建议的其余部分)

但在我的情况下,我已经在xml中格式化了数据。你知道我如何将它作为xml直接输入请求client.service.myWebserviceRequest

(因为我访问axis2 webservice getVersion,这不是连接问题)

EDIT1: print client statement的输出。

Service ( myWebService ) tns="ws.myCompany.com"
   Prefixes (2)
      ns2 = "myData.ws.myCompany.com"
      ns3 = "ws.myCompany.com"
   Ports (1):
      (MyServiceSSOAP12port_http)
         Methods (1):
            sendMyInformation(ns2:DATA_HEADER DATA_HEADER, ns2:OTHER_CONTENT OTHER_CONTENT, )
         Types (1):
            WSExceptionType

让我感到困惑的是,suds客户端公开了sendMyInformation((ns2:DATA_HEADER DATA_HEADER, ns2:OTHER_CONTENT OTHER_CONTENT,)

形式的服务

而在我的wsdl中,要提供的数据是:

<xs:element name="WHOLE_CONTENT">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="DATA_HEADER"/>
            <xs:element ref="OTHER_CONTENT"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

2 个答案:

答案 0 :(得分:2)

在寻找答案时看到了这个问题,

你解决了吗?你看起来像下面的

消息注入(诊断/测试?)¶ 服务API提供消息/回复注入。

要注入要发送的soap消息或注入要处理的回复或错误,就好像soap服务器返回的那样,只需指定__inject关键字参数。

调用服务时。例如:

发送原始肥皂消息:

print client.service.test(__inject={'msg':message})
GP

答案 1 :(得分:1)

从我认为suds版本0.39开始,您可以传入要发送的原始xm。

from suds.sax.text import Raw

xml = Raw('<person name="jeff"><age>5</age></person>')
result = client.service.sendMyInformation(xml)

要检查实际发送的内容,在构建客户端时,您不能将nosend标志设置为true。此标志不发送但生成肥皂

client=Client(url, nosend=True)
print client.envelope