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, используйте символы вместо символов.