私のSOAP-Serverは、soap-clientを認証するために、すべてのリクエストがsoap-headerに有効なトークンを持っていることを期待しています。このトークンは一定期間のみ有効であるため、すべての呼び出しで無効になると予想する必要があります。
SOAPサーバーで(再)認証した後、savonにSOAPヘッダーを再構築させる(つまり、新しい認証トークンを使用する)方法を見つけようとしています。それがサボンの問題なのかルビーの問題なのかはわかりません。これが私がこれまでに持っているものです。
class Soapservice
extend Savon::Model
# load stored auth-token
@@header_data = YAML.load_file "settings.yaml"
client wsdl: 'locally-cached-wsdl.xml',
soap_header: {'verifyingToken' => @@header_data}
operations :get_authentification_token, :get_server_time
# request a new auth-token and store it
def get_authentification_token
response = super(:message => {
'oLogin' => {
'Username' => 'username',
'Userpass' => 'password'
}
})
settings = {
'UserID' => response[:user_id].to_i,
'Token' => response[:token],
}
File.open("settings.yaml", "w") do |file|
file.write settings.to_yaml
end
@@header_data = settings
end
def get_server_time
return super()
rescue Savon::SOAPFault => error
fault_code = error.to_hash[:fault][:faultstring]
if fault_code == 'Unauthorized Request - Invalide Token'
get_authentification_token
retry
end
end
end
電話すると
webservice = Soapservice.new
webservice.get_server_time
無効なトークンを使用すると、新しいトークンが再認証されて正常に保存されretry
ますが、新しいヘッダーは読み込まれません(結果は無限ループになります)。何か案は?