Мой ответ был бы: Не.
Savon автоматически создаст конверт для вас. Вы можете передать любой заголовок и тело, которые хотите, как массивы, хэши или строки XML. Вы можете манипулировать существующими (по умолчанию) пространствами имен и даже переопределять действия ввода. Я не уверен, почему кому-то понадобится создать SOAP-конверт в XML-синтаксическом анализаторе, таком как nokogiri.
Если ваша причина не в том, чтобы использовать Savon для создания конверта, так это то, что ему не хватает какой-либо функциональности, необходимой конечной точке, сообщите мне, какая именно проблема. В прошлом мне пришлось внести существенные изменения в Savon, чтобы удовлетворить определенные API, поэтому, скорее всего, у меня уже есть патч для вас. И если нет, я могу, конечно, указать вам в правильном направлении, чтобы вы могли создать свой собственный патч.
И если вам все еще нужно создать конверт за пределами Савона, я бы рекомендовал вам не использовать Savon вообще и просто отправить XML через один из многих отличных http-библиотек.
EDIT:
Для того, чтобы проиллюстрировать, как использовать SOAP заголовки (и пространств имен), вы можете включить их, а также тело в методе запроса:
client = Savon::Client.new "http://url.to/wsdl"
response = client.get do |soap|
# Use merge! for namespaces so that you don't overwrite all of the original namespaces (while still retaining the ability to overwrite individual ones)
soap.namespaces.merge!({
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema"
})
# Use soap.header just like you would soap.body
soap.header = {
# SOAP header hash
}
# soap.body as usual
soap.body = {
# SOAP body hash
}
end
спасибо, я хотел бы использовать Савон, но когда я проверил документацию, я не был уверен, что он будет помещать заголовки. В основном мне нужно только поместить тело и что-нибудь за пределами заголовков мыла, используя Savon? –
Angela
Angela, очень возможно указать заголовки SOAP. Пожалуйста, см. Мое редактирование, чтобы посмотреть, как это сделать. – vonconrad