您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何使用JRuby開發Web Service的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
首先,用JRuby開發Web Service,需要安裝ActionWebService,由于rails2.0后的版本已經去掉了ActionWebService,所以現在官網不再更新ActionWebService,所以要正常的開發,就必須安裝datanoise-actionwebservice,安裝方法
gem install datanoise-actionwebservice -v='2.2.2' –source http://gems.github.com
之后,在config/environment.rb文件中添加下面這段話
config.gem 'datanoise-actionwebservice', :lib => 'actionwebservice', :version => '2.2.2'
其中版本"2.2.2"是根據所用的rails版本來的,我用的rails版本是2.2.2的。
隨后,在命令提示行中鍵入 "gem list",看datanoise-actionwebservice 2.2.2是否安裝成功。
如果安裝成功,現在就可以開發部署我們的Web Service了。以下是JRuby開發Web Service全過程:
一、Jruby調用Web Service
require 'soap/wsdlDriver' class ProjectController < ApplicationController def project wsdlLink = 'http://192.168.1.5:7001/bpm?WSDL'; soap_client = SOAP::WSDLDriverFactory.new(wsdlLink).create_rpc_driver @result = soap_client.startSession("eric","eric"); end end
首先從標準庫載入soap/wsdlDriver,定義一個wsdl文件的URL,然后通過該URL創建一個由WSDL描述的Web service的對象,之后就可以調用webservice中定義的方法startSession(name, password)。
二、Jruby部署Web Service
首先建立一個名為”test_api.rb的文件”,其內容如下:
class TestApi < ActionWebService::API::Base api_method :getMessage, :expects => [{:msg=>:string}], :returns => [:string] end
其次,在app/controller下建立一個名為test_server_controller.rb,其內容如下:
require “路徑名/test_api” class TestServerController < ActionController::Base web_service_api TestApi web_service_dispatching_mode :direct wsdl_service_name "test" def getMessage(msg) return “The server return ”+msg; end end
注意:這里是JRuby開發Web Service的重點,普通的controller會繼承自ApplicationController,但是用于發布Web Service的controller必須要繼承ActionController::Base(網上很多例子都是繼承的ApplicationController,開始學習的時候總不知道是什么原因導致發布不成功,仔細對比才發現是controller繼承了錯誤的類)。
做到這里,我們已經成功的發布了一個很簡單的Web Service,打開服務器,在瀏覽器中通過http://127.0.0.1:3000/test_server/wsdl去看wsdl文檔吧。
在test_api.rb文件中,api_method :getMessage 定義的是要發布的Web Service中的方法名
:expects => [{:msg=>:string}] 這表示你定義的方法中,有一個叫msg的參數,并且這個參數的類型是String,如果有兩個參數一個是Sting,一個是int可以這樣寫expectx => [{:one_parameter=>:string},{:two_parameter=>:int}]
在expects中的類型不能使用ActiveRecord::Base的子類,也就是說expects中不能使用創建的model對象作為參數類型,下面這樣子使用是錯誤的
錯誤案例:
app/models/project.rb class Project < ActiveRecord::Base end test_api.rb require “路徑/project” class TestApi < ActionWebService::API::Base api_method :saveProject, :expects => [{:project=>Project}], :returns => [:boolean] end
這樣定義,瀏覽wsdl時會出現這樣的錯誤提示:“ActiveRecord model classes not allowed in :expects”
expects不支持ActiveRecord作為傳入參數,但我們可以自己寫一個struct,如下:
project_struct.rb class ProjectStruct < ActionWebService::Struct member :name, :string member :date, :date member :status, :int end
此時,上述test_api.rb文件就可以改成下面這樣:
test_api.rb
require “路徑/project_struct” class TestApi < ActionWebService::API::Base api_method :saveProject, :expects => [{:project=>ProjectStruct}], :returns => [:boolean] end
:returns => [:string] 表示該方法返回值的類型,這里可以直接用ActiveRecord model作為返回類型
忽略 :expects 表示調用該方法不需要傳入參數
忽略 :returns 表示該方法沒有返回值
感謝各位的閱讀!關于“如何使用JRuby開發Web Service”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。