成都心情
BlogJava
::
首頁
:: ::
聯系
::
聚合
::
管理
::
98 隨筆 :: 2 文章 :: 501 評論 :: 1 Trackbacks
公告
本作品采用
知識共享署名-相同方式共享 2.5 中國大陸許可協議
進行許可。
(15)
給我留言
查看公開留言
查看私人留言
隨筆分類
(91)
Java EE 服務器端(13)
(rss)
Java EE 表現層及容器(12)
(rss)
Java ME(1)
(rss)
Java 基礎(10)
(rss)
MatLab(1)
(rss)
O/R Mapping(13)
(rss)
Versant db4o 中文項目(12)
(rss)
Web前端技術
(rss)
五花八門(8)
(rss)
大數據(3)
(rss)
工作流(10)
(rss)
數據庫(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)
積分與排名
積分 - 635655
排名 - 74
最新評論
1.?re: 精確截取字符串(轉載)
string=goodStr(string); 這個方法 是干什么用處的?
--JustPassoner
2.?re: 精確截取字符串(轉載)
@國家機器
六六,認識你是我等榮幸,酒瘋知己千杯燒...
--JustPassoner
3.?re: 使用Memory Analyzer tool(MAT)分析內存泄漏(二)[未登錄]
樓主可以去看看一篇jvm的連載 公眾號 ITmenghuo
--dddd
4.?re: 使用Memory Analyzer tool(MAT)分析內存泄漏(一)
小瑕疵。
圖片顯示不了。
--袁良錠
5.?re: Hadoop周刊—第 169 期
喲,又開始更新了
--救救劉書記
閱讀排行榜
1.?使用Memory Analyzer tool(MAT)分析內存泄漏(二)(121270)
2.?使用Memory Analyzer tool(MAT)分析內存泄漏(一)(75980)
3.?Java 中的位運算(31049)
4.?Ajax輪詢以及Comet模式—寫在Servlet 3.0發布之前(15655)
5.?RBAC 模型初探(13709)
評論排行榜
1.?德國申根商務簽證攻略(成都版)(36)
2.?OSWorkflow 探索(29)
3.?北漂找工作經歷(26)
4.?使用Memory Analyzer tool(MAT)分析內存泄漏(一)(23)
5.?開源面向對象數據庫 db4o 之旅: 初識 db4o“db4o 之旅(一)”(21)
與 Axis 1.x 同行
很久沒寫原創文章了。今天奉獻給大家的是關于 Web Service 方面的文章。說起來慚愧,關于 Web Service,我從大二的時候就開始關注了,那時在做一套學生管理系統,可能是好奇,可能是圖新鮮,可能是被跨平臺所吸引,在還沒弄得很清楚的情況下就迷戀上了這種技術,抱著李維的《Delphi 6/Kylix 2 SOAP/Web Service程序設計篇》狂啃,到了大三也沒作出個像樣的東西:(。大四上學期,簽到 AUO 實習,并在 AUO 做畢設,畢設選題還是 Web Service 方面,論文洋洋灑灑寫了一大篇,結果,到了最后的程序實現時,僅僅是以 XML 格式進行數據庫和 Web 頁面的交互而已。(再慚愧一次)
重新撿起 Web Service 是去年的事情,當時評估了多種開源 SSO 實現,總覺得不是很方便,遂打算自己實現。為了使通用性更高,決定讓 Web Service 完成。并很自然的選到了 Axis。
SOAP、WSDL、UDDI,這些名詞相信只要了解過 Web Service 的都不陌生,根據 Apache 的定義,Axis 是一種 W3C SOAP 實現,國內有些介紹還特別注明了:Axis 并不完全是 SOAP 引擎,它還包括獨立的 SOAP 服務器、嵌入 Servlet 引擎的服務器、支持 WSDL 并提供轉化 WSDL 為 Java 類的工具、例子程序、TCP/IP 數據包監視工具,等等。Axis 部署 Web Serive 有兩種方式,最簡單的是拷貝 java 源代碼文件到 web 文件夾下把擴展名改為 .jws 直接調用,可參考這篇文章:
用Axis 1.1 for Java進行Web Services開發(1)
。另一種方式是通過 WSDD(Web Services描述文檔)部署,可參考:
使用Axis發布簡單的Web服務
。在我的應用中,使用的是后者,以便 Axis 進行自動序列化/反序列化處理。
實現一次 SSO 登陸驗證,最少要傳入用戶名、密碼。為了達到這種目的,在客戶端我們構造 User 對象(本文中 User 對象僅包含用戶名和密碼),并通過 Axis 自動序列化傳遞出去;到了 SSO 端,Axis 自動反序列化之后還原成 User 對象;最后返回給客戶端說明本次登陸的結果,返回的結果不僅僅包含例如“登陸成功”之類的簡單信息,也許還有很多其他信息,看來創建一個叫做 Respond 的對象(本文中 Respond 對象僅包含登陸 ID 和結果描述)很有必要了,把 Respond 傳回給客戶端說明登陸結果。
暴露給客戶端供登陸驗證的服務類是 AuthService。該類代碼簡單表示如下:
public
class
AuthService {
/**
* 驗證用戶名和密碼
*
@param
String userName 用戶名
*
@param
String passWord 密碼
*
@return
Respond 登陸驗證后返回
*/
public
Respond login(User user){
String name
=
user.getName();
String password
=
user.password();
//
進行數據庫驗證
//
..
//
Respond respond
=
new
Respond();
respond.setId(
"
123
"
);
respond.setDesc(
"
登陸成功
"
);
return
respond;
}
}
User 和 Respond 以及服務類都寫好了。通過命令行方式,我生成了 server-config.wsdd,內容如下:
<?
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”元素指定要進行處理的 bean 文件。只有在 WSDD 中定義了這些,才能享受到 Axis 帶來的自動序列化/反序列化優勢。
客戶端代碼:
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();
}
}
}
正如我們期望的,打印出“登陸成功”。通過上面的范例,我們發現,Axis 的自動序列化/反序列化機制還是很方便的,除了 bean 以外,其他類型的對象也可以讓 Axis 來完成,具體參考 Axis 文檔,如果要傳遞的對象 Axis 未提供自動序列化/反序列化支持,請考慮人工實現,參考:
深度編程Axis序列化/反序列化器開發指南
。
請注意!引用、轉貼本文應注明原作者:Rosen Jiang 以及出處:
http://m.tkk7.com/rosen
posted on 2006-01-28 20:37
Rosen
閱讀(3089)
評論(6)
編輯
收藏
所屬分類:
Java EE 服務器端
評論
#
re: 與 Axis 1.x 同行
2006-02-13 09:59
david.turing
AXIS很不錯,我倒是在XML簽名的時候用到它。
呵呵,你的SSO方案似乎對WS情有獨鐘,兄弟有沒有搞過SAML,似乎很多j2ee廠商都將或者已經支持它了:)
回復
更多評論
#
re: 與 Axis 1.x 同行
2006-02-13 23:28
Rosen
呵呵,圖靈兄光臨寒舍,熱烈歡迎!是的,我對 WS 很關心,這也算是歷史原因造成的:) SAML 是什么我還沒了解,不過 SAML 看樣子還很受歡迎。
回復
更多評論
#
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>每一項的具體含義嗎?
回復
更多評論
#
re: 與 Axis 1.x 同行
2007-05-14 11:43
Rosen
@aa
第一行說明了暴露的服務名和調用方式。
第二行是暴露的可調用的方法,*代表服務中所有方法都可調用。
第三行是服務的具體類路徑。
第四、五行是要自動序列化的對象(JavaBean、Bean、VO),用于傳輸。
回復
更多評論
#
re: 與 Axis 1.x 同行
2007-10-25 15:18
有貓相伴的日子
樓主的做法,我不敢贊同!!!!!!!!!!!!!!!
第一:axis對象序列化是一個非常麻煩的消耗時間的問題。
第二:我不提倡用命令來生成wsdd的配置,wsdd的配置相對來說簡單可以自己編寫。
第三:webservice最終目的是跨平臺,我認為應該使用不同平臺的公共類型。
第四:我認為webservice加上json的結合效率會非常高。
有不同意見者,可以找我討論
回復
更多評論
#
re: 與 Axis 1.x 同行
2007-10-25 17:25
Rosen
@有貓相伴的日子
就這幾個問題,我做一解釋。
1、耗時,我同意,你的意思是利用json做序列化吧?
2、這個怎么說呢,如果一直在從事WS開發的人肯定很熟悉,但我不是這樣的人。
3、這個觀點我同意,不過在這個應用中,當時并沒有牽涉到跨平臺。
4、json在寫作本文的時候,我還不知道這個格式。
另外,axis絕對不是java實現WS的唯一途徑,但對于xFire,我尚未評估。
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
Servlet的異步轉同步調用
利用 iText 實現 PDF 報表下載
OSGi起步(OSGi for Beginners)
Java 生成 JPG 縮略圖
Apache FileUpload 上傳以及 JExcelApi 解析
JBI-Java 實現 SOA 的標準途徑(翻譯)
與 Axis 1.x 同行
BIRT 總覽(翻譯)
XML 的 RUD
四種 XML 解析技術之不完全測試
Powered by:
BlogJava
Copyright © Rosen
主站蜘蛛池模板:
亚洲欧洲中文日韩久久AV乱码
|
免费看又黄又无码的网站
|
无码人妻一区二区三区免费手机
|
亚洲国产第一站精品蜜芽
|
A级毛片高清免费视频在线播放
|
亚洲国产精品SSS在线观看AV
|
日韩免费电影网址
|
亚洲天天在线日亚洲洲精
|
18女人毛片水真多免费
|
亚洲精品国产免费
|
97无码免费人妻超级碰碰碰碰
|
亚洲人成网站看在线播放
|
永久在线毛片免费观看
|
免费福利资源站在线视频
|
精品国产亚洲一区二区在线观看
|
日韩在线a视频免费播放
|
亚洲精品无码中文久久字幕
|
日本牲交大片免费观看
|
一级做α爱过程免费视频
|
亚洲精品自产拍在线观看
|
男人进去女人爽免费视频国产
|
亚洲视频免费播放
|
巨胸喷奶水视频www网免费
|
美女啪啪网站又黄又免费
|
国产偷国产偷亚洲清高动态图
|
亚洲成人免费在线
|
午夜在线a亚洲v天堂网2019
|
日韩亚洲国产二区
|
免费女人高潮流视频在线观看
|
亚洲男人的天堂网站
|
亚洲永久无码3D动漫一区
|
国产成人免费在线
|
免费观看亚洲人成网站
|
久久精品国产精品亚洲艾
|
噼里啪啦电影在线观看免费高清
|
4399影视免费观看高清直播
|
亚洲午夜精品久久久久久app
|
亚洲AV伊人久久青青草原
|
久久99国产综合精品免费
|
爱爱帝国亚洲一区二区三区
|
久久久久久a亚洲欧洲AV
|