成都心情
BlogJava
::
首頁
:: ::
聯(lián)系
::
聚合
::
管理
::
98 隨筆 :: 2 文章 :: 501 評(píng)論 :: 1 Trackbacks
公告
本作品采用
知識(shí)共享署名-相同方式共享 2.5 中國(guó)大陸許可協(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)
積分與排名
積分 - 634309
排名 - 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)存泄漏(二)[未登錄]
樓主可以去看看一篇jvm的連載 公眾號(hào) ITmenghuo
--dddd
4.?re: 使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(一)
小瑕疵。
圖片顯示不了。
--袁良錠
5.?re: Hadoop周刊—第 169 期
喲,又開始更新了
--救救劉書記
閱讀排行榜
1.?使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(二)(121240)
2.?使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(一)(75948)
3.?Java 中的位運(yùn)算(31039)
4.?Ajax輪詢以及Comet模式—寫在Servlet 3.0發(fā)布之前(15641)
5.?RBAC 模型初探(13699)
評(píng)論排行榜
1.?德國(guó)申根商務(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),國(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開發(fā)(1)
。另一種方式是通過 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ì)象僅包含用戶名和密碼),并通過 Axis 自動(dòng)序列化傳遞出去;到了 SSO 端,Axis 自動(dòng)反序列化之后還原成 User 對(duì)象;最后返回給客戶端說明本次登陸的結(jié)果,返回的結(jié)果不僅僅包含例如“登陸成功”之類的簡(jiǎn)單信息,也許還有很多其他信息,看來創(chuàng)建一個(gè)叫做 Respond 的對(duì)象(本文中 Respond 對(duì)象僅包含登陸 ID 和結(jié)果描述)很有必要了,把 Respond 傳回給客戶端說明登陸結(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ù)庫驗(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ì)其具體了解,請(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 帶來的自動(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();
}
}
}
正如我們期望的,打印出“登陸成功”。通過上面的范例,我們發(fā)現(xiàn),Axis 的自動(dòng)序列化/反序列化機(jī)制還是很方便的,除了 bean 以外,其他類型的對(duì)象也可以讓 Axis 來完成,具體參考 Axis 文檔,如果要傳遞的對(duì)象 Axis 未提供自動(dòng)序列化/反序列化支持,請(qǐng)考慮人工實(shí)現(xiàn),參考:
深度編程Axis序列化/反序列化器開發(fā)指南
。
請(qǐng)注意!引用、轉(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ì)來說簡(jiǎn)單可以自己編寫。
第三: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)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(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ù)之不完全測(cè)試
Powered by:
BlogJava
Copyright © Rosen
主站蜘蛛池模板:
久久久久亚洲AV成人网
|
mm1313亚洲国产精品无码试看
|
亚洲宅男永久在线
|
亚洲精品在线播放视频
|
亚洲五月综合网色九月色
|
亚洲国产精华液2020
|
一级成人a免费视频
|
免费精品一区二区三区第35
|
www.亚洲成在线
|
亚洲国产精品嫩草影院
|
成人久久久观看免费毛片
|
在线看片免费人成视频播
|
100000免费啪啪18免进
|
免费A级毛片无码久久版
|
亚洲午夜无码久久久久
|
亚洲天堂电影在线观看
|
免费国产va在线观看
|
久久永久免费人妻精品
|
好吊妞视频免费视频
|
国产亚洲美日韩AV中文字幕无码成人
|
亚洲成AV人在线观看天堂无码
|
亚洲另类自拍丝袜第1页
|
野花视频在线官网免费1
|
日本xxxx色视频在线观看免费
|
成年女人免费v片
|
亚洲中文字幕无码久久综合网
|
亚洲综合图片小说区热久久
|
亚洲av成人片在线观看
|
国产精品99精品久久免费
|
午夜爱爱免费视频
|
日韩亚洲人成在线综合日本
|
国产精品亚洲片夜色在线
|
aa级女人大片喷水视频免费
|
成人女人A级毛片免费软件
|
久久亚洲国产精品五月天婷
|
亚洲国产精品成人精品小说
|
特级毛片aaaa免费观看
|
国产在线jyzzjyzz免费麻豆
|
亚洲精品岛国片在线观看
|
亚洲精品欧洲精品
|
一级一级一片免费高清
|