Использование веб-сервисов SOAP с использованием экранированного XML в качестве атрибута - PullRequest
2 голосов
/ 21 июля 2011

Я использую suds для использования веб-сервисов SOAP следующим образом:

from suds.client import Client
url = "http://www.example.com?wsdl"
client = Client(url)
client.service.example(xml_argument)

Если я вызываю метод с использованием этого xml, то работает:

<?xml version="1.0" encoding="UTF-8"?><a><b description="Foo Bar"></b></a>

Но если я добавлю цитату(экранированный) следующим образом:

<?xml version="1.0" encoding="UTF-8"?><a><b description="Foo &quot; Bar"></b></a>

Я получаю следующую ошибку (из веб-службы):

Имя атрибута "Bar", связанное с элементом типа "b", должно бытьсопровождаемый символом '='.

Я использую версию: 0.4 GA build: R699-20100913

Не правильно ли я использую suds.client?какие-либо предложения?


ОБНОВЛЕНИЕ:

Я уже связался со службой поддержки, отправил им по электронной почте мой сбежавший XML, и они сказали мне, что это работает для них, так что, вероятно, это вызвано неправильным использованиемот пены на моей стороне.Я попробую с PySimpleSOAP .

1 Ответ

1 голос
/ 21 июля 2011

Мой - в основном предположение, но ошибка, которую вы цитируете, кажется, сгенерирована из проверки правильности XML на машине, предоставляющей услугу.

Похоже, что на той стороне кабеля ониполучая что-то вроде:

<a><b description="Foo" Bar"></b></a>

(&quot; преобразуется в ") и, таким образом, они говорят вам, что вместо этого вы должны отправить что-то вроде:

<a><b description="Foo" Bar="..."></b></a>

, что явно нето, что ты хочешь.

AFAIK Ваш XML правильно сформирован (только что протестирован здесь для дополнительной безопасности), поэтому либо есть ошибка в suds (что меня удивит, учитывая величину ошибки и зрелость)пакета) или имеется ошибка на сервере, предоставляющем сервис (возможно, «слишком раннее преобразование» из сущностей XML в обычные символы).

Опять же: здесь много спекуляций и мало веских фактов, но явсе еще HTH!:)

...