2012-04-11 53 views
1

我有一些webservice可以在axis2中的服务器上运行。如何用已经xml格式化的请求消息填充泡沫

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

以便测试我做的:

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) 

(在肥皂水中给出的axis2.py测试文件以下),我收​​到以下错误消息:据

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

我看到print Client这个声明,它是在等待不在xml窗体下的对象,而是在python窗体下。 (这就是axis.py代码的其余部分所暗示的)

但是在我的情况下,我已经在xml中创建了数据。你知道我怎么可以直接输入它作为XML请求client.service.myWebserviceRequest

(它不是连接的一个问题,因为我访问该web服务的Axis2 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 

令我百思不解的是,皂液客户端暴露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> 
+0

您能显示'print client'的输出吗? – dusan 2012-04-11 18:37:35

+0

我已编辑并添加了信息。 – 2012-04-12 09:39:01

+0

您应该调用'client.service.sendMyInformation'而不是'client.service.myWebserviceRequest'。但Suds期望有一个'DATA_HEADER'和一个'OTHER_CONTENT'对象,而不是你的'inputXml' ... – dusan 2012-04-12 12:42:47

回答

2

刚看到这个问题寻找时回答,

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

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

要注入要发送的soap消息或注入要处理的回复或错误(如同由soap服务器返回一样),只需指定__inject关键字参数即可。

当调用服务。例如:

发送原始SOAP消息:

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

1

与我开始觉得肥皂水版本0.39,您可以在要发送超过原始XM通过。

from suds.sax.text import Raw 

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

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

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