成都心情
BlogJava
::
首頁
:: ::
聯(lián)系
::
聚合
::
管理
::
98 隨筆 :: 2 文章 :: 501 評(píng)論 :: 1 Trackbacks
公告
本作品采用
知識(shí)共享署名-相同方式共享 2.5 中國大陸許可協(xié)議
進(jìn)行許可。
(15)
給我留言
查看公開留言
查看私人留言
隨筆分類
(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ù)庫(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)
無聊人士
(rss)
竹十一
(rss)
老劉忙不忙
(rss)
邢紅瑞的blog
(rss)
積分與排名
積分 - 634352
排名 - 74
最新評(píng)論
1.?re: 精確截取字符串(轉(zhuǎn)載)
string=goodStr(string); 這個(gè)方法 是干什么用處的?
--JustPassoner
2.?re: 精確截取字符串(轉(zhuǎn)載)
@國家機(jī)器
六六,認(rèn)識(shí)你是我等榮幸,酒瘋知己千杯燒...
--JustPassoner
3.?re: 使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(二)[未登錄]
樓主可以去看看一篇jvm的連載 公眾號(hào) ITmenghuo
--dddd
4.?re: 使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(一)
小瑕疵。
圖片顯示不了。
--袁良錠
5.?re: Hadoop周刊—第 169 期
喲,又開始更新了
--救救劉書記
閱讀排行榜
1.?使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(二)(121241)
2.?使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(一)(75950)
3.?Java 中的位運(yùn)算(31039)
4.?Ajax輪詢以及Comet模式—寫在Servlet 3.0發(fā)布之前(15641)
5.?RBAC 模型初探(13699)
評(píng)論排行榜
1.?德國申根商務(wù)簽證攻略(成都版)(36)
2.?OSWorkflow 探索(29)
3.?北漂找工作經(jīng)歷(26)
4.?使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(一)(23)
5.?開源面向?qū)ο髷?shù)據(jù)庫 db4o 之旅: 初識(shí) db4o“db4o 之旅(一)”(21)
與 Axis 1.x 同行
很久沒寫原創(chuàng)文章了。今天奉獻(xiàn)給大家的是關(guān)于 Web Service 方面的文章。說起來慚愧,關(guān)于 Web Service,我從大二的時(shí)候就開始關(guān)注了,那時(shí)在做一套學(xué)生管理系統(tǒng),可能是好奇,可能是圖新鮮,可能是被跨平臺(tái)所吸引,在還沒弄得很清楚的情況下就迷戀上了這種技術(shù),抱著李維的《Delphi 6/Kylix 2 SOAP/Web Service程序設(shè)計(jì)篇》狂啃,到了大三也沒作出個(gè)像樣的東西:(。大四上學(xué)期,簽到 AUO 實(shí)習(xí),并在 AUO 做畢設(shè),畢設(shè)選題還是 Web Service 方面,論文洋洋灑灑寫了一大篇,結(jié)果,到了最后的程序?qū)崿F(xiàn)時(shí),僅僅是以 XML 格式進(jìn)行數(shù)據(jù)庫和 Web 頁面的交互而已。(再慚愧一次)
重新?lián)炱?Web Service 是去年的事情,當(dāng)時(shí)評(píng)估了多種開源 SSO 實(shí)現(xiàn),總覺得不是很方便,遂打算自己實(shí)現(xiàn)。為了使通用性更高,決定讓 Web Service 完成。并很自然的選到了 Axis。
SOAP、WSDL、UDDI,這些名詞相信只要了解過 Web Service 的都不陌生,根據(jù) Apache 的定義,Axis 是一種 W3C SOAP 實(shí)現(xiàn),國內(nèi)有些介紹還特別注明了:Axis 并不完全是 SOAP 引擎,它還包括獨(dú)立的 SOAP 服務(wù)器、嵌入 Servlet 引擎的服務(wù)器、支持 WSDL 并提供轉(zhuǎn)化 WSDL 為 Java 類的工具、例子程序、TCP/IP 數(shù)據(jù)包監(jiān)視工具,等等。Axis 部署 Web Serive 有兩種方式,最簡單的是拷貝 java 源代碼文件到 web 文件夾下把擴(kuò)展名改為 .jws 直接調(diào)用,可參考這篇文章:
用Axis 1.1 for Java進(jìn)行Web Services開發(fā)(1)
。另一種方式是通過 WSDD(Web Services描述文檔)部署,可參考:
使用Axis發(fā)布簡單的Web服務(wù)
。在我的應(yīng)用中,使用的是后者,以便 Axis 進(jìn)行自動(dòng)序列化/反序列化處理。
實(shí)現(xiàn)一次 SSO 登陸驗(yàn)證,最少要傳入用戶名、密碼。為了達(dá)到這種目的,在客戶端我們構(gòu)造 User 對(duì)象(本文中 User 對(duì)象僅包含用戶名和密碼),并通過 Axis 自動(dòng)序列化傳遞出去;到了 SSO 端,Axis 自動(dòng)反序列化之后還原成 User 對(duì)象;最后返回給客戶端說明本次登陸的結(jié)果,返回的結(jié)果不僅僅包含例如“登陸成功”之類的簡單信息,也許還有很多其他信息,看來創(chuàng)建一個(gè)叫做 Respond 的對(duì)象(本文中 Respond 對(duì)象僅包含登陸 ID 和結(jié)果描述)很有必要了,把 Respond 傳回給客戶端說明登陸結(jié)果。
暴露給客戶端供登陸驗(yàn)證的服務(wù)類是 AuthService。該類代碼簡單表示如下:
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ù)庫驗(yàn)證
//
..
//
Respond respond
=
new
Respond();
respond.setId(
"
123
"
);
respond.setDesc(
"
登陸成功
"
);
return
respond;
}
}
User 和 Respond 以及服務(wù)類都寫好了。通過命令行方式,我生成了 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
>
要說明的是,深究上述配置文件具體含義不是本文的目的,要對(duì)其具體了解,請參考 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 帶來的自動(dòng)序列化/反序列化優(yōu)勢。
客戶端代碼:
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
"
);
//
注冊 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();
}
}
}
正如我們期望的,打印出“登陸成功”。通過上面的范例,我們發(fā)現(xiàn),Axis 的自動(dòng)序列化/反序列化機(jī)制還是很方便的,除了 bean 以外,其他類型的對(duì)象也可以讓 Axis 來完成,具體參考 Axis 文檔,如果要傳遞的對(duì)象 Axis 未提供自動(dòng)序列化/反序列化支持,請考慮人工實(shí)現(xiàn),參考:
深度編程Axis序列化/反序列化器開發(fā)指南
。
請注意!引用、轉(zhuǎn)貼本文應(yīng)注明原作者:Rosen Jiang 以及出處:
http://www.tkk7.com/rosen
posted on 2006-01-28 20:37
Rosen
閱讀(3077)
評(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ú)鐘,兄弟有沒有搞過SAML,似乎很多j2ee廠商都將或者已經(jīng)支持它了:)
回復(fù)
更多評(píng)論
#
re: 與 Axis 1.x 同行
2006-02-13 23:28
Rosen
呵呵,圖靈兄光臨寒舍,熱烈歡迎!是的,我對(duì) WS 很關(guān)心,這也算是歷史原因造成的:) SAML 是什么我還沒了解,不過 SAML 看樣子還很受歡迎。
回復(fù)
更多評(píng)論
#
re: 與 Axis 1.x 同行[未登錄]
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
第一行說明了暴露的服務(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í)間的問題。
第二:我不提倡用命令來生成wsdd的配置,wsdd的配置相對(duì)來說簡單可以自己編寫。
第三:webservice最終目的是跨平臺(tái),我認(rèn)為應(yīng)該使用不同平臺(tái)的公共類型。
第四:我認(rèn)為webservice加上json的結(jié)合效率會(huì)非常高。
有不同意見者,可以找我討論
回復(fù)
更多評(píng)論
#
re: 與 Axis 1.x 同行
2007-10-25 17:25
Rosen
@有貓相伴的日子
就這幾個(gè)問題,我做一解釋。
1、耗時(shí),我同意,你的意思是利用json做序列化吧?
2、這個(gè)怎么說呢,如果一直在從事WS開發(fā)的人肯定很熟悉,但我不是這樣的人。
3、這個(gè)觀點(diǎn)我同意,不過在這個(gè)應(yīng)用中,當(dāng)時(shí)并沒有牽涉到跨平臺(tái)。
4、json在寫作本文的時(shí)候,我還不知道這個(gè)格式。
另外,axis絕對(duì)不是java實(shí)現(xiàn)WS的唯一途徑,但對(duì)于xFire,我尚未評(píng)估。
回復(fù)
更多評(píng)論
新用戶注冊
刷新評(píng)論列表
只有注冊用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(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ù)之不完全測試
Powered by:
BlogJava
Copyright © Rosen
主站蜘蛛池模板:
妞干网在线免费观看
|
国产亚洲AV夜间福利香蕉149
|
久久久久久久久无码精品亚洲日韩
|
免费国产高清视频
|
免费观看一区二区三区
|
亚洲中文字幕无码中文字
|
区久久AAA片69亚洲
|
啦啦啦在线免费视频
|
光棍天堂免费手机观看在线观看
|
亚洲国产亚洲综合在线尤物
|
免费很黄很色裸乳在线观看
|
最近最新高清免费中文字幕
|
18禁亚洲深夜福利人口
|
亚洲精品美女在线观看播放
|
亚洲福利视频一区二区
|
在线观看成人免费视频不卡
|
中国人免费观看高清在线观看二区
|
亚洲午夜久久久精品电影院
|
综合久久久久久中文字幕亚洲国产国产综合一区首
|
2020因为爱你带字幕免费观看全集
|
亚洲爆乳少妇无码激情
|
久久久无码精品亚洲日韩蜜桃
|
亚洲国产美女精品久久久久∴
|
久久久久久久91精品免费观看
|
一级看片免费视频
|
国产aⅴ无码专区亚洲av麻豆
|
毛片a级毛片免费播放100
|
久久精品免费一区二区三区
|
亚洲免费网站在线观看
|
亚洲中文字幕第一页在线
|
日本一道在线日本一道高清不卡免费
|
亚洲精品天堂成人片AV在线播放
|
亚洲色大成网站WWW久久九九
|
大学生美女毛片免费视频
|
99久9在线|免费
|
久久精品免费网站网
|
亚洲丝袜美腿视频
|
亚洲午夜爱爱香蕉片
|
国产精品久久免费视频
|
女人18毛片a级毛片免费
|
免费观看无遮挡www的视频
|