2013-03-06 2 views
1

인증 용 Savon 2.1.0으로 맞춤 헤더를 만들 때 예외가 발생했습니다. 여기에 문제를 재현하는 샘플 코드가 있습니다. 이 주제에 대한 도움. Savon 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

답변

0

좋아, 문제는 그 무엇 내가 뭘를 최대로 설정되어, Savon 2.1.0에 매개 변수 "헤더"를 설정하여 HTTP 요청에 대한 헤더 및 HTTP 요청 매개 변수는 key : String이어야합니다. ruby ​​HTTP 라이브러리가 헤더 내에 포함 된 해시 값 각각에을 붙이면 이 호출되므로 예외가 발생합니다.

내 원래의 아이디어는 내가해야 할 일을했을 모든했다, 인증을위한 사용자 정의 비누 헤더를 설정하는 것이 었습니다 :

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