【问题标题】:how to feed suds with an already xml-formated request message如何使用已经是 xml 格式的请求消息来提供 suds
【发布时间】:2012-04-11 16:17:52
【问题描述】:

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

我收到了一些 xml 数据,我们应该使用我们的 Web 服务从第三方接收这些数据。 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 webservicegetVersion

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>

【问题讨论】:

  • 你能显示print client的输出吗?
  • 我已经编辑并添加了信息。
  • 您应该调用client.service.sendMyInformation 而不是client.service.myWebserviceRequest。但是 Suds 期望 DATA_HEADEROTHER_CONTENT 对象,而不是您的 inputXml...

标签: python testing soap suds


【解决方案1】:

刚在找答案的时候看到这个问题,

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

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

要注入要发送的soap消息或注入要处理的回复或故障,就像由soap服务器返回一样,只需指定__inject关键字参数即可。

调用服务时。例如:

发送原始肥皂消息:

print client.service.test(__inject={'msg':message})
全科医生

【讨论】:

    【解决方案2】:

    从我认为 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多