成都心情
BlogJava
::
首頁
:: ::
聯(lián)系
::
聚合
::
管理
::
98 隨筆 :: 2 文章 :: 501 評論 :: 1 Trackbacks
公告
本作品采用
知識共享署名-相同方式共享 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)
積分與排名
積分 - 634302
排名 - 74
最新評論
1.?re: 精確截取字符串(轉(zhuǎn)載)
string=goodStr(string); 這個方法 是干什么用處的?
--JustPassoner
2.?re: 精確截取字符串(轉(zhuǎn)載)
@國家機(jī)器
六六,認(rèn)識你是我等榮幸,酒瘋知己千杯燒...
--JustPassoner
3.?re: 使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(二)[未登錄]
樓主可以去看看一篇jvm的連載 公眾號 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)存泄漏(一)(75947)
3.?Java 中的位運(yùn)算(31038)
4.?Ajax輪詢以及Comet模式—寫在Servlet 3.0發(fā)布之前(15641)
5.?RBAC 模型初探(13699)
評論排行榜
1.?德國申根商務(wù)簽證攻略(成都版)(36)
2.?OSWorkflow 探索(29)
3.?北漂找工作經(jīng)歷(26)
4.?使用Memory Analyzer tool(MAT)分析內(nèi)存泄漏(一)(23)
5.?開源面向?qū)ο髷?shù)據(jù)庫 db4o 之旅: 初識 db4o“db4o 之旅(一)”(21)
與 Axis 1.x 同行
很久沒寫原創(chuàng)文章了。今天奉獻(xiàn)給大家的是關(guān)于 Web Service 方面的文章。說起來慚愧,關(guān)于 Web Service,我從大二的時候就開始關(guān)注了,那時在做一套學(xué)生管理系統(tǒng),可能是好奇,可能是圖新鮮,可能是被跨平臺所吸引,在還沒弄得很清楚的情況下就迷戀上了這種技術(shù),抱著李維的《Delphi 6/Kylix 2 SOAP/Web Service程序設(shè)計(jì)篇》狂啃,到了大三也沒作出個像樣的東西:(。大四上學(xué)期,簽到 AUO 實(shí)習(xí),并在 AUO 做畢設(shè),畢設(shè)選題還是 Web Service 方面,論文洋洋灑灑寫了一大篇,結(jié)果,到了最后的程序?qū)崿F(xiàn)時,僅僅是以 XML 格式進(jìn)行數(shù)據(jù)庫和 Web 頁面的交互而已。(再慚愧一次)
重新?lián)炱?Web Service 是去年的事情,當(dā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)行自動序列化/反序列化處理。
實(shí)現(xiàn)一次 SSO 登陸驗(yàn)證,最少要傳入用戶名、密碼。為了達(dá)到這種目的,在客戶端我們構(gòu)造 User 對象(本文中 User 對象僅包含用戶名和密碼),并通過 Axis 自動序列化傳遞出去;到了 SSO 端,Axis 自動反序列化之后還原成 User 對象;最后返回給客戶端說明本次登陸的結(jié)果,返回的結(jié)果不僅僅包含例如“登陸成功”之類的簡單信息,也許還有很多其他信息,看來創(chuàng)建一個叫做 Respond 的對象(本文中 Respond 對象僅包含登陸 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
>
要說明的是,深究上述配置文件具體含義不是本文的目的,要對其具體了解,請參考 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
>
為了完成自動序列化/反序列化,我們使用“beanMapping”元素指定要進(jìn)行處理的 bean 文件。只有在 WSDD 中定義了這些,才能享受到 Axis 帶來的自動序列化/反序列化優(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 的自動序列化/反序列化機(jī)制還是很方便的,除了 bean 以外,其他類型的對象也可以讓 Axis 來完成,具體參考 Axis 文檔,如果要傳遞的對象 Axis 未提供自動序列化/反序列化支持,請考慮人工實(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)
評論(6)
編輯
收藏
所屬分類:
Java EE 服務(wù)器端
評論
#
re: 與 Axis 1.x 同行
2006-02-13 09:59
david.turing
AXIS很不錯,我倒是在XML簽名的時候用到它。
呵呵,你的SSO方案似乎對WS情有獨(dú)鐘,兄弟有沒有搞過SAML,似乎很多j2ee廠商都將或者已經(jīng)支持它了:)
回復(fù)
更多評論
#
re: 與 Axis 1.x 同行
2006-02-13 23:28
Rosen
呵呵,圖靈兄光臨寒舍,熱烈歡迎!是的,我對 WS 很關(guān)心,這也算是歷史原因造成的:) SAML 是什么我還沒了解,不過 SAML 看樣子還很受歡迎。
回復(fù)
更多評論
#
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ù)
更多評論
#
re: 與 Axis 1.x 同行
2007-05-14 11:43
Rosen
@aa
第一行說明了暴露的服務(wù)名和調(diào)用方式。
第二行是暴露的可調(diào)用的方法,*代表服務(wù)中所有方法都可調(diào)用。
第三行是服務(wù)的具體類路徑。
第四、五行是要自動序列化的對象(JavaBean、Bean、VO),用于傳輸。
回復(fù)
更多評論
#
re: 與 Axis 1.x 同行
2007-10-25 15:18
有貓相伴的日子
樓主的做法,我不敢贊同!!!!!!!!!!!!!!!
第一:axis對象序列化是一個非常麻煩的消耗時間的問題。
第二:我不提倡用命令來生成wsdd的配置,wsdd的配置相對來說簡單可以自己編寫。
第三:webservice最終目的是跨平臺,我認(rèn)為應(yīng)該使用不同平臺的公共類型。
第四:我認(rèn)為webservice加上json的結(jié)合效率會非常高。
有不同意見者,可以找我討論
回復(fù)
更多評論
#
re: 與 Axis 1.x 同行
2007-10-25 17:25
Rosen
@有貓相伴的日子
就這幾個問題,我做一解釋。
1、耗時,我同意,你的意思是利用json做序列化吧?
2、這個怎么說呢,如果一直在從事WS開發(fā)的人肯定很熟悉,但我不是這樣的人。
3、這個觀點(diǎn)我同意,不過在這個應(yīng)用中,當(dāng)時并沒有牽涉到跨平臺。
4、json在寫作本文的時候,我還不知道這個格式。
另外,axis絕對不是java實(shí)現(xiàn)WS的唯一途徑,但對于xFire,我尚未評估。
回復(fù)
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(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中文无码乱人伦在线r▽
|
a级毛片免费在线观看
|
jzzjzz免费观看大片免费
|
一级女性全黄久久生活片免费
|
黄页网站在线免费观看
|
一级毛片大全免费播放下载
|
一道本在线免费视频
|
一个人免费播放在线视频看片
|
337p日本欧洲亚洲大胆精品555588
|
亚洲福利视频一区
|
亚洲日本国产精华液
|
亚洲三级中文字幕
|
国产精品亚洲专一区二区三区
|
亚洲另类视频在线观看
|
亚洲视频在线观看
|
久久久久久亚洲AV无码专区
|
亚洲大片免费观看
|
91视频国产免费
|
a级黄色毛片免费播放视频
|
亚洲一区二区三区无码国产
|
亚洲AV无码专区在线播放中文
|
暖暖免费高清日本中文
|
67pao强力打造国产免费
|
一级毛片在播放免费
|
亚洲另类无码专区丝袜
|
亚洲欧洲国产精品你懂的
|
亚洲第一成人影院
|
午夜视频免费成人
|
国产h视频在线观看网站免费
|
久久久久久久久久免免费精品
|
国产成人亚洲综合色影视
|
国产一级高清免费观看
|
69天堂人成无码麻豆免费视频
|
永久免费av无码网站yy
|
黄色片网站在线免费观看
|
亚洲中文字幕久久精品无码VA
|
亚洲码欧美码一区二区三区
|
亚洲第一区视频在线观看
|
亚洲av无码成人黄网站在线观看
|