wsdl:
命名空间。
我正在构建的请求使用tns:
命名空间。我很想能够使用Savon :: Model,但现在我必须这样做:
client.request :tns, :function_name do
soap.body = { params }
end
而不是像:
super(params)
在每个函数中创建请求块是繁琐的,我必须每次都定义函数名称而不是Savon自动调用正确的函数,就像在理想情况下会发生的那样。现在我的功能看起来像
def foo
client.request :tns, :foo do
...
end
不得不两次说“foo”似乎很荒谬。有没有办法为扩展Savon :: Model的类中的每个请求设置默认命名空间?
答案 0 :(得分:0)
我不确定我是否理解你的问题。我假设您正在询问如何设置默认命名空间并将请求主体包装在函数中,因此您不需要每次都编写请求主体。这段代码适合我,但我删除了一些不相关的部分
class ExampleWS
EXAMPLE_WS_DEFAULT_NAMESPACE = "urn:example:request:1.0.0"
......
def getStockPrice( locale, stockId )
response = $client.request :get_stock_price do
soap.input = [
"ns1:getStockPrice",
{
"xmlns:ns1" => EXAMPLE_WS_DEFAULT_NAMESPACE #set default namespace here
}
]
soap.body = {
"locale" => locale,
"stockId" => stockId
}
end
end
......
end
......
# call the function
getStockPrice("en_US", 123 )
答案 1 :(得分:0)
这对我有用。它使用了Savon 2,但是:
class Soapservice
extend Savon::Model
client wsdl: "http://example.com?wsdl", env_namespace: :tns,
operations :get_resource, :put_resource
def :get_resource(id)
super(message: { id: id })
end
end
service = Soapservice.new
response = service.get_resource(1) #overwriting get_resource
# or
response = service.put_resource(message: { username: "luke", secret: "secret" })
(我的例子建立在官方savon homepage上的那个)
答案 2 :(得分:0)
client = Savon.client do
wsdl "blah blah"
element_form_default :qualified
namespace_identifier :tem
env_namespace :soapenv
end