Savon - ярлык для добавления каждого элемента в пространство имен? (МЫЛО)

В настоящее время я создаю SOAP-клиент в Ruby, используя Savon, но когда я пишу код для генерации XML, мне нужно написать:

builder = Builder::XmlMarkup.new
builder.ns :request do
    builder.ns :Foo do
        builder.ns :FooBar do
            builder.ns :Bar, "Foo"
        end
    end
end

чтобы генерировать

<ns:request>
<ns:Foo>
<ns:FooBar>
<ns:Bar>Foo</ns:Bar>
</ns:FooBar>
</ns:Foo>
</ns:request>

Что, очевидно, является довольно повторяющимся, и я хотел бы вырезать повторения NS, если это возможно. Я также заметил, что без ns мне разрешено использовать фигурные скобки, а не DOS / End.

Есть ли способ обойти это? Мне не нравится отсутствие возможности использовать фигурные скобки, и когда я добавлю динамический ввод имен элементов позже, это может усложнить ситуацию.

Я старался

def send_builder(requestsym, data=nil)
@@builder requestsym, data
end

Но мои знания блоков /procs/lambdas не достаточно хороши, чтобы работать с вложенными элементами.

1 ответ

Я думаю, что это то, что вам нужно, так что вы хотите добавить в свой запрос пространство имен xml, верно?

С помощью Savon вы можете добавить пространство имен к вашему XML-запросу следующим образом

client = Savon.client do
   wsdl: "http://www.webserviceurl.net/service.asmx?WSDL"
   namespace_identifier: :ns
end
response = client.call(:yourOperationHere, message: { request: { foo: { foo_bar: { bar: "Foo" } } } })

Результат будет (тело вашего запроса):

<ns:request>
  <ns:foo>
    <ns:fooBar>
      <ns:bar>
        Foo
      </ns:bar>
    </ns:fooBar>
  </ns:foo>
</ns:request>

Как примечание для вас, у Savon есть нечто, называемое Gyoku, оно преобразует символы в: camelcase, поэтому, если ваш запрос caseSensitive, используйте символы вместо символов.

Другие вопросы по тегам