проблемы soaplib с символами XML в полезной нагрузке строки - PullRequest
0 голосов
/ 27 июля 2010

Я создал простой веб-сервис 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 он работал просто отлично.

Ответы [ 2 ]

1 голос
/ 28 июля 2010

У меня были проблемы с "более простыми" мыльными библиотеками в python (особенно suds). Недавно у меня возник вопрос, который заставил меня использовать soapPy, и проблема, похожая на вашу, просто исчезла.

Suds + JIRA = SAXException

Этот вопрос также содержал хорошие предложения по использованию, например, wireshark (или google «мыльный отладчик»), чтобы увидеть, что происходит на более низком уровне.

0 голосов
/ 03 августа 2010

Проблема была не в мыльнице, а в коде Django. Этот код по какой-то причине читал request.POST.items(), что приводило к прерыванию запроса SOAP по любому специальному символу (например, =, &,>). Переключился на soaplib trunk , обновил код Django , и это решило как возникшую ошибку аргументов, так и связанные с Unicode ValueErrors, которые вызывал lxml.

...