#python #soap #spyne
Вопрос:
Я пытаюсь определить службу, в которую будет звонить клиент. XML, который они отправляют для моей конечной точки GetRecord, будет выглядеть следующим образом (URL-адреса пространства имен изменены):
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:gjx="http://1.org"
xmlns:gjx1="http://2.org">
<soapenv:Header>
<gjx:AuthHeader>
<!--Optional:-->
<gjx:UserName></gjx:UserName>
<!--Optional:-->
<gjx:Password></gjx:Password>
</gjx:AuthHeader>
</soapenv:Header>
<soapenv:Body>
<gjx:GetRecord>
<gjx:recordIdFields>
<!--Zero or more repetitions:-->
<gjx:Symbol>
<!--Optional:-->
<gjx1:Name>Bob Barker</gjx1:Name>
<!--Optional:-->
<gjx1:Value>ASDF1234</gjx1:Value>
</gjx:Symbol>
</gjx:recordIdFields>
</gjx:GetRecord>
</soapenv:Body>
</soapenv:Envelope>
Обратите внимание, как отличается пространство имен для «Имя» и «Значение».
Поэтому я определил сложную модель следующим образом:
class NameValuePair(ComplexModel):
__namespace__ = "http://1.org"
__type_name__ = "Symbol"
Name = String.customize(sub_ns="http://2.org")
Value = String.customize(sub_ns="http://2.org")
Но я все еще получаю ошибки проверки от службы из-за пространства имен gjx1. Отключение проверки lxml работает, но в идеале я хотел бы оставить это включенным.
Поддерживается ли это в Spyne? Или мне просто придется отключить проверку lxml и вместо этого использовать мягкую проверку?