2012-07-09 76 views
5

我需要創建一個ruby web服務客戶端(使用Savon)來對Web服務進行soap調用,該服務需要Nonce中的EncodingType。 所以正確的SOAP消息都會有這樣的隨機數元素:使用Ruby和Savon的SOAP客戶端:如何在Nonce元素中添加EncodingType屬性

...... 
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">SomeHashValue</wsse:Nonce> 
...... 

但在我薩翁的客戶,我不知道如何添加屬性的隨機數元素。 這裏我的代碼:

...... 
client = Savon.client do 
    wsdl.endpoint = "http://webservicehost/TestWebService" 
    wsdl.namespace = "namespace" 
    wsse.credentials "username", "password" 
    wsse.digest = "true" 
end 
client.request :get_service do |soap| 
    soap.input = [ 
    "GetService", 
    { "xmlns" => "namespace" } 
    ] 
soap.body = { 
    "locale" => "en_US", 
    "serviceID" => '123' 
    } 
end 
...... 

和Nonce在生成的SOAP消息是這樣的:

...... 
    <wsse:Nonce>SomeHashValue</wsse:Nonce> 
...... 

所以我的問題是,如何將屬性編碼類型添加到隨機數元素,而不改變/刪除Nonce元素中的SomeHashValue?

回答

3

我已經成功修改gems\akami-1.2.1\lib\akami\wsse.rb文件的def wsse_username_token方法。

我不知道最好的方法,但這是行不通的,只是增加到:attributes!

前:

:attributes! => { "wsse:Password" => { "Type" => PASSWORD_DIGEST_URI } } 

後:

:attributes! => { "wsse:Password" => { "Type" => PASSWORD_DIGEST_URI }, "wsse:Nonce" => { "EncodingType" => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary'} } 
相關問題