2013-03-06 50 views
1

我有一个异常,当试图建立自定义标头与萨翁2.1.0身份验证,这里是示例代码重现问题,我会感激任何帮助这个问题。未定义的带哈希与自定义标头在萨翁2.1.0

require 'open-uri' 
require 'savon' 

headers = { 
    'IvansWSAuthentication' => { 
    'User' => 'my_user', 
    'Password' => 'my_pass', 
    'ClientId' => 'my_client_id' 
    } 
} 

x12 = 'test' 

client = Savon.client(
    wsdl: 'https://limeservices.ivans.com/EligibilityOne.asmx?WSDL', 
    headers: headers 
) 

request_params = { 
    form270: x12 
} 

response = client.call(:send_commercial_eligibility_form_request, message: request_params) 

这是例外:

1.9.3-p392 :023 > response = client.call(:send_commercial_eligibility_form_request, message: request_params) 
D, [2013-03-05T23:02:30.647097 #11590] DEBUG -- : HTTPI GET request to limeservices.ivans.com (net_http) 
I, [2013-03-05T23:02:31.600016 #11590] INFO -- : SOAP request: https://limeservices.ivans.com/EligibilityOne.asmx 
I, [2013-03-05T23:02:31.600157 #11590] INFO -- : IvansWSAuthentication: {"User"=>"my_user", "Password"=>"my_pass", "ClientId"=>"my_client_id"}, SOAPAction: "http://tempuri.org/SendCommercialEligibilityFormRequest", Content-Type: text/xml;charset=UTF-8, Content-Length: 389 
D, [2013-03-05T23:02:31.600206 #11590] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://tempuri.org/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><tns:SendCommercialEligibilityFormRequest><tns:form270>test</tns:form270></tns:SendCommercialEligibilityFormRequest></env:Body></env:Envelope> 
D, [2013-03-05T23:02:31.600474 #11590] DEBUG -- : HTTPI POST request to limeservices.ivans.com (net_http) 
NoMethodError: undefined method `strip' for #<Hash:0x007fb044365a50> 
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:1435:in `block in initialize_http_header' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/utils.rb:451:in `block in each' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/utils.rb:450:in `each' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/utils.rb:450:in `each' 
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:1433:in `initialize_http_header' 
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:1862:in `initialize' 
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:2093:in `initialize' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:87:in `new' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:87:in `request_client' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:55:in `block in do_request' 
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:745:in `start' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:54:in `do_request' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:31:in `request' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi.rb:137:in `request' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi.rb:109:in `post' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/savon-2.1.0/lib/savon/operation.rb:59:in `call!' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/savon-2.1.0/lib/savon/operation.rb:48:in `call' 
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/savon-2.1.0/lib/savon/client.rb:38:in `call' 
    from (irb):23 
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>'1.9.3-p392 :024 > 
+0

哪里是例外??? – bjhaid 2013-03-06 06:51:53

回答

0

好了,问题是,通过对萨翁2.1.0设置参数“头”,我在做什么是建立HTTP请求头和HTTP请求参数应该是一个关键字:字符串,因为ruby HTTP库在标题中包含的每个哈希值上调用,这引发了异常。

我最初的想法是设置自定义的SOAP头进行认证,因此所有我需要做的就是:

client = Savon.client(
    wsdl: 'https://limeservices.ivans.com/EligibilityOne.asmx?WSDL', 
    soap_header: headers 
)