Я создал простой веб-сервис SOAP с использованием soaplib и столкнулся с проблемой, при которой отправляемые параметры SOAP, включая амперсанды или угловые скобки, игнорируются даже при экранировании.
Установлен ли метод для принятияпримитивная строка или примитив типа 'any', любой из этих введенных символов приводит к веб-ошибке (с использованием suds) этого типа:
suds.WebFault: Server raised fault: 'my_method() takes exactly 2 arguments (1 given)'
А пока вот методс удалением кода добавления, используемого для хранения результата:
@soapmethod(soap_types.String, _returns=soap_types.Boolean)
def my_method_(self, sample):
return True
Вызов этого метода с любой простой строкой работает просто отлично, например, в suds,
suds_object.service.my_method('Hello World')
приводит к «true».Но добавьте любой амперсанд или угловую скобку, например
suds_object.service.my_method('Hello & World')
, и возникнет исключение.При включенном ведении журнала я вижу, что suds ускользает от этих символов.До сих пор я мог понять, что проблема не в примитивном уровне, и я не могу понять, где или в чем проблема.Это довольно затрудняет отправку полезных нагрузок XML через службу.
Используемый класс является подклассом SimpleWSGISoapApp, а метод служит представлением Django.Я заметил, что при попытке использовать Hello World пример с использованием клиентской библиотеки soaplib он работал просто отлично.