Клиент Pysimplesoap не может найти импортированные файлы XSD
Я пытаюсь использовать SoapUI для настройки имитируемой "копии" хоста веб-службы, чтобы я мог использовать его для тестирования нового клиентского приложения, которое подключится к нему. У меня есть WSDL, который использует хост, и я создал SOAPUI SOAP-проект из него. Папка проекта включает в себя сам WSDL, а также четыре XSD-файла:
UPLOADER_FILE_SVC.wsdl
UPLOADERFILE.V1.xsd
UPLOADERFILE.xsd
UPLOADERRESP.V1.xsd
UPLOADERRESP.xsd
XSD-файлы предназначены для поддержки этих элементов в WSDL:
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://QA-ASSIST/UPLOADERFILE.xsd" schemaLocation="UPLOADERFILE.V1.xsd"/>
<xsd:import namespace="http://QA-ASSIST/UPLOADERRESPResponse" schemaLocation="UPLOADERRESP.V1.xsd"/>
</xsd:schema>
Теперь, когда я использую SoapUI для создания образца запроса и образца ответа, а затем запускаю MockService и выполняю образец запроса, все работает. То есть пример запроса и ответа показывает все атрибуты и элементы, указанные для них через WSDL и XSD; образец запроса получен MockService, а MockService отправляет образец ответа.
Проблема возникает, когда я пытаюсь использовать Python и пакет PySimpleSOAP для создания клиента, который будет обращаться к MockService. Вот код, который я имею в качестве отправной точки:
from pysimplesoap.client import SoapClient
# create a simple consumer
client = SoapClient(wsdl = "http://QA-ASSIST/upload_service?WSDL",
trace = True)
# call the remote method
response = client.UPLOADERFILE(Data='1234554321,JSMITH,,')
# extract and convert the returned value
result = response.Data
print str(result)
И вот что я получаю, когда пытаюсь запустить его. Трассировка отладки, как я могу судить, указывает на проблему с поиском импортированных файлов XSD.
C:\Users\Administrator\Desktop\t2>soapclient.py
DEBUG:pysimplesoap.client:Parsing wsdl url: http://QA-ASSIST/upload_service?WSDL
INFO:pysimplesoap.helpers:GET http://QA-ASSIST/upload_service?WSDL using urllib2
2.7
DEBUG:pysimplesoap.helpers:Importing schema http://QA-ASSIST/UPLOADERFILE.xsd fr
om upload_service?WSDL&interface=UPLOADER_FILE_SVC_Binding&part=UPLOADERFILE.V1.
xsd
DEBUG:pysimplesoap.helpers:Scheme not found, trying http
INFO:pysimplesoap.helpers:GET http://QA-ASSIST\upload_service?WSDL&interface=UPL
OADER_FILE_SVC_Binding&part=UPLOADERFILE.V1.xsd using urllib2 2.7
ERROR:pysimplesoap.helpers:<urlopen error [Errno 11004] getaddrinfo failed>
DEBUG:pysimplesoap.helpers:Scheme not found, trying https
INFO:pysimplesoap.helpers:GET https://QA-ASSIST\upload_service?WSDL&interface=UP
LOADER_FILE_SVC_Binding&part=UPLOADERFILE.V1.xsd using urllib2 2.7
ERROR:pysimplesoap.helpers:<urlopen error [Errno 11004] getaddrinfo failed>
DEBUG:pysimplesoap.helpers:Scheme not found, trying file
INFO:pysimplesoap.helpers:Fetching url file:QA-ASSIST\upload_service?WSDL&interf
ace=UPLOADER_FILE_SVC_Binding&part=UPLOADERFILE.V1.xsd using urllib2
ERROR:pysimplesoap.helpers:<urlopen error [Error 3] The system cannot find the p
ath specified: u'QA-ASSIST\\upload_service?WSDL&interface=UPLOADER_FILE_SVC_Bind
ing&part=UPLOADERFILE.V1.xsd'>
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\t2\SoapClient.py", line 5, in <module>
trace = True)
File "C:\Python27\lib\site-packages\pysimplesoap\client.py", line 169, in __in
it__
self.services = wsdl and self.wsdl_parse(wsdl, cache=cache)
File "C:\Python27\lib\site-packages\pysimplesoap\client.py", line 862, in wsdl
_parse
services = self._xml_tree_to_services(wsdl, cache, force_download)
File "C:\Python27\lib\site-packages\pysimplesoap\client.py", line 617, in _xml
_tree_to_services
global_namespaces=global_namespaces)
File "C:\Python27\lib\site-packages\pysimplesoap\helpers.py", line 408, in pre
process_schema
xml = fetch(schema_location, http, cache, force_download, wsdl_basedir)
File "C:\Python27\lib\site-packages\pysimplesoap\helpers.py", line 58, in fetc
h
raise RuntimeError('No scheme given for url: %s' % url)
RuntimeError: No scheme given for url: upload_service?WSDL&interface=UPLOADER_FI
LE_SVC_Binding&part=UPLOADERFILE.V1.xsd
Итак, если предположить, что это проблема - то есть, что файлы XSD не могут быть найдены, когда они находятся в том же пути к папке, что и WSDL, - тогда кто-нибудь может сказать мне, в какой путь к папке мне нужно их поместить?
Или, если я просто в лесу со своими предположениями, кто-то может указать мне на дальнейшие исследования, чтобы отследить проблему?
Некоторые дальнейшие детали:
- Windows Server 2008 R2 (как для SoapUI MockService, так и для сценария Python)
- Python 2.7
- PySimpleSOAP 1.16