python响应与soapUI不匹配

时间:2015-04-01 13:38:47

标签: python soap wsdl pysimplesoap

当我使用soapUI访问Web服务时,我得到格式正确的文本。 但是当我使用python代码时,我得到一个字典,其中所有行都在一个allBusType键中。

from pysimplesoap.client import SoapClient
url = 'http://180.92.171.93:8080/UPSRTCServices/UPSRTCService?wsdl'
namespace = 'http://service.upsrtc.trimax.com/'
client = SoapClient(wsdl=url, namespace=namespace, trace=True)
print client.GetBusTypes()

以上代码返回以下内容:

{'return': {'allBusType': [{'busName': u'AC SLEEPER'}, {'busType': u'ACS'}, {'ischildconcession': u'N'}, {'isseatlayout': u'N'}, {'isseatnumber': u'N'}, {'busName': u'AC-JANRATH'}, {'busType': u'JNR'}, {'ischildconcession': u'N'}, {'isseatlayout': u'Y'}, {'isseatnumber': u'Y'},....

根据以下屏幕,soapUI将所有公交车站作为单独的标签返回。 (而不是像上面一样停在一个标签中)

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns3:GetBusTypesResponse xmlns:ns2="com.trimax.upsrtc.xml.jaxb.model" xmlns:ns3="http://service.upsrtc.trimax.com/">
         <return>
            <allBusType>
               <busName>AC SLEEPER</busName>
               <busType>ACS</busType>
               <ischildconcession>N</ischildconcession>
               <isseatlayout>N</isseatlayout>
               <isseatnumber>N</isseatnumber>
            </allBusType>
            <allBusType>
               <busName>AC-JANRATH</busName>
               <busType>JNR</busType>
               <ischildconcession>N</ischildconcession>
               <isseatlayout>Y</isseatlayout>
               <isseatnumber>Y</isseatnumber>
            </allBusType>

我想知道这是python问题还是服务器问题。

对于每个条目,都有一个名为&#34; allBusType &#34;的开始和结束标记。在python响应中缺少的soapUI响应中。 Python输出为所有条目返回一行。

1 个答案:

答案 0 :(得分:1)

SoapClient返回SimpleXmlElement,如SoapClient文档的第一行所述:

  

一个简单,最小化且功能强大的HTTP SOAP Web服务使用者,使用httplib2作为XML请求/响应操作的连接广告SimpleXmlElement。

因此,要将其视为xml,您需要在返回的SimpleXmlElement上调用as_xml方法:

  

as_xml(pretty = False):返回文档的XML表示

以下工作:

from pysimplesoap.client import SoapClient
url = 'http://180.92.171.93:8080/UPSRTCServices/UPSRTCService?wsdl'
namespace = 'http://service.upsrtc.trimax.com/'
client = SoapClient(wsdl=url, namespace=namespace, trace=True)
results = client.GetBusTypes()
print results.as_xml()