WSO2 WSF/Ruby Stepping towards 1.0
Yesterday We were doing an RC on WSO2 WSF/Ruby. It will enable growing ruby and rails developers to feel the taste of WS-* stack without having any trouble.
WSF/Ruby is based on the WSO2 WSF/C which itself based on set of apache web service projects like Axis2/C, Rampart/C, Sandesha/C, Savan/C. So the WSF/Ruby will be great platform to experience the power of these project.
Consuming a web services with WSF/Ruby is really simple. It need very few line of code to do a simple web service,
require "wsf" req_payload_string = "<greet> Hello </greet>" client = WSO2::WSF::WSClient.new({"to" => "http://greeting_host/myservice"}) res_message = client.request(req_payload_string) p res_message.payload_to_s << "\n"
The service provider code would be simple as this, You may put this on some function in the controller class inside Rails. (Yea I mean Ruby on Rails)
def greet(message) if message.payload_to_s == "Hello" "<greetResponse>Welcome!</greetResponse>" else "<greetResponse>Still Welcome!</greetResponse>" end end service = WSService.new({"operations" => {"greet" => "greet"}}) #the greet service operation to greet function map res = service.reply(request, response) render :text => res
Ok, That may seems ordinary. How about improving the service by authenticating the user with username tokens,Consumers may give their identity by adding some options at the constructor of WSO2::WSF::WSClient,
policy_content = {"use_username_token" => true} policy = WSPolicy.new({"security" => policy_content}) security_options = {"user" => "dimuthu", "password" => "not my real one", "password_type" => "Digest"} security_token = WSSecurityToken.new(security_options) options = {"to" => "http://greeting_host/myservice", "policy" => policy, "security_token" => security_token} client = WSClient.new(options)
And the service provider will also change their code just to authenticate the user,
def passwordCallBack(username) # hopefully you will be taking the password out from database if(username == "dimuthu") return "not my real one" else return "I m a guest" end end policy_content = {"use_username_token" => true} policy = WSO2::WSF::WSPolicy.new({"security" => policy_content}) sec_token = WSO2::WSF::WSSecurityToken.new({"password_callback" => "passwordCallBack", "password_type" => "Digest"}) wss = WSO2::WSF::WSService.new({"operations" => operations, "policy" => policy, "securityToken" => sec_token})
Similarly not only the username token, but also complete specifications of WS-Security, WS-Addressing, WS-Policy and WS-Reliable messaging can be used from a simple script with WSF/Ruby. This API is proven to be simple and popular with its predecessor WSO2 WSF/PHP. Hope we can do the same in Ruby as well.:)
Ruby Extension Development in C
Ruby extension development in c is really easy, The designers of the languages have done a wonderful job on designing the C API. When I was writing the c code I felt like I m writing Ruby. If you want references, You may start with http://www.rubycentral.com/pickaxe/ext_ruby.html. I must thank Chinthaka to pointing out this tut. And next in ruby source there is a file called README.EXT which will be really useful as well.
-
Recent
- Changing My Blog to dimuthu.org
- Good Bye WordPress!!
- Moving Back To PHP
- New Year Gift for Ruby Developers, The Brand New Web service Dev Kit
- Last JIRA for the Year 2007
- First trip in the year
- WSO2 WSF/Ruby Stepping towards 1.0
- adb with base64Binary and xmime.xsd – little howto (Sending binary with Axis2/WSDL2C)
- Ubuntu
- Axis2/C codegen helper tools
- Checklist for Formatting Hard disk
- living in Wireless
-
Links
-
Archives
- July 2008 (1)
- January 2008 (3)
- December 2007 (7)
- November 2007 (4)
- October 2007 (1)
-
Categories
-
RSS
Entries RSS
Comments RSS