2010-06-04 2 views
1

Я использую Savon для создания клиента, но хочу, чтобы создать реальный конверт.Как создать конверт SOAP в Ruby?

Я думаю об использовании XML-Builder Nokogiri и просто передаю значения, но не уверен, что это правильный путь.

мыле конверт спецификации можно найти здесь:

http://api.postalmethods.com/PostalWS.asmx?op=UploadFile

ответ

3

Мой ответ был бы: Не.

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 
+0

спасибо, я хотел бы использовать Савон, но когда я проверил документацию, я не был уверен, что он будет помещать заголовки . В основном мне нужно только поместить тело и что-нибудь за пределами заголовков мыла, используя Savon? – Angela

+0

Angela, очень возможно указать заголовки SOAP. Пожалуйста, см. Мое редактирование, чтобы посмотреть, как это сделать. – vonconrad

1

Савон обрабатывает входы SOAP услуг как вложенная Хэш. Конверт построен Savon, поэтому вам вообще не нужно слишком беспокоиться об этом, если вообще.

Действительно ли вам удалось подключиться к услуге, а если нет, то какие ошибки вы получаете?

Если вы еще не подключены и/или не имеете проблем с концепцией, как это сделать, вам следует начать следующее.

require 'savon' 

client = Savon::Client.new http://api.postalmethods.com/PostalWS.asmx?wsdl 
response = client.UploadFile do |soap| 
    soap.body = { 
    "Username" => "My User", 
    "Password" => "My password" 
    ... 
    } 
end 

Если вы заполнить пробелы в ... это поможет вам начать хотя разбор WSDL не может быть путь, чтобы идти вперед в производстве. Посмотрите документацию Savon по конкретным вопросам, которые вы получаете.

Редактировать

Если вы не уверены Савоном и SOAP, то вы могли бы просто использовать the postalmethods gem, как описано here, а не заново изобретать колесо

+0

хорошо, отлично - что это значит, что разбор wsdl может и не быть способным продвигаться вперед в производстве? Я видел это в документации ..... – Angela

+0

Ну, разбор wsdl, который вы делаете, когда вы передаете wsdl в новый экземпляр Savon :: Client, представляет собой довольно дорогостоящее упражнение. Вам действительно не нужно это делать, как только вы установили правильные параметры для прохождения. Если бы я был вами, я бы работал над чем-то вроде выше, и посмотрел, работает ли он, и если он работает достаточно быстро, а затем принять решение о том, можете ли вы сделать это без wsdl. –

+0

Я вижу - так что если это сработает, я бы не использовал этот код, двигаясь вперед ...? – Angela

Смежные вопросы