我正在使用Savon構建客戶端,但想知道如何創建實際信封。如何在Ruby中創建SOAP信封?
我想使用Nokogiri XML Builder,只是傳入值,但不知道如果這是正確的方式。
SOAP信封規格可以在這裏找到:
http://api.postalmethods.com/PostalWS.asmx?op=UploadFile
我正在使用Savon構建客戶端,但想知道如何創建實際信封。如何在Ruby中創建SOAP信封?
我想使用Nokogiri XML Builder,只是傳入值,但不知道如果這是正確的方式。
SOAP信封規格可以在這裏找到:
http://api.postalmethods.com/PostalWS.asmx?op=UploadFile
我的答案是:不。
Savon會自動爲您創建一個信封。您可以傳遞任何您想要的頭和身體,例如數組和哈希或XML字符串。您可以操縱現有的(默認)名稱空間,甚至可以覆蓋輸入操作。我不確定爲什麼有人需要在XML解析器(如nokogiri)中構建SOAP信封。
如果您不想使用Savon構建信封的原因是它缺少端點需要的某種功能,請告訴我具體問題是什麼。爲了滿足某些API,我必須對Savon進行相當大量的更改,所以很可能我已經爲您提供了一個補丁。如果沒有,我可以指出你正確的方向,以便你創建自己的補丁。
如果你仍然需要在Savon之外構建一個信封,我建議你根本不要使用Savon,只需通過其中一個很棒的http庫發送XML。
編輯:
爲了說明如何使用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
薩翁對待輸入SOAP服務嵌套哈希值。信封由薩翁建造,所以你一般不需要擔心太多,如果有的話。
你是否真的設法連接到服務,如果沒有,你會得到什麼錯誤?
如果你還沒有連接和/或有一些問題,如何做到這一點的概念下面應該讓你開始。
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,而不是重新發明輪子
好吧,太棒了 - 這是什麼意思解析wsdl可能不是在生產中前進的方式?我在文檔中看到..... – Angela 2010-06-04 15:48:38
解析wsdl時,您將wsdl傳遞給Savon :: Client的新實例時所執行的操作相當昂貴。一旦你建立了正確的參數通過,你並不需要這麼做。如果我是你,我會像上面這樣工作,看看它是否有效,如果它工作得足夠快,然後做出決定,你是否可以在沒有wsdl的情況下做到這一點。 – 2010-06-04 16:01:49
我明白了 - 那麼如果這樣做,我不會使用這個代碼向前移動......? – Angela 2010-06-06 05:58:19
謝謝,我想使用薩翁,但是當我查看文檔時,我不清楚它是否會放入標題。基本上,我只需要使用Savon將肥皂標題以外的任何內容和任何內容放入其中? –
Angela
2010-06-04 15:46:48
Angela,它很可能指定SOAP標頭。請參閱我的編輯,看看如何。 – vonconrad 2010-06-07 06:29:01