Как Примитивные Типы Могут Иметь Свое Собственное Пространство Имен?

#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 и вместо этого использовать мягкую проверку?