成都心情
BlogJava
::
首頁(yè)
:: ::
聯(lián)系
::
聚合
::
管理
::
98 隨筆 :: 2 文章 :: 501 評(píng)論 :: 1 Trackbacks
公告
本作品采用
知識(shí)共享署名-相同方式共享 2.5 中國(guó)大陸許可協(xié)議
進(jìn)行許可。
(15)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類
(91)
Java EE 服務(wù)器端(13)
(rss)
Java EE 表現(xiàn)層及容器(12)
(rss)
Java ME(1)
(rss)
Java 基礎(chǔ)(10)
(rss)
MatLab(1)
(rss)
O/R Mapping(13)
(rss)
Versant db4o 中文項(xiàng)目(12)
(rss)
Web前端技術(shù)
(rss)
五花八門(8)
(rss)
大數(shù)據(jù)(3)
(rss)
工作流(10)
(rss)
數(shù)據(jù)庫(kù)(2)
(rss)
模式與策略(6)
(rss)
隨筆檔案
(99)
2016年7月 (2)
2016年6月 (4)
2016年5月 (3)
2016年4月 (2)
2010年7月 (1)
2010年6月 (2)
2010年5月 (3)
2010年3月 (1)
2010年1月 (1)
2009年10月 (1)
2009年9月 (1)
2009年7月 (1)
2009年6月 (1)
2009年3月 (1)
2009年2月 (1)
2008年12月 (2)
2008年9月 (1)
2008年8月 (1)
2008年7月 (1)
2008年6月 (1)
2008年4月 (1)
2008年3月 (1)
2008年1月 (1)
2007年12月 (2)
2007年10月 (1)
2007年9月 (1)
2007年8月 (1)
2007年6月 (2)
2007年5月 (1)
2007年4月 (1)
2007年2月 (1)
2007年1月 (1)
2006年12月 (1)
2006年11月 (1)
2006年10月 (1)
2006年9月 (1)
2006年8月 (1)
2006年7月 (1)
2006年6月 (1)
2006年5月 (1)
2006年4月 (1)
2006年3月 (1)
2006年2月 (1)
2006年1月 (1)
2005年12月 (1)
2005年11月 (1)
2005年10月 (1)
2005年9月 (2)
2005年8月 (37)
文章分類
(2)
我的收藏(2)
(rss)
友情鏈接
david.turing
(rss)
wyingquan的專欄
(rss)
信息安全思想
俺的豬窩~!@
喜馬拉雅的雪杉
(rss)
無(wú)聊人士
(rss)
竹十一
(rss)
老劉忙不忙
(rss)
邢紅瑞的blog
(rss)
積分與排名
積分 - 634430
排名 - 74
最新評(píng)論
1.?re: 精確截取字符串(轉(zhuǎn)載)
string=goodStr(string); 這個(gè)方法 是干什么用處的?
--JustPassoner
2.?re: 精確截取字符串(轉(zhuǎn)載)
@國(guó)家機(jī)器
六六,認(rèn)識(shí)你是我等榮幸,酒瘋知己千杯燒...
--JustPassoner
3.?re: 使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(二)[未登錄](méi)
樓主可以去看看一篇jvm的連載 公眾號(hào) ITmenghuo
--dddd
4.?re: 使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(一)
小瑕疵。
圖片顯示不了。
--袁良錠
5.?re: Hadoop周刊—第 169 期
喲,又開(kāi)始更新了
--救救劉書(shū)記
閱讀排行榜
1.?使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(二)(121242)
2.?使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(一)(75950)
3.?Java 中的位運(yùn)算(31040)
4.?Ajax輪詢以及Comet模式—寫(xiě)在Servlet 3.0發(fā)布之前(15642)
5.?RBAC 模型初探(13700)
評(píng)論排行榜
1.?德國(guó)申根商務(wù)簽證攻略(成都版)(36)
2.?OSWorkflow 探索(29)
3.?北漂找工作經(jīng)歷(26)
4.?使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(一)(23)
5.?開(kāi)源面向?qū)ο髷?shù)據(jù)庫(kù) db4o 之旅: 初識(shí) db4o“db4o 之旅(一)”(21)
與 Axis 1.x 同行
很久沒(méi)寫(xiě)原創(chuàng)文章了。今天奉獻(xiàn)給大家的是關(guān)于 Web Service 方面的文章。說(shuō)起來(lái)慚愧,關(guān)于 Web Service,我從大二的時(shí)候就開(kāi)始關(guān)注了,那時(shí)在做一套學(xué)生管理系統(tǒng),可能是好奇,可能是圖新鮮,可能是被跨平臺(tái)所吸引,在還沒(méi)弄得很清楚的情況下就迷戀上了這種技術(shù),抱著李維的《Delphi 6/Kylix 2 SOAP/Web Service程序設(shè)計(jì)篇》狂啃,到了大三也沒(méi)作出個(gè)像樣的東西:(。大四上學(xué)期,簽到 AUO 實(shí)習(xí),并在 AUO 做畢設(shè),畢設(shè)選題還是 Web Service 方面,論文洋洋灑灑寫(xiě)了一大篇,結(jié)果,到了最后的程序?qū)崿F(xiàn)時(shí),僅僅是以 XML 格式進(jìn)行數(shù)據(jù)庫(kù)和 Web 頁(yè)面的交互而已。(再慚愧一次)
重新?lián)炱?Web Service 是去年的事情,當(dāng)時(shí)評(píng)估了多種開(kāi)源 SSO 實(shí)現(xiàn),總覺(jué)得不是很方便,遂打算自己實(shí)現(xiàn)。為了使通用性更高,決定讓 Web Service 完成。并很自然的選到了 Axis。
SOAP、WSDL、UDDI,這些名詞相信只要了解過(guò) Web Service 的都不陌生,根據(jù) Apache 的定義,Axis 是一種 W3C SOAP 實(shí)現(xiàn),國(guó)內(nèi)有些介紹還特別注明了:Axis 并不完全是 SOAP 引擎,它還包括獨(dú)立的 SOAP 服務(wù)器、嵌入 Servlet 引擎的服務(wù)器、支持 WSDL 并提供轉(zhuǎn)化 WSDL 為 Java 類的工具、例子程序、TCP/IP 數(shù)據(jù)包監(jiān)視工具,等等。Axis 部署 Web Serive 有兩種方式,最簡(jiǎn)單的是拷貝 java 源代碼文件到 web 文件夾下把擴(kuò)展名改為 .jws 直接調(diào)用,可參考這篇文章:
用Axis 1.1 for Java進(jìn)行Web Services開(kāi)發(fā)(1)
。另一種方式是通過(guò) WSDD(Web Services描述文檔)部署,可參考:
使用Axis發(fā)布簡(jiǎn)單的Web服務(wù)
。在我的應(yīng)用中,使用的是后者,以便 Axis 進(jìn)行自動(dòng)序列化/反序列化處理。
實(shí)現(xiàn)一次 SSO 登陸驗(yàn)證,最少要傳入用戶名、密碼。為了達(dá)到這種目的,在客戶端我們構(gòu)造 User 對(duì)象(本文中 User 對(duì)象僅包含用戶名和密碼),并通過(guò) Axis 自動(dòng)序列化傳遞出去;到了 SSO 端,Axis 自動(dòng)反序列化之后還原成 User 對(duì)象;最后返回給客戶端說(shuō)明本次登陸的結(jié)果,返回的結(jié)果不僅僅包含例如“登陸成功”之類的簡(jiǎn)單信息,也許還有很多其他信息,看來(lái)創(chuàng)建一個(gè)叫做 Respond 的對(duì)象(本文中 Respond 對(duì)象僅包含登陸 ID 和結(jié)果描述)很有必要了,把 Respond 傳回給客戶端說(shuō)明登陸結(jié)果。
暴露給客戶端供登陸驗(yàn)證的服務(wù)類是 AuthService。該類代碼簡(jiǎn)單表示如下:
public
class
AuthService {
/**
* 驗(yàn)證用戶名和密碼
*
@param
String userName 用戶名
*
@param
String passWord 密碼
*
@return
Respond 登陸驗(yàn)證后返回
*/
public
Respond login(User user){
String name
=
user.getName();
String password
=
user.password();
//
進(jìn)行數(shù)據(jù)庫(kù)驗(yàn)證
//
..
//
Respond respond
=
new
Respond();
respond.setId(
"
123
"
);
respond.setDesc(
"
登陸成功
"
);
return
respond;
}
}
User 和 Respond 以及服務(wù)類都寫(xiě)好了。通過(guò)命令行方式,我生成了 server-config.wsdd,內(nèi)容如下:
<?
xml version="1.0" encoding="UTF-8"
?>
<
deployment
xmlns
="http://xml.apache.org/axis/wsdd/"
xmlns:java
="http://xml.apache.org/axis/wsdd/providers/java"
>
<
globalConfiguration
>
<
parameter
name
="sendMultiRefs"
value
="true"
/>
<
parameter
name
="disablePrettyXML"
value
="true"
/>
<
parameter
name
="adminPassword"
value
="admin"
/>
<
parameter
name
="attachments.Directory"
value
="D:\workspace\SSO\web\WEB-INF\attachments"
/>
<
parameter
name
="dotNetSoapEncFix"
value
="true"
/>
<
parameter
name
="enableNamespacePrefixOptimization"
value
="true"
/>
<
parameter
name
="sendXMLDeclaration"
value
="true"
/>
<
parameter
name
="sendXsiTypes"
value
="true"
/>
<
parameter
name
="attachments.implementation"
value
="org.apache.axis.attachments.AttachmentsImpl"
/>
<
requestFlow
>
<
handler
type
="java:org.apache.axis.handlers.JWSHandler"
>
<
parameter
name
="scope"
value
="session"
/>
</
handler
>
<
handler
type
="java:org.apache.axis.handlers.JWSHandler"
>
<
parameter
name
="scope"
value
="request"
/>
<
parameter
name
="extension"
value
=".jwr"
/>
</
handler
>
</
requestFlow
>
</
globalConfiguration
>
<
handler
name
="LocalResponder"
type
="java:org.apache.axis.transport.local.LocalResponder"
/>
<
handler
name
="URLMapper"
type
="java:org.apache.axis.handlers.http.URLMapper"
/>
<
handler
name
="Authenticate"
type
="java:org.apache.axis.handlers.SimpleAuthenticationHandler"
/>
<
service
name
="AuthService"
provider
="java:RPC"
>
<
parameter
name
="allowedMethods"
value
="*"
/>
<
parameter
name
="className"
value
="com.cdmcs.sso.AuthService"
/>
<
beanMapping
languageSpecificType
="java:sso.Respond"
qname
="ns:resp"
xmlns:ns
="urn:BeanService"
/>
<
beanMapping
languageSpecificType
="java:sso.User"
qname
="ns:user"
xmlns:ns
="urn:BeanService"
/>
</
service
>
<
service
name
="AdminService"
provider
="java:MSG"
>
<
parameter
name
="allowedMethods"
value
="AdminService"
/>
<
parameter
name
="enableRemoteAdmin"
value
="false"
/>
<
parameter
name
="className"
value
="org.apache.axis.utils.Admin"
/>
<
namespace
>
http://xml.apache.org/axis/wsdd/
</
namespace
>
</
service
>
<
service
name
="Version"
provider
="java:RPC"
>
<
parameter
name
="allowedMethods"
value
="getVersion"
/>
<
parameter
name
="className"
value
="org.apache.axis.Version"
/>
</
service
>
<
transport
name
="http"
>
<
requestFlow
>
<
handler
type
="URLMapper"
/>
<
handler
type
="java:org.apache.axis.handlers.http.HTTPAuthHandler"
/>
</
requestFlow
>
<
parameter
name
="qs:list"
value
="org.apache.axis.transport.http.QSListHandler"
/>
<
parameter
name
="qs:wsdl"
value
="org.apache.axis.transport.http.QSWSDLHandler"
/>
<
parameter
name
="qs.list"
value
="org.apache.axis.transport.http.QSListHandler"
/>
<
parameter
name
="qs.method"
value
="org.apache.axis.transport.http.QSMethodHandler"
/>
<
parameter
name
="qs:method"
value
="org.apache.axis.transport.http.QSMethodHandler"
/>
<
parameter
name
="qs.wsdl"
value
="org.apache.axis.transport.http.QSWSDLHandler"
/>
</
transport
>
<
transport
name
="local"
>
<
responseFlow
>
<
handler
type
="LocalResponder"
/>
</
responseFlow
>
</
transport
>
</
deployment
>
要說(shuō)明的是,深究上述配置文件具體含義不是本文的目的,要對(duì)其具體了解,請(qǐng)參考 Axis 文檔。其中,只有下面的 XML 才是我們感興趣的:
<
service
name
="AuthService"
provider
="java:RPC"
>
<
parameter
name
="allowedMethods"
value
="*"
/>
<
parameter
name
="className"
value
="com.cdmcs.sso.AuthService"
/>
<
beanMapping
languageSpecificType
="java:sso.Respond"
qname
="ns:resp"
xmlns:ns
="urn:BeanService"
/>
<
beanMapping
languageSpecificType
="java:sso.bo.User"
qname
="ns:user"
xmlns:ns
="urn:BeanService"
/>
</
service
>
為了完成自動(dòng)序列化/反序列化,我們使用“beanMapping”元素指定要進(jìn)行處理的 bean 文件。只有在 WSDD 中定義了這些,才能享受到 Axis 帶來(lái)的自動(dòng)序列化/反序列化優(yōu)勢(shì)。
客戶端代碼:
public
class
TestClient {
public
static
void
main(String[] args) {
try
{
String endpoint
=
"
http://127.0.0.1:8080/services/AuthService?wsdl
"
;
Service service
=
new
Service();
Call call
=
(Call) service.createCall();
QName qn
=
new
QName(
"
urn:BeanService
"
,
"
resp
"
);
QName qx
=
new
QName(
"
urn:BeanService
"
,
"
user
"
);
//
注冊(cè) bean
call.registerTypeMapping(Respond.
class
,qn,
new
BeanSerializerFactory(Respond.
class
, qn),
new
BeanDeserializerFactory(Respond.
class
, qn));
call.registerTypeMapping(User.
class
,qx,
new
BeanSerializerFactory(User.
class
, qx),
new
BeanDeserializerFactory(User.
class
, qx));
call.setTargetEndpointAddress(
new
java.net.URL(endpoint));
call.setOperationName(
new
QName(
"
http://soapinterop.org/
"
,
"
login
"
));
User user
=
new
User();
mul.setName(
"
test
"
);
mul.setPassword(
"
test
"
);
Respond respond
=
(Reopond) call.invoke(
new
Object[] {user});
System.out.println(
"
登陸,返回'
"
+
respond.getDesc()
+
"
'。
"
);
}
catch
(Exception e) {
e.printStackTrace();
}
}
}
正如我們期望的,打印出“登陸成功”。通過(guò)上面的范例,我們發(fā)現(xiàn),Axis 的自動(dòng)序列化/反序列化機(jī)制還是很方便的,除了 bean 以外,其他類型的對(duì)象也可以讓 Axis 來(lái)完成,具體參考 Axis 文檔,如果要傳遞的對(duì)象 Axis 未提供自動(dòng)序列化/反序列化支持,請(qǐng)考慮人工實(shí)現(xiàn),參考:
深度編程Axis序列化/反序列化器開(kāi)發(fā)指南
。
請(qǐng)注意!引用、轉(zhuǎn)貼本文應(yīng)注明原作者:Rosen Jiang 以及出處:
http://www.tkk7.com/rosen
posted on 2006-01-28 20:37
Rosen
閱讀(3079)
評(píng)論(6)
編輯
收藏
所屬分類:
Java EE 服務(wù)器端
評(píng)論
#
re: 與 Axis 1.x 同行
2006-02-13 09:59
david.turing
AXIS很不錯(cuò),我倒是在XML簽名的時(shí)候用到它。
呵呵,你的SSO方案似乎對(duì)WS情有獨(dú)鐘,兄弟有沒(méi)有搞過(guò)SAML,似乎很多j2ee廠商都將或者已經(jīng)支持它了:)
回復(fù)
更多評(píng)論
#
re: 與 Axis 1.x 同行
2006-02-13 23:28
Rosen
呵呵,圖靈兄光臨寒舍,熱烈歡迎!是的,我對(duì) WS 很關(guān)心,這也算是歷史原因造成的:) SAML 是什么我還沒(méi)了解,不過(guò) SAML 看樣子還很受歡迎。
回復(fù)
更多評(píng)論
#
re: 與 Axis 1.x 同行[未登錄](méi)
2007-05-14 10:28
aa
摟主能講講<service name="AuthService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="com.cdmcs.sso.AuthService"/>
<beanMapping languageSpecificType="java:sso.Respond" qname="ns:resp" xmlns:ns="urn:BeanService"/>
<beanMapping languageSpecificType="java:sso.bo.User" qname="ns:user" xmlns:ns="urn:BeanService"/>
</service>每一項(xiàng)的具體含義嗎?
回復(fù)
更多評(píng)論
#
re: 與 Axis 1.x 同行
2007-05-14 11:43
Rosen
@aa
第一行說(shuō)明了暴露的服務(wù)名和調(diào)用方式。
第二行是暴露的可調(diào)用的方法,*代表服務(wù)中所有方法都可調(diào)用。
第三行是服務(wù)的具體類路徑。
第四、五行是要自動(dòng)序列化的對(duì)象(JavaBean、Bean、VO),用于傳輸。
回復(fù)
更多評(píng)論
#
re: 與 Axis 1.x 同行
2007-10-25 15:18
有貓相伴的日子
樓主的做法,我不敢贊同!!!!!!!!!!!!!!!
第一:axis對(duì)象序列化是一個(gè)非常麻煩的消耗時(shí)間的問(wèn)題。
第二:我不提倡用命令來(lái)生成wsdd的配置,wsdd的配置相對(duì)來(lái)說(shuō)簡(jiǎn)單可以自己編寫(xiě)。
第三:webservice最終目的是跨平臺(tái),我認(rèn)為應(yīng)該使用不同平臺(tái)的公共類型。
第四:我認(rèn)為webservice加上json的結(jié)合效率會(huì)非常高。
有不同意見(jiàn)者,可以找我討論
回復(fù)
更多評(píng)論
#
re: 與 Axis 1.x 同行
2007-10-25 17:25
Rosen
@有貓相伴的日子
就這幾個(gè)問(wèn)題,我做一解釋。
1、耗時(shí),我同意,你的意思是利用json做序列化吧?
2、這個(gè)怎么說(shuō)呢,如果一直在從事WS開(kāi)發(fā)的人肯定很熟悉,但我不是這樣的人。
3、這個(gè)觀點(diǎn)我同意,不過(guò)在這個(gè)應(yīng)用中,當(dāng)時(shí)并沒(méi)有牽涉到跨平臺(tái)。
4、json在寫(xiě)作本文的時(shí)候,我還不知道這個(gè)格式。
另外,axis絕對(duì)不是java實(shí)現(xiàn)WS的唯一途徑,但對(duì)于xFire,我尚未評(píng)估。
回復(fù)
更多評(píng)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
相關(guān)文章:
Servlet的異步轉(zhuǎn)同步調(diào)用
利用 iText 實(shí)現(xiàn) PDF 報(bào)表下載
OSGi起步(OSGi for Beginners)
Java 生成 JPG 縮略圖
Apache FileUpload 上傳以及 JExcelApi 解析
JBI-Java 實(shí)現(xiàn) SOA 的標(biāo)準(zhǔn)途徑(翻譯)
與 Axis 1.x 同行
BIRT 總覽(翻譯)
XML 的 RUD
四種 XML 解析技術(shù)之不完全測(cè)試
Powered by:
BlogJava
Copyright © Rosen
主站蜘蛛池模板:
人人鲁免费播放视频人人香蕉
|
亚洲AV永久无码精品成人
|
午夜a级成人免费毛片
|
在线看片无码永久免费视频
|
国产电影午夜成年免费视频
|
最近免费中文字幕mv电影
|
久久aⅴ免费观看
|
69影院毛片免费观看视频在线
|
99视频在线精品免费
|
114级毛片免费观看
|
免费专区丝袜脚调教视频
|
美女裸身网站免费看免费网站
|
欧美三级在线电影免费
|
好先生在线观看免费播放
|
日韩成人在线免费视频
|
免费一级毛片不卡不收费
|
亚洲裸男gv网站
|
在线亚洲精品自拍
|
图图资源网亚洲综合网站
|
亚洲高清日韩精品第一区
|
又黄又爽又成人免费视频
|
两性刺激生活片免费视频
|
在线观看免费宅男视频
|
亚洲国产成人爱av在线播放
|
亚洲欧洲成人精品香蕉网
|
一区二区三区亚洲
|
亚洲一区二区三区乱码在线欧洲
|
亚洲乱码无人区卡1卡2卡3
|
日韩毛片在线免费观看
|
a毛看片免费观看视频
|
日日麻批免费40分钟无码
|
岛国av无码免费无禁网站
|
日本中文一区二区三区亚洲
|
好男人视频在线观看免费看片
|
国产精品二区三区免费播放心
|
亚洲无线码在线一区观看
|
亚洲成人黄色在线
|
偷自拍亚洲视频在线观看99
|
黄色片免费在线观看
|
久久精品网站免费观看
|
精品亚洲成α人无码成α在线观看
|