Перезаписать мыльный конверт в Suds Python
Вопрос
У меня есть камера, и я пытаюсь подключиться к ней через Sud.Я попытался отправить необработанный XML и обнаружил, что единственное, что мешает работе xml sud, - это неправильное пространство имен конверта Soap.
Пространство имен конверта:
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
и я хочу переписать его на:
xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
Чтобы добавить пространство имен в Python, я пробую этот код:
message = Element('Element_name').addPrefix(p='SOAP-ENC', u='www.w3.org/ENC')
Но когда я добавляю SOAP-ENV
в пространство имен он не записывает, поскольку оно жестко запрограммировано в привязках suds.Есть ли способ перезаписать это в suds?
Спасибо за любую помощь.
Решение 2
Мне удалось заставить это работать, мыльный конверт жестко закодирован в bindings.py
который хранится в suds.egg
установлен в ваших сайтах-пакетах.Я изменил адрес конверта SOAP на http://www.w3.org/2003/05/soap-envelope
.Это было совместимо с моей камерой.Мне не удалось найти команду для перезаписи этого конверта в suds, поэтому я жестко запрограммировал ее в файлеbindings.py.
Спасибо за любую помощь
Другие советы
Я обошел это, переопределив вручную suds.binding.envns
переменная в bindings
модуль:
from suds.bindings import binding
binding.envns=('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')
С этого момента все идет хорошо (с мой сервис, то есть)
Обновление вручную binding.py
определенно это не правильный путь.Вы должны уметь использовать ImportDoctor
чтобы переопределить привязки по умолчанию.Посмотрите документацию по исправление сломанных схем на сайте Suds.
Кроме того, какие версии Python и suds вы используете?
from suds.client import Client
from suds.plugin import MessagePlugin
WSDL_url = "my_url?wsdl"
class MyPlugin(MessagePlugin):
def marshalled(self, context):
#print(str(context.envelope))
context.envelope.nsprefixes['SOAP-ENV']='myText'
client = Client(WSDL_url, plugins=[MyPlugin()])