Ответ Python не совпадает с soapUI
Когда я получаю доступ к веб-сервису с помощью soapUI, я получаю правильно отформатированный текст. Но когда я использую код 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>
Я хотел бы знать, если это проблема с питоном или проблема с сервером.
Для каждой записи есть открывающий и закрывающий тег под названием "allBusType" в ответе soapUI, который отсутствует в ответе python. Выходные данные Python возвращают одну строку для всех записей.
1 ответ
SoapClient возвращает SimpleXmlElement
как указано в первой строке документов SoapClient:
Простой, минимальный и функциональный потребитель веб-службы HTTP SOAP, использующий httplib2 для подключения и SimpleXmlElement для обработки запросов / ответов XML.
Поэтому, чтобы просмотреть его как XML, вам нужно вызвать as_xml
метод на возвращенный SimpleXmlElement
:
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()