Многоуровневый префикс не работает в мыле namespace_identifier - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь создать XML-запрос в Savon, но идентификатор пространства имен не работает с вложенными атрибутами.

Я пробовал namespace_identifier:: ns в клиенте Savon, он отображается для первого уровня, но не для вложенного.

customer = {
        "customer" =>
            {
                "Email" => 'some_email@gmail.com',
                "FirstName" =>  'First Name',
                "LastName" =>  'Last Name',
                "LocationGroupId" =>  1,
                "OriginationLocationId" =>  1
            }
    }

client = Savon.client(wsdl: "wsdl url",
                          namespace: "namespace url" ,
                          env_namespace: :soapenv,
                          namespace_identifier: :ns,
                          element_form_default: :qualified,
                          wsse_auth: [USER_NAME,PASSWORD],
                          log: true,
                          log_level: :debug,
                          pretty_print_xml: true)

request = client.call(:submit_customer, message: customer)

Фактический результат

 <soapenv:Body>
    <ns:SubmitCustomer>
      <ns:customer>
        <ns:Email>some_email@gmail.com</ops:Email>
        <ns:FirstName>First Name</ns:FirstName>
        <ns:LastName>Last Name</ns:LastName>
        <ns:LocationGroupId>1</ns:LocationGroupId>
        <ns:OriginationLocationId>1</ns:OriginationLocationId>
      </ns:customer>
    </ns:SubmitCustomer>
  </soapenv:Body>

Ожидаемый

 <soapenv:Body>
    <ns:SubmitCustomer>
      <ns:customer>
        <ops:Email>some_email@gmail.com</ops:Email>
        <ops:FirstName>First Name</ns:FirstName>
        <ops:LastName>Last Name</ns:LastName>
        <ops:LocationGroupId>1</ns:LocationGroupId>
        <ops:OriginationLocationId>1</ns:OriginationLocationId>
      </ns:customer>
    </ns:SubmitCustomer>
  </soapenv:Body>
...