狼愛(ài)上貍

          我胡漢三又回來(lái)了

          #

          Sybase系統(tǒng)維護(hù)經(jīng)驗(yàn)談

            Sybase數(shù)據(jù)庫(kù)系統(tǒng)作為C/S構(gòu)架的主流產(chǎn)品在我國(guó)有著廣泛的應(yīng)用,因此,對(duì)Sybase系統(tǒng)的維護(hù)也
          顯得至關(guān)重要。筆者在對(duì)Sybase系統(tǒng)維護(hù)工作中,總結(jié)了一些技巧和經(jīng)驗(yàn),現(xiàn)介紹給大家。

            1.實(shí)現(xiàn)開(kāi)機(jī)時(shí)自動(dòng)裝載Sybase數(shù)據(jù)庫(kù)

            原先要使Sybase SQL Server啟動(dòng),一般需要先以sybase用戶登錄,然后運(yùn)行$SYBASE/install目錄下
          的startserver命令啟動(dòng)SYBASE_XXXX服務(wù)進(jìn)程和SYB_BACKUP_XXXX備份服務(wù)進(jìn)程。

            要實(shí)現(xiàn)Unix系統(tǒng)啟動(dòng)時(shí)就能在后臺(tái)裝載Sybase的功能,我們可在/etc/rc2.d/目錄下新建一文件S99sybase,
          內(nèi)容如下:

            SYBASE=/usr/sybase

            PATH=$PATH:$SYBASE/bin

            export $SYBASE $PATH

            $SYBASE/install/startserver -f $SYBASE/install/RUN_SYBASE_XXXX > /dev/null

            $SYBASE/install/startserver -f $SYBASE/install/RUN_SYB_BACKUP_XXX >/dev/null

            然后修改Sybase的權(quán)限,重啟系統(tǒng)即可。

            2.實(shí)現(xiàn)關(guān)機(jī)時(shí)自動(dòng)卸載Sybase數(shù)據(jù)庫(kù)

            為保證Sybase系統(tǒng)的正常運(yùn)行,每次在關(guān)閉Unix系統(tǒng)時(shí)要先結(jié)束Sybase SQL Server 的服務(wù)進(jìn)程,從減輕
          系統(tǒng)管理人員操作的角度出發(fā)建立一用戶halt,修改/etc/passwd文件,將halt用戶的uid改為0(或其他可運(yùn)行
          shutdown的用戶id),在/usr/halt/.profile中添加以下語(yǔ)句:

            SYBASE=/usr/sybase

            DSQUERY=SYBASE_XXXX

            PATH=$PATH:$SYBASE/bin

            export SYBASE DSQUERY PATH

            isql -Usa -Pabcabc -ihalt.sql > /dev/null

            shutdown -y -g0

            其中“abcabc”為sa用戶的口令,halt.sql是一簡(jiǎn)單的文本文件,內(nèi)容如下:

            shutdown

            go

            這樣每次只要以halt用戶登錄,就實(shí)現(xiàn)了自動(dòng)卸下Sybase數(shù)據(jù)庫(kù),然后關(guān)閉Unix系統(tǒng)。

            3.Sybase庫(kù)備份技巧

            一般對(duì)Sybase庫(kù)進(jìn)行備份都用磁帶作介質(zhì)進(jìn)行,但還有一更好的方法,即先備份到硬盤上然后經(jīng)壓縮,
          拷貝到磁帶上,這樣便于恢復(fù),多了一個(gè)備份拷貝,同時(shí)也節(jié)省了備份時(shí)間。具體實(shí)現(xiàn)步驟如下:

            (1)建立磁盤備份設(shè)備

            運(yùn)行isql,以sa進(jìn)入Sybase系統(tǒng),運(yùn)行如下內(nèi)容:

            sp_addumpdevice "disk",disk_bkupdevice ,/tmp/dumpdb ,2

            go

            這樣就在Sybase中建立了一個(gè)名為“disk_bkupdevice”的備份設(shè)備,它對(duì)應(yīng)Unix系統(tǒng)下的/tmp/dumpdb文件。

            (2)創(chuàng)建備份用戶

            以root身份進(jìn)入U(xiǎn)nix系統(tǒng),新建用戶backupdb,并歸屬于sybase組。

            (3)修改相關(guān)文件

            在/usr/backupdb/.profile中添加以下語(yǔ)句:

            SYBASE=/usr/sybase

            DSQUERY=SYBASE_XXXX

            PATH=$PATH:$SYBASE/bin

            export SYBASE DSQUERY PATH

            rm /tmp/backupdb.Z

            echo"開(kāi)始備份SYBASE數(shù)據(jù)庫(kù)…"

            isql -Usa -Pabcabc -ibackup.sql > /tmp/dbbackup.log

            echo"硬盤備份完成,正在壓縮備份的數(shù)據(jù)文件…"

            compress /tmp/backupdb

            echo "正在將備份的壓縮數(shù)據(jù)拷入磁帶…"

            tar c8v /tmp/backupdb.Z

            echo "備份完成!"

            其中"abcabc"為sa用戶的口令,backup.sql是一簡(jiǎn)單的文本文件,內(nèi)容如下:

            dump database db_main to disk_bkupdevice

            go

            備份的執(zhí)行日志被記錄在/tmp/dbbackup.log中,當(dāng)然系統(tǒng)管理員也可通過(guò)查看$SYBASE/install/backup.log
          獲知備份日志。

            這種備份方法要求硬盤空間足夠大,這點(diǎn)請(qǐng)系統(tǒng)管理員在為Unix建分區(qū)時(shí)特別注意。

            在SCO Open Server 5.0.4、Sybase 11.0.3平臺(tái)上,以上幾個(gè)小技巧已應(yīng)用成功,為筆者的日常維護(hù)節(jié)省了許
          多時(shí)間,取得了非常好的效果。

           

          traceback: http://www.qingren.org/item/1016/ 

          posted @ 2007-07-02 11:37 狼愛(ài)上貍 閱讀(234) | 評(píng)論 (0)編輯 收藏

          Sybase ASE 安全登陸Linux

          在各種操作系統(tǒng)中,Linux已經(jīng)流行。因此,越來(lái)越多的主流數(shù)據(jù)庫(kù)廠商將它們的產(chǎn)品移植到Linux操作系統(tǒng)平臺(tái),例如Sybase、Oracle和IBM等。此外,可以使用的自由軟件越來(lái)越多。自由軟件庫(kù)中已經(jīng)包括了Sybase ASE for Linux、Oracle for Linux、Informix for Linux等數(shù)據(jù)庫(kù)軟件以及其他各種軟件。

          在上述幾種Linux平臺(tái)上的數(shù)據(jù)庫(kù)產(chǎn)品中,Sybase ASE的性能很好,緊湊的程序分發(fā)包里包含了全部文檔、數(shù)據(jù)庫(kù)備份和監(jiān)視等工具,同時(shí)它對(duì)系統(tǒng)的要求不高(系統(tǒng)配置為32MB內(nèi)存,包含文檔的全部安裝需要200MB硬盤,否則需要120MB硬盤)。它的安裝、配置過(guò)程與其他產(chǎn)品相比也很簡(jiǎn)單。這些優(yōu)勢(shì),連同Sybase數(shù)據(jù)庫(kù)產(chǎn)品本來(lái)的用戶基礎(chǔ),使得它成為L(zhǎng)inux平臺(tái)上出色的數(shù)據(jù)庫(kù)軟件。

          但是,Sybase ASE在正常安裝完成后,數(shù)據(jù)庫(kù)超級(jí)用戶的賬號(hào)沒(méi)有設(shè)置口令。這樣,Internet上每一個(gè)知道服務(wù)器端口號(hào)的用戶或者本機(jī)上的所有可登錄用戶都可以以超級(jí)用戶身份對(duì)數(shù)據(jù)庫(kù)隨意操作。這應(yīng)該說(shuō)是一個(gè)非常大的安全漏洞。下面將逐步介紹Sybase ASE for Linux 的安裝過(guò)程,以及安裝完成后需要采取的安全配置和較為安全的系統(tǒng)。

          一、Sybase ASE的安裝

          首先下載Sybase ASE for Linux軟件包,網(wǎng)上可以比較容易找到RPM格式的二進(jìn)制發(fā)行包,包括sybase-ase-11.0.3.3-1.i386.rpm(主程序包)、sybase-doc-11.0.3.3-1.i386.rpm(文檔包)。RPM是Redhat公司的軟件包管理程序,使用它可以非常方便地安裝和卸載程序包,并保持它們之間的依賴關(guān)系。

          然后,以超級(jí)用戶的身份鍵入命令:
          #rpm -i sybase-ase-11.0.3.3-1.i386.rpm

          屏幕會(huì)顯示Sybase公司的版權(quán)說(shuō)明,鍵入“yes”表示同意。接下去安裝程序會(huì)提示將在系統(tǒng)中創(chuàng)建一個(gè)用戶sybase和相應(yīng)的組,并要求為該賬號(hào)設(shè)置相應(yīng)的口令。Sybase數(shù)據(jù)庫(kù)安裝的缺省目錄是/opt/sybase。安裝時(shí)要注意磁盤分區(qū)有足夠的空間(大于200MB)。

          下一步可以重新以sybase登錄繼續(xù)配置,也可以使用 #su - sybase 改變身份為sybase來(lái)繼續(xù)對(duì)sybase進(jìn)行安裝。屏幕上將會(huì)出現(xiàn):

          1.Release directory:/opt/Sybase
          2.Edit / View Interfaces File
          3.Configure a Server product
          4.Configure an Open Client/Server product
          Ctrl-a Accept and Continue, Ctrl-x Exit Screen, ? Help.
          Enter the number of your choice and press return:

          選擇3來(lái)配置服務(wù)器,在該選項(xiàng)中將會(huì)一同配置服務(wù)器監(jiān)聽(tīng)端口。在下面每一個(gè)屏幕提示下,數(shù)字表示具體選項(xiàng),Ctrl-a表示已經(jīng)配置完畢,進(jìn)行下一步,Ctrl-x表示放棄剛才的選擇,退回上一步,下面省去同樣的提示。選擇3后,出現(xiàn)以下提示:
          Product Date InstalledDate Configured
          1.SQL Server11 Sep 1998 06:47
          2.Backup Server 11 Sep 1998 06:47

          首先選擇1配置SQL服務(wù)器,出現(xiàn)以下提示:
          1.Configure a new SQL Server
          2.Configure an existing SQL Server
          3.Upgrade an existing SQL Server

          然后選擇1來(lái)配置一個(gè)新的SQL服務(wù)器。配置備份服務(wù)器可以在SQL服務(wù)器配置完成后再來(lái)。由于是第一次安裝,所以選擇配置新的服務(wù)器,后面2個(gè)選項(xiàng)分別提供了重新配置或者升級(jí)原服務(wù)器的功能

          接下來(lái)的提示要求選擇服務(wù)器的名字,具體如下:
          ADD NEW SQL SERVER
          1.SQL Server name:SYBASE
          默認(rèn)為SYBASE。這與sybase的交互式訪問(wèn)工具isql的默認(rèn)服務(wù)器名字是一致的。

          完成上述配置后,出現(xiàn)如下顯示:
          SQL SERVER CONFIGURATION
          1.CONFIGURE SERVER'S INTERFACES FILE ENTRY Incomplete
          2.MASTER DEVICE CONFIGURATION Incomplete 3.SYBSYSTEMPROCS DATABASE CONFIGURATION Incomplete
          4.SET ERRORLOG LOCATION Incomplete 5.CONFIGURE DEFAULT BACKUP SERVER Incomplete
          6.CONFIGURE LANGUAGES Incomplete 7.CONFIGURE CHARACTER SETS Incomplete
          8.CONFIGURE SORT ORDER Incomplete 9.ACTIVATE AUDITING Incomplete

          以上關(guān)系到數(shù)據(jù)庫(kù)的具體內(nèi)容,包括端口號(hào)、設(shè)備、語(yǔ)言和字符集等。下面假定不改變默認(rèn)名,直接按Ctrl-a接受。

          第1項(xiàng)配置服務(wù)器端口,選擇后出現(xiàn)下面的提示屏幕:
          SERVER INTERFACES FILE ENTRY SCREEN
          Server name:SYBASE
          1.Retry Count:0
          2.Retry Delay:0
          3.Add a new listener service

          選擇增加一個(gè)監(jiān)聽(tīng)端口,出現(xiàn)下面的配置TCP端口的屏幕:
          EDIT TCP SERVICE
          1.Hostname/Address: localhost.localdomain
          2.Port:
          3.Name Alias:
          4.Delete this service from the interfaces entry

          其中的主機(jī)名在一般情況下由安裝程序自動(dòng)從環(huán)境中提取,通常不需要改動(dòng)。但是,如果用戶配置的是遠(yuǎn)程服務(wù)器的話,此處應(yīng)該修改為相應(yīng)的服務(wù)器地址。第二項(xiàng)的端口號(hào)用戶可以自由選擇,通常選擇在1024以上。同樣,如果是配置遠(yuǎn)程服務(wù)器,端口號(hào)應(yīng)該修改為正確的端口地址。這2個(gè)參數(shù)會(huì)記錄在/opt/sybase/interfaces文件中,也就是說(shuō)在配置完成后,用戶也可以手工修改該文件來(lái)重新改變連機(jī)端口的參數(shù)。

          第2項(xiàng)配置數(shù)據(jù)庫(kù)主設(shè)備。數(shù)據(jù)庫(kù)主設(shè)備可以是一個(gè)新的物理設(shè)備,也可以是磁盤中的一個(gè)文件,大小可以根據(jù)需要和存儲(chǔ)設(shè)備的空間大小調(diào)整。

          后面各項(xiàng)的配置在普通應(yīng)用下,基本上不需要修改缺省值。按照提示繼續(xù)做下去,依次分別是配置Sybase系統(tǒng)進(jìn)程數(shù)據(jù)庫(kù)、錯(cuò)誤日志、缺省備份服務(wù)器、字符集、數(shù)據(jù)庫(kù)排序和激活審計(jì)等。其中的缺省備份服務(wù)器和激活審計(jì)配置對(duì)于數(shù)據(jù)庫(kù)安全較為重要。

          在管理員希望對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份時(shí)需要備份服務(wù)器功能,它的原理是在一個(gè)特定的端口監(jiān)聽(tīng)備份申請(qǐng)(該端口號(hào)必須與前面數(shù)據(jù)庫(kù)端口號(hào)區(qū)分開(kāi)),將數(shù)據(jù)庫(kù)的數(shù)據(jù)備份到指定的設(shè)備中去(例如“/tmp/sybase.mybackup.19990909”)。選擇該項(xiàng)后,出現(xiàn)如下顯示:
          SET THE SQL SERVER'S BACKUP SERVER
          1.SQL Server Backup Server name:SYB_BACKUP
          審計(jì)功能在缺省狀態(tài)下并不打開(kāi)。如果管理員認(rèn)為需要,則可以參照下面的屏幕創(chuàng)建一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)系統(tǒng)審計(jì)信息。

          ACTIVATE AUDITING
          1.Install auditing:no
          2.sybsecurity database size (Meg):5
          3.sybsecurity logical device name:sybsecurity
          4.create new device for the sybsecurity database:no

          二、 安裝后的安全問(wèn)題與相應(yīng)的配置

          按照DoD52.00.28-STD信任計(jì)算機(jī)系統(tǒng)評(píng)估標(biāo)準(zhǔn),即通常所說(shuō)的桔皮書,Sybase ASE的設(shè)計(jì)標(biāo)準(zhǔn)為C2級(jí),它提供了4種安全機(jī)制,分別是訪問(wèn)控制、認(rèn)證控制、角色劃分和數(shù)據(jù)庫(kù)審計(jì)。訪問(wèn)控制是指對(duì)象所有者可以對(duì)不同的登錄用戶賦予或者取消某些訪問(wèn)的權(quán)利。認(rèn)證控制是指保證只有被授權(quán)的用戶才能登錄進(jìn)入系統(tǒng)。角色的劃分使得系統(tǒng)管理員可以將系統(tǒng)的一些特殊權(quán)利分別賦予某一個(gè)用戶,使他們能夠分別完成某些關(guān)鍵任務(wù)。具體來(lái)說(shuō),Sybase數(shù)據(jù)庫(kù)系統(tǒng)設(shè)定了3種主要角色:系統(tǒng)管理員(sa_role)、系統(tǒng)安全員(sso_role)和系統(tǒng)操作員(oper_role)。數(shù)據(jù)庫(kù)審計(jì)系統(tǒng)可以對(duì)系統(tǒng)的登錄、退出、數(shù)據(jù)庫(kù)啟動(dòng)、遠(yuǎn)程過(guò)程調(diào)用、角色的變化和對(duì)各種對(duì)象的訪問(wèn)等操作提供記錄與審查。

          數(shù)據(jù)庫(kù)應(yīng)用采用客戶機(jī)/服務(wù)器架構(gòu),服務(wù)器端在某一個(gè)端口監(jiān)聽(tīng)網(wǎng)絡(luò)連接請(qǐng)求。客戶端申請(qǐng)連接,輸入合法的用戶名和相應(yīng)的口令,進(jìn)入服務(wù)器,然后運(yùn)行需要的命令。這樣,在數(shù)據(jù)庫(kù)用戶的配置管理方面如果出現(xiàn)安全漏洞,勢(shì)必會(huì)給系統(tǒng)和數(shù)據(jù)帶來(lái)非常大的威脅。可是,Sybase ASE在正常安裝完成后,數(shù)據(jù)庫(kù)超級(jí)用戶的賬號(hào)沒(méi)有設(shè)置口令。這樣,Internet上每一個(gè)知道服務(wù)器端口號(hào)的用戶或者本機(jī)上的所有可登錄用戶都可以以超級(jí)用戶身份對(duì)數(shù)據(jù)庫(kù)隨意操作。這應(yīng)該說(shuō)是一個(gè)非常大的安全漏洞。下面,通過(guò)對(duì)角色的分析,給出解決這一問(wèn)題的方法。

          1.三種角色的主要權(quán)利和任務(wù)

          (1) sa_role
          管理磁盤使用,改變系統(tǒng)各種運(yùn)行參數(shù),診斷系統(tǒng)出現(xiàn)的各種問(wèn)題,備份和恢復(fù)數(shù)據(jù)庫(kù),對(duì)其他用戶賦予或者取消sa_role,創(chuàng)建用戶數(shù)據(jù)庫(kù)并為它們授予合適的屬主,以及建立用戶組等等。

          (2) sso_role
          創(chuàng)建登錄賬號(hào)并初始化口令,更改其他所有賬號(hào)的口令,對(duì)其他用戶賦予或者取消sso_role以及oper_role,設(shè)定口令時(shí)限以及管理審計(jì)系統(tǒng)等。

          (3) oper_role
          備份和恢復(fù)各種數(shù)據(jù)庫(kù)。

          2.更改sa口令

          Sybase ASE在安裝完成時(shí)在系統(tǒng)中創(chuàng)建了用戶sa,它同時(shí)具有sa_role和sso_role兩種角色。此時(shí)的用戶“sa”在服務(wù)器中具有無(wú)限的權(quán)利,相當(dāng)于Unix系統(tǒng)中一個(gè)沒(méi)有口令的root。這樣,任何蓄意的聯(lián)網(wǎng)用戶都可以完全控制該SQL服務(wù)器。這不能不說(shuō)是Sybase ASE的一個(gè)重大安全漏洞。為此,強(qiáng)烈建議在完成下面的安全配置之前請(qǐng)勿將服務(wù)器接入網(wǎng)絡(luò)。

          首先,利用Sybase提供的交互式訪問(wèn)工具isql連接服務(wù)器。鍵入以下命令:
          $/opt/sybase/bin/isql -Usa -P -Smysybase

          表示以用戶sa、空口令連接服務(wù)器mysybase。更改sa的口令,
          >sp_password NULL,"NewPassWd"
          >go

          將原來(lái)的空口令(NULL)改為當(dāng)前的“NewPassWd”。這里的口令最少為6個(gè)字符長(zhǎng)度,可以由任何可打印字符、字母和數(shù)字等組成。

          3.關(guān)閉sa賬號(hào)

          角色的劃分可以說(shuō)是Sybase數(shù)據(jù)庫(kù)相對(duì)于普通Unix系統(tǒng)在安全體制方面的改進(jìn)。但是,大家知道,擁有無(wú)限權(quán)利的超級(jí)用戶一方面是系統(tǒng)的保護(hù)者,但是更多的時(shí)候是給系統(tǒng)的安全帶來(lái)了巨大的安全威脅。簡(jiǎn)單來(lái)說(shuō),超級(jí)用戶一個(gè)低級(jí)的誤操作就可能毀掉整個(gè)服務(wù)器。從攻擊的角度來(lái)看,攻擊者只要獲得了超級(jí)用戶的身份就表明他已經(jīng)徹底攻克了該系統(tǒng)。而對(duì)于經(jīng)過(guò)特權(quán)分割安全加固的系統(tǒng)來(lái)說(shuō),攻擊者必須將若干個(gè)特權(quán)用戶全部破解,才能得以完全控制該系統(tǒng)。可以說(shuō)超級(jí)權(quán)利用戶的存在是區(qū)分C級(jí)和B級(jí)安全系統(tǒng)的一個(gè)重要標(biāo)志。

          在設(shè)置sa賬號(hào)的口令以后,通過(guò)創(chuàng)建新用戶,并區(qū)分sa的角色,關(guān)閉sa,從而進(jìn)一步加強(qiáng)服務(wù)器的安全。Sybasre提供了幾個(gè)相應(yīng)的命令sp_addlogin和sp_role等來(lái)完成上述操作。
          >sp_addlogin sa_user,"Sa,PassWd"
          >sp_addlogin sso_user,"Sso,PassW"
          >sp_role "grant",sa_role,sa_user
          >sp_role "grant",sso_role,sso_user
          >sp_locklogin sa,"lock"

          上述命令創(chuàng)建了兩個(gè)用戶sa_user,sso_user,并且分別設(shè)置了口令“Sa,PassW”和“Sso,Pass”,設(shè)置了角色sa_role和sso_role,然后關(guān)閉了賬號(hào)sa。

          (作者地址:江蘇鎮(zhèn)江南京經(jīng)濟(jì)學(xué)院橋頭校區(qū),212413)

           

          traceback: http://www.qingren.org/item/1057/

          posted @ 2007-07-02 11:34 狼愛(ài)上貍 閱讀(284) | 評(píng)論 (0)編輯 收藏

          Sybase12.5在WINXP下安裝的時(shí)候是亂碼,怎么解決?

          Sybase12.5在WINXP下安裝的時(shí)候是亂碼,怎么解決?
          A :
                  
                 
                 
          我感覺(jué)是字符集的問(wèn)題,XP的字符集跟2000不一樣,在2000下安裝就沒(méi)問(wèn)題 

          但是我不知道怎么解決這個(gè)問(wèn)題。  

           
          謝謝大家了。 

          --------------------------------------------------------------- 

           

          \shared-1_0\jre1.2.2\lib\font.properties.zh.NT4.0改成font.properties.zh.NT5.0 

          另外還必須把 

          \shared-1_0\jre1.2.2\lib\font.properties.zh_TW改成font.properties.zh_CN 

          就可以解決Sybase12.5在WINXP下的安裝問(wèn)題了

          來(lái)自:http://www.shaoys.com/testart/ShowWebTPL.asp?DocID=csdnsql0368

          posted @ 2007-07-02 11:17 狼愛(ài)上貍 閱讀(899) | 評(píng)論 (1)編輯 收藏

          不同種類的webservice錯(cuò)誤信息

          下面是調(diào)試web service時(shí),不同種種類的異常情況,以供調(diào)試參考


          缺少的jar文件請(qǐng)加在classpath中,注意檢查,classpath文件前面不要有空格。

          缺少axis.jar
          javax.xml.rpc.ServiceException: java.lang.ClassNotFoundException: org.apache.axis.client.ServiceFactory
           at javax.xml.rpc.ServiceFactory.newInstance(ServiceFactory.java:69)
           at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:24)

          缺少saaj.jar
          Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException
           at org.apache.axis.configuration.FileProvider.configureEngine(FileProvider.java:179)
           at org.apache.axis.AxisEngine.init(AxisEngine.java:172)
           at org.apache.axis.AxisEngine.(AxisEngine.java:156)
           at org.apache.axis.client.AxisClient.(AxisClient.java:52)
           at org.apache.axis.client.Service.getAxisClient(Service.java:104)
           at org.apache.axis.client.Service.(Service.java:157)
           at org.apache.axis.client.ServiceFactory.createService(ServiceFactory.java:198)
           at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:26)

          缺少wsdl4j.jar
          Exception in thread "main" java.lang.NoClassDefFoundError: javax/wsdl/extensions/mime/MIMEContent
           at org.apache.axis.wsdl.gen.Parser.run(Parser.java:297)
           at org.apache.axis.client.Service.initService(Service.java:243)
           at org.apache.axis.client.Service.(Service.java:165)
           at org.apache.axis.client.ServiceFactory.createService(ServiceFactory.java:198)
           at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:26)

          錯(cuò)誤的URL
          javax.xml.rpc.ServiceException: Error processing WSDL document: 
          java.net.UnknownHostException: www.xmethods.com
           at org.apache.axis.client.Service.initService(Service.java:250)
           at org.apache.axis.client.Service.(Service.java:165)
           at org.apache.axis.client.ServiceFactory.createService(ServiceFactory.java:198)
           at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:26)

          缺少用戶名、密碼
          javax.xml.rpc.ServiceException: Error processing WSDL document: 
          java.net.ProtocolException: Server redirected too many  times (20)
           at org.apache.axis.client.Service.initService(Service.java:250)
           at org.apache.axis.client.Service.(Service.java:165)
           at org.apache.axis.client.ServiceFactory.createService(ServiceFactory.java:198)
           at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:26)
           

          posted @ 2007-07-01 15:51 狼愛(ài)上貍 閱讀(4643) | 評(píng)論 (0)編輯 收藏

          用Globus Toolkit 4(GT4)構(gòu)建WEB服務(wù)

          版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
          作者:Birali Hakizumwami;xzzhouhu
          原文地址:http://www.onjava.com/pub/a/onjava/2005/10/19/constructing-web-services-with-globus-toolkit.html
          中文地址:http://www.matrix.org.cn/resource/article/44/44032_Globus_Toolkit.html
          關(guān)鍵詞: Globus Toolkit

          摘要:
          本文主要介紹了通過(guò)一種新的方法來(lái)構(gòu)建企業(yè)軟件,即通過(guò)調(diào)整Globus Toolkit 4實(shí)現(xiàn)的網(wǎng)格計(jì)算的概念來(lái)實(shí)現(xiàn)。GT4是一種可以通過(guò)開(kāi)放網(wǎng)格服務(wù)架構(gòu)(OGSI)來(lái)實(shí)施的開(kāi)放資源。這種實(shí)施主要目的是為網(wǎng)格服務(wù)架構(gòu)提供了依據(jù),同時(shí)也可以為別的網(wǎng)格服務(wù)架構(gòu)實(shí)施提供參考。本文詳細(xì)介紹了GT4中JAVA的核心服務(wù),這些服務(wù)具備提供代管網(wǎng)格服務(wù)實(shí)時(shí)運(yùn)行環(huán)境的能力,當(dāng)然這些網(wǎng)格服務(wù)都是由JAVA寫的。實(shí)時(shí)運(yùn)行環(huán)境在網(wǎng)格服務(wù)的應(yīng)用和網(wǎng)絡(luò)承載之間和傳輸協(xié)議引擎之間起到了協(xié)調(diào)的作用。


          一.網(wǎng)格的定義

          網(wǎng)格的定義:
          網(wǎng)格就是將收集網(wǎng)絡(luò)上所有可用的分布式計(jì)算資源提供給最終用戶或組建成一個(gè)巨大的計(jì)算系統(tǒng)。網(wǎng)格計(jì)算給分布式計(jì)算提供了一種全新的方法,不僅在跨地區(qū)而且在跨組織,機(jī)器結(jié)構(gòu)和軟件限制,給連接到網(wǎng)格的每個(gè)用戶提供更多的資源,計(jì)算機(jī)之間的協(xié)作和信息訪問(wèn)。分布式資源,像計(jì)算周期,存儲(chǔ)和信息,可以在網(wǎng)格中的任何地區(qū)訪問(wèn),同時(shí)也可以在網(wǎng)格中提供這些服務(wù)供其他用戶訪問(wèn)。這就要通過(guò)在每個(gè)獨(dú)立的組織或資源之間進(jìn)行安全的協(xié)調(diào)資源共享,共同建立一個(gè)動(dòng)態(tài)虛擬組織機(jī)構(gòu)。


          二.Globus Toolkit Version 4

          在本文中,我們主要討論GT4中JAVA的核心服務(wù)。(如圖1),這些服裉峁┝舜芡穹袷凳痹誦謝肪車哪芰ΑJ凳痹誦謝肪吃謨沒(méi)Фㄒ宓撓τ梅窈虶T4的核心服務(wù)之間,網(wǎng)絡(luò)承載和傳輸協(xié)議引擎之間起到了協(xié)調(diào)的作用。GT4核心服務(wù)還提供了程序開(kāi)發(fā)支持的功能,包括開(kāi)放式開(kāi)發(fā)模式和訪問(wèn)網(wǎng)格服務(wù)的實(shí)現(xiàn),像GRAM(Grid Resource Allocation Management,網(wǎng)格資源管理)。應(yīng)用GT4強(qiáng)有力的理由就是因?yàn)樗墙⒃诂F(xiàn)有的WEB服務(wù)標(biāo)準(zhǔn)和技術(shù)的基礎(chǔ)上,像SOAP和WSDL。網(wǎng)格服務(wù)提供的接口都是通過(guò)WSDL來(lái)描述的。GT4提供了一個(gè)軟件倉(cāng)庫(kù),像安全支持,軟件的探索,軟件的資源管理,軟件的調(diào)用,軟件之間的通信,異常處理和數(shù)據(jù)管理等。


                             (圖1)

          圖1主要描述了在服務(wù)器端的GT4中的主要組件結(jié)構(gòu)。這只是GT4所提供功能的一部分,我們只是認(rèn)為它很適合本文。GT4結(jié)構(gòu)由一個(gè)網(wǎng)格容器組成,網(wǎng)格容器主要用來(lái)管理所有部署的WEB服務(wù),貫穿于每個(gè)WEB服務(wù)的運(yùn)行周期。GT4使用apache的axis作為它的WEB服務(wù)的引擎來(lái)處理所有的SOAP消息,JAX-RPC (Java API for XML-Based RPC)處理和WEB服務(wù)的配置。


          三.貸款償還例子:

          我們列舉這樣一個(gè)例子,主要想向大家展示在企業(yè)內(nèi)部如何通過(guò)Globus Toolkit 來(lái)解決不同類操作系統(tǒng)之間進(jìn)行融合。在企業(yè)內(nèi)部,有些應(yīng)用可能是原來(lái)主機(jī)遺留下來(lái)的,技術(shù)比較落后,有些應(yīng)用已經(jīng)采用了現(xiàn)代技術(shù),像J2EE。甚至我們采用最先進(jìn)的技術(shù)在一個(gè)企業(yè)內(nèi)部的應(yīng)用之間進(jìn)行信息共享也要面臨巨大的挑戰(zhàn)。圖2給出了這樣一個(gè)例子,在一個(gè)抵押機(jī)構(gòu)內(nèi),在貸款償還信息處理和會(huì)計(jì)部門信息處理之間的交互,

          image
                          (圖2)

          會(huì)計(jì)部門使用申請(qǐng)貸款處理服務(wù)來(lái)申請(qǐng)貸款。

          為了創(chuàng)建和部署網(wǎng)格服務(wù),我們需要:
          *通過(guò)創(chuàng)建WSDL文件來(lái)定義服務(wù)的接口
          *用JAVA來(lái)實(shí)現(xiàn)
          *通過(guò)創(chuàng)建WSDD文件來(lái)定義服務(wù)的部署參數(shù)
          *使用ANT編譯源代碼并生成GAR文件
          *用GT4分發(fā)工具部署GAR文件
          我們必須使用從上往下的方法來(lái)創(chuàng)建網(wǎng)格服務(wù),(圖3)

          這種方法首先從提供WSDL文件開(kāi)始,在WSDL文件中包括對(duì)WEB服務(wù)的抽象定義,包括服務(wù)類型,消息類型和端口類型。從WSDL文檔開(kāi)始并根據(jù)WSDL文檔創(chuàng)建了JAVA模型,從而導(dǎo)致與其他系統(tǒng)更好交互。

          image

            我們使用GT4 toolkit自帶的工具來(lái)進(jìn)行服務(wù)的綁定和產(chǎn)生客戶段需要的根類。這種方法的下一步就是提供接口的實(shí)現(xiàn)。

          貸款償還服務(wù)處理定義:
          對(duì)于貸款償還服務(wù)處理的例子的接口類型我們定義為loan.wsdl,它描述了貸款償還服務(wù)所提供的三個(gè)部分的操作(申請(qǐng)貸款,貸款處理和獲得貸款)。首先我們描述貸款償還服務(wù)的請(qǐng)求和響應(yīng):

          <types>

            <xsd:element name="createLoan">
              <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="loanNumber" type="xsd:int"/>
                  <xsd:element name="amountUPB" type="xsd:double"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="createLoanResponse">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="returnValue" type="xsd:int"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>

            <xsd:element name="processLoanPayment">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="loanNumber" type="xsd:int"/>
                  <xsd:element name="amount" type="xsd:double"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="processLoanPaymentResponse">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="returnValue" type="xsd:int"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>

            <xsd:element name="getLoan">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="loanNumber" type="xsd:int"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="getLoanResponse">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="returnValue" type="tns:LoanType"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>

          </types>


          我們?cè)谖募?loan.xsd.中定義了貸款的數(shù)據(jù)類型,我們通過(guò)使用“ import <xsd:import schemaLocation="loan.xsd"/> ”可以直接將loan.xsd.文件導(dǎo)入到文件loan.wsdl 中,并且用它作為獲得貸款操作返回的類型

          <complexType name="LoanType">
              <sequence>
                  <element name="loanNumber" type="int"/>
                  <element name="UPB" type="double"/>
                  <element name="status" type="string"/>
                  <element name="createDate" type="string"/>
              </sequence>
          </complexType>


          下一步,我們要定義所有的消息服務(wù)。一條消息元素可能由一個(gè)或多個(gè)部分組成,消息元素的每個(gè)部分對(duì)應(yīng)一個(gè)參數(shù),并且還有一個(gè)類型屬性。消息既可以是一個(gè)請(qǐng)求消息(輸入消息),也可以是一個(gè)響應(yīng)消息(輸出消息)。

          <message name="CreateLoanInputMessage">
            <part name="parameters" element="tns:createLoan"/>
          </message>
          <message name="CreateLoanOutputMessage">
            <part name="parameters" element="tns:createLoanResponse"/>
          </message>

          <message name="ProcessLoanPaymentInputMessage">
            <part name="parameters" element="tns:processLoanPayment"/>
          </message>
          <message name="ProcessLoanPaymentOutputMessage">
            <part name="parameters"
              element="tns:processLoanPaymentResponse"/>
          </message>

          <message name="GetLoanInputMessage">
            <part name="parameters" element="tns:getLoan"/>
          </message>
          <message name="GetLoanOutputMessage">
            <part name="parameters" element="tns:getLoanResponse"/>
          </message>


          最后我們定義所有的端口類型,每個(gè)接口類型定義了一個(gè)或多個(gè)操作來(lái)使用當(dāng)前的操作元素,每個(gè)獨(dú)立的操作元素又定義了一個(gè)操作和與操作有聯(lián)系的消息的輸入輸出。在一個(gè)端口類型內(nèi)操作元素定義了端口類型內(nèi)所有調(diào)用方法的語(yǔ)法。

          <portType name="LoanPortType">
            <operation name="createLoan">
              <input message="tns:CreateLoanInputMessage"/>
              <output message="tns:CreateLoanOutputMessage"/>
              <fault name="Fault" message="ogsi:FaultMessage"/>
            </operation>
            <operation name="processLoanPayment">
              <input message="tns:ProcessLoanPaymentInputMessage"/>
              <output message="tns:ProcessLoanPaymentOutputMessage"/>
              <fault name="Fault" message="ogsi:FaultMessage"/>
            </operation>
            <operation name="getLoan">
              <input message="tns:GetLoanInputMessage"/>
              <output message="tns:GetLoanOutputMessage"/>
              <fault name="Fault" message="ogsi:FaultMessage"/>
            </operation>
          </portType>


          服務(wù)的實(shí)現(xiàn):
            在前面的步驟中,終端貸款端口類型的接口已經(jīng)產(chǎn)生,在定義這些端口類型的接口時(shí),所有的遠(yuǎn)程操作都要設(shè)為public,并且拋出java.rmi.RemoteException。在本文中給出了LoanServiceImpl類,主要實(shí)現(xiàn)貸款端口類型的接口,這些實(shí)現(xiàn)要用到前面所講到的用loan.wsdl文件所生成的根類。

          public class LoanServiceImpl implements LoanPortType


          其中LoanServiceImpl 所實(shí)現(xiàn)的方法定義在LoanPortType接口中,createLoan方法在產(chǎn)生一個(gè)createLoan對(duì)象的構(gòu)造器中要獲取一個(gè)貸款數(shù)字作為它的參數(shù)。

          public CreateLoanResponse createLoan(CreateLoan cl)
          throws java.rmi.RemoteException
          public ProcessLoanPaymentResponse processLoanPayment(ProcessLoanPayment plp)
          throws java.rmi.RemoteException
          public GetLoanResponse getLoan(GetLoan gl) throws java.rmi.RemoteException


          請(qǐng)參考完整代碼詳細(xì)描述方法的實(shí)現(xiàn)。

          編譯并創(chuàng)建貸款/償還處理的WEB服務(wù):
          下面我們介紹通過(guò)以下步驟來(lái)創(chuàng)建易部署的GT4打包文檔。Ant在編譯本文所提供文件時(shí)所產(chǎn)生的build.xml中包含了ant的執(zhí)行任務(wù)的步驟。在build.xml中ant的執(zhí)行任務(wù)調(diào)用GT4中的ant任務(wù),這些任務(wù)伴隨著GT4的發(fā)布可以在編譯文件中找到。

          %GLOBUS_LOCATION%/share/globus_wsrf_common/build-packages.xml
          %GLOBUS_LOCATION%/share/globus_wsrf_tools/build-stubs.xml
          %GLOBUS_LOCATION%/share/schema


          編譯GT4中易部署的GAR文件
             為了創(chuàng)建易部署的網(wǎng)格打包文件,loan.gar,我們通過(guò)以下步驟來(lái)實(shí)現(xiàn):(這些步驟與builder.xml中的ant任務(wù)是一致的):
          ·        與WSDL文件綁定
          ·        通過(guò)WSDL        文件生成一個(gè)根類,在安裝時(shí),提供一個(gè)特殊文件來(lái)對(duì)不同的命名空間和包之間進(jìn)行映射,這些包與表格中的目錄結(jié)構(gòu)一致。
          ·        編譯根類
          ·        編譯接口類
          ·        用JAR壓縮接口類,和根類一樣(loan.jar and loan_stubs.jar).
          ·        通過(guò)創(chuàng)建部署描述文件deploy-server.wsdd.來(lái)生成易部署的GAR文件,loan.gar
          請(qǐng)參考源代碼中完整的build.xml文件,通過(guò)以上步驟來(lái)實(shí)現(xiàn)一系列的ant編譯任務(wù)。GT4描述我們的WEB服務(wù)文件deploy-server.wsdd就想這樣:

          <service name="loan/impl/LoanService" provider="Handler"
          use="literal" style="document">
              <parameter name="className" value="loan.impl.LoanServiceImpl"/>
              <wsdlFile>share/schema/loan/Loan_service.wsdl</wsdlFile>
              <parameter name="allowedMethods" value="*"/>
              <parameter name="handlerClass"
              value="org.globus.axis.providers.RPCProvider"/>
              <parameter name="scope" value="Application"/>
              <parameter name="providers" value="GetRPProvider"/>
              <parameter name="loadOnStartup" value="true"/>
          </service>


          讓我們來(lái)介紹一下deploy-server.wsdd中的一些參數(shù):
          服務(wù)名稱:指定我們所提供的WEB服務(wù)的路徑,我們將它與WEB服務(wù)容器的地址相結(jié)合起來(lái),我們會(huì)得到WEB服務(wù)的完整的URL。為了便于測(cè)試,使用獨(dú)立的GT4容器,URL就像這樣:

          http://localhost:8080/wsrf/services/loan/impl/LoanService

          類名:指實(shí)現(xiàn)服務(wù)接口的類(LoanServiceImpl).
          WSDL文件:告訴GT4中的WEB服務(wù)容器對(duì)于當(dāng)前的WEB服務(wù)的WSDL文件在那里可以找到。WSDL文件Loan_service.wsdl是在GT4 從loan.wsdl進(jìn)行ANT時(shí)自動(dòng)產(chǎn)生的。
          啟動(dòng)時(shí)裝載:如果我們需要服務(wù)在WEB服務(wù)容器啟動(dòng)時(shí)就開(kāi)始裝載,允許我們控制服務(wù)的裝載。

          部署GAR文件:
          GAR文件loan.gar包含了所有的文件和WEB服務(wù)器需要的部署信息,我們使用GT4部署工具:

          %GLOBUS_LOCATION%/bin/globus-deploy-gar $PROJECT_HOME/loan.gar

          拷貝文檔文件(loan.wsdl,編譯的根類,編譯的接口實(shí)現(xiàn),loan.wsdd)到GT4容器的目錄下適當(dāng)位置。

          測(cè)試借貸款處理實(shí)例

          在圖1描述了如何將貸款方的子系統(tǒng)和貸款結(jié)算子系統(tǒng)作為借貸款的WEB服務(wù)的客戶端,現(xiàn)在我們就在GT4網(wǎng)格服務(wù)容器中創(chuàng)建和部署WEB服務(wù),我們需要用一個(gè)客戶端進(jìn)行測(cè)試,測(cè)試用例模擬一個(gè)貸款事件,一個(gè)貸款月度償還事件和一個(gè)貸款還清事件。作為客戶端來(lái)說(shuō),他們希望WEB服務(wù)的URI(統(tǒng)一資源標(biāo)識(shí)符)能夠作為客戶端訪問(wèn)WEB服務(wù)的依據(jù)。客戶端的程序要獨(dú)立的進(jìn)行編譯,下面來(lái)描述客戶端訪問(wèn)WEB服務(wù)的主要步驟:

          創(chuàng)建一終端引用類型對(duì)象,來(lái)代表終端引用的貸款服務(wù)。我們的終端引用只需要服務(wù)的URI:
          EndpointReferenceType endpoint = new EndpointReferenceType();
          endpoint.setAddress(new Address(serviceURI));

          下一步,我們要獲得引用服務(wù)的端口類型,這需要一個(gè)根類調(diào)用LoanServiceAddressingLocator, LoanServiceAddressingLocator主要是用來(lái)維持客戶端與WEB服務(wù)之間的通信和獲得引用貸款端口的類型。
          LoanServiceAddressingLocator locator = new LoanServiceAddressingLocator();
          LoanPortType loanPT = locator.getLoanPortTypePort(endpoint);


          一旦我們獲得這個(gè)引用,我們可以作為本地對(duì)象來(lái)操作WEB服務(wù)。例如,調(diào)用遠(yuǎn)程的創(chuàng)建操作,我們僅僅需要在貸款端口類型中使用創(chuàng)建方法。
          CreateLoanResponse clr = loanPT.createLoan(new CreateLoan(amount, loanNumber));

          請(qǐng)參考附件中完整的客戶端代碼。在編譯客戶端之前,請(qǐng)保證運(yùn)行下面的腳本,以便于GT4的發(fā)布:
          %GLOBUS_LOCATION%/etc/globus-devel-env.bat

          globus-devel-env.bat文件主要是將Globus的類庫(kù)注冊(cè)到系統(tǒng)的classpath中,因?yàn)榭蛻舳耸亲鳛楠?dú)立的應(yīng)用來(lái)編譯的,同樣,要保證在編譯客戶端的目錄中所放置的已編譯的根類時(shí)能通過(guò)classpath找到,因此我們的客戶端可以訪問(wèn)服務(wù)器端的根類,像LoanServiceAddressingLocator。

          啟動(dòng)網(wǎng)格容器
          使用下面的命令來(lái)啟動(dòng)網(wǎng)格容器:

          %GLOBUS_LOCATION%/bin/globus-start-container –nosec

          -nosec參數(shù)主要是為了簡(jiǎn)化測(cè)試,略去安全設(shè)置。如果網(wǎng)格容器啟動(dòng)成功,你將會(huì)看到已部署的服務(wù)的URI列表,如果LoanService正確的部署,在已部署的服務(wù)的列表中有下面的一行:

          [13]: http://localhost:8080/wsrf/services/loan/impl/LoanService

          測(cè)試借貸款處理的WEB服務(wù)
          通過(guò)客戶端進(jìn)行測(cè)試,我們假設(shè)有以下操作:申請(qǐng)貸款,償還貸款,還清貸款。

          ·        創(chuàng)建一個(gè)初始化貸款編號(hào)為100并且還有12000未還        
          java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService createLoan 100 120000
          Loan 100 created successfully.


          ·        假定兩個(gè)月償還,每個(gè)月還$1100(本例不考慮利息的計(jì)算)
          java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 1100
          Loan 100 processed successfully.
          java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 1100
          Loan 100 processed successfully.


          ·        查看貸款的狀態(tài)
          java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService getLoanData 100
          Loan Data
          Create Date Mon Jun 06 16:41:06 EDT 2005
          Unpaid Principal Balance 117800.0
          Status ACTIVE


          ·        第三個(gè)月還清余款($117,800)
          java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 117800
          Loan 100 processed successfully


          ·        查看貸款狀態(tài)
          java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService getLoanData 100
          Loan Data
          Create Date Mon Jun 06 16:41:06 EDT 2005
          Unpaid Principal Balance 0.0
          Status PAIDOFF


          結(jié)束語(yǔ):

          本文主要描述了在基于現(xiàn)有的WEB服務(wù)標(biāo)準(zhǔn)的基礎(chǔ)上,如何調(diào)整GT4網(wǎng)格結(jié)構(gòu)來(lái)創(chuàng)建一個(gè)網(wǎng)格服務(wù)應(yīng)用。盡管GT4已經(jīng)主要的應(yīng)用在大型的科學(xué)計(jì)算問(wèn)題上,但是在一個(gè)企業(yè)內(nèi)部它可以作為實(shí)現(xiàn)面向服務(wù)結(jié)構(gòu)(SOA)的一種方法。本文主要是通過(guò)一個(gè)簡(jiǎn)單的實(shí)例來(lái)描述如何使用GT4中的JAVA核心服務(wù)來(lái)創(chuàng)建和部署一個(gè)網(wǎng)格服務(wù),但是并沒(méi)有覆蓋到更多的其他的更先進(jìn)的關(guān)于如何使用網(wǎng)格服務(wù)概念,向網(wǎng)格服務(wù)的分配和管理,文件傳輸?shù)目煽啃裕W(wǎng)格異常和安全。

          資源
          ·本文的示例代碼
          ·Matrix-Java開(kāi)發(fā)者社區(qū):http://www.matrix.org.cn
          ·onjava.com:onjava.com



          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=544636

          posted @ 2007-06-29 22:08 狼愛(ài)上貍 閱讀(499) | 評(píng)論 (0)編輯 收藏

          輕松漢化M3Gate

            程序替換掉5個(gè)文件就可以讓您的M3gate瀏覽器成為中文版,還不趕緊行動(dòng)。漢化包由中國(guó)被愛(ài)可以在線[http://www.bicyle.org]提供。

           

          查看更多精彩圖片 使用說(shuō)明:
          1.如果您已經(jīng)安裝了M3gate Version 1.2 Beta后,覆蓋原安裝程序文件夾下的文件[見(jiàn)清單]。
          例如位置F:\Program Files\NumericLabs\M3Gate 覆蓋文件清單:
                  Handy.dll ''啟動(dòng)文件時(shí),確定。
                  M3Browse.dll ''查看屬性時(shí)的文字漢化。
                  ''右鍵菜單和設(shè)置對(duì)話框、界面設(shè)置等。
                  Lang//
                        im3en.dll
                        bm3en.dll
                  Skin//
                        SM3April.s2i
          2.任何基于M3gate Version 1.2 Beta程序的工具,均可替換掉相應(yīng)文件。
              如:WapDisplayer V1.2等
          3.此漢化組件僅對(duì)M3gate Version 1.2 Beta有較好的作用,對(duì)Version 0.6不予支持。

           

          附件: M3GateToChinese.rar (339 K)

          來(lái)自:http://www.maikr.com/kan.aspx?id=2e96d77e-18b3-44c9-8731-03a92dd36689

          posted @ 2007-06-29 14:57 狼愛(ài)上貍 閱讀(575) | 評(píng)論 (2)編輯 收藏

          Axis開(kāi)發(fā)Webservice傳Bean對(duì)象返回String串的實(shí)例

          這幾天也一直在為了設(shè)計(jì)與實(shí)現(xiàn)一個(gè)業(yè)務(wù)平臺(tái),想用Webservice 來(lái)作為核心技術(shù)來(lái)實(shí)現(xiàn),也一直想精溢求精地把這個(gè)東東搞好, 突然覺(jué)得好久沒(méi)來(lái)這里寫日志了.呵,時(shí)間如白駒過(guò)隙啊!

           

            對(duì)于webService 以前也接觸過(guò).但只是皮毛,這次可是來(lái)真格的.來(lái)就來(lái)吧,年輕人這就是機(jī)會(huì).一定得把握好,干它一票! 呵,就在網(wǎng)上到處找找啊,在本地機(jī)器上左試試,右試試啊, 什么法子都用一遍。就不信搞不定它,小樣!

           

            網(wǎng)上的例子也比較散,比較簡(jiǎn)易的,達(dá)不我想要的業(yè)務(wù)水平,只能慢慢搜索與摸索吧。。。。。。就這樣天天想著這事,也沒(méi)什么心情來(lái)這里寫寫。

           

            近些天,也快回深圳了,定在下周四動(dòng)身吧。這邊的工作也得告一節(jié)了。把我前一些日子,搞一個(gè)完整的Samples 放到這里來(lái),與大家共享。希望對(duì)有心人有些啟發(fā),也希望高人指點(diǎn)與點(diǎn)評(píng)。。。。。。。、

           

             ****************************************************
             *Axis開(kāi)發(fā)Webservice傳Bean對(duì)象返回String串的實(shí)例.rtf*
             ****************************************************

           

          在ECLIPSE 里新建一工程,其次建包,再次建類,
          基本包:samples.userguide.example5
          基本類: Order.java
                 
          內(nèi)容:
              *  Order.java *
          *《********************************

          package samples.userguide.example5;

          /**
           * This is a JavaBean which represents an order for some products.
           * Copyright: Copyright (c) 2007-1
           * @author Black skin (blackskin@126.com)
           * @version 1.0
           */
          public class Order {
           /** Who's ordering */
           private String customerName;

           /** Where do they live */
           private String shippingAddress;

           /** Which items do we want */
           private String itemCodes[];

           /** And how many */
           private int quantities[];

           // Bean accessors

           public String getCustomerName() {
            return customerName;
           }

           public void setCustomerName(String name) {
            customerName = name;
           }

           public String getShippingAddress() {
            return shippingAddress;
           }

           public void setShippingAddress(String address) {
            shippingAddress = address;
           }

           public String[] getItemCodes() {
            return itemCodes;
           }

           public void setItemCodes(String[] items) {
            itemCodes = items;
           }

           public int[] getQuantities() {
            return quantities;
           }

           public void setQuantities(int[] quants) {
            quantities = quants;
           }
          }

          ********************************》*

           

          主服務(wù)包: samples.userguide.example5
          主服務(wù)類: BeanService.java
                   
           如下:
              * BeanService.java *
          **《*******************************
          package samples.userguide.example5;

          /**
           * This is a JavaBean which represents an order for some products.
           * Copyright: Copyright (c) 2007-1
           * @author Black skin (blackskin@126.com)
           * @version 1.0
           */

          public class BeanService {
           public String processOrder(Order order) {
            String sep = System.getProperty("line.separator");

            String response = "Hi, " + order.getCustomerName() + "!" + sep;

            response += sep + "You seem to have ordered the following:" + sep;

            String[] items = order.getItemCodes();
            int[] quantities = order.getQuantities();

            for (int i = 0; i < items.length; i++) {
             response += sep + quantities[i] + " of item : " + items[i];
            }

            response += sep + sep + "If this had been a real order processing system, "
                      + sep + "we'd probably have charged you about now.";

            return response;
           }

           public static void main(String[] args) throws Exception{
            /** Who's ordering */
            String customerName = "Black Skin";
            /** Where do they live */
            String shippingAddress = "001 xingan Street, bayuquan, YK";
            /** Which items do we want */
            String[] items = new String[] { "apple", "160ml-Milk" };
            /** And how many */
            int[] quantities = new int[] { 2, 4 };
            /** request class init() */
            Order order = new Order();
            order.setCustomerName(customerName);
            order.setShippingAddress(shippingAddress);
            order.setItemCodes(items);
            order.setQuantities(quantities);
            /** server class init() */
            BeanService beanservice = new BeanService();
            String result = beanservice.processOrder(order);
            /** OutPut the result */
            System.out.println(" " + result); 
           }
           
          }

          ********************************》*

           

           BeanService.java里有個(gè)本地測(cè)試方法(samples.userguide.example5.BeanService.main()),來(lái)測(cè)試此應(yīng)用的可運(yùn)行性;


          到此,服務(wù)端類寫完了,接著來(lái)把此類的方法發(fā)布成 WebService 接口

          手寫一個(gè)deploy.wsdd 文件,可以參考下面的例子:
                *deploy.wsdd例子*
          *《********************************
          <?xml version="1.0" encoding="utf-8"?>
          <deployment xmlns="<parameter name="className" value="服務(wù)類文件的實(shí)際路徑(包括包的信息)"/>
          <parameter name="allowedMethods" value="*(即為所有方法都可訪問(wèn),如要指定多個(gè)可用空格分隔開(kāi))"/>
          <parameter name="allowedRoles" value="user"/>
          <parameter name="scope" value="Session"/>
          <requestFlow>
          <handler type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
          </requestFlow>
          </service>
          </deployment>
          ********************************》*

          顯然,簡(jiǎn)單,造一個(gè)deploy.wsdd 信手捏來(lái),如下:
                *deploy.wsdd*
          *《********************************
          <deployment xmlns="
                  <parameter name="className" value="samples.userguide.example5.BeanService"/>
                  <parameter name="allowedMethods" value="processOrder"/>
                  <beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService" languageSpecificType="java:samples.userguide.example5.Order"/>
              </service>
          </deployment>
          ********************************》*

          有了deploy.wsdd文件了,接著通過(guò)它來(lái)生成 server-config.wsdd.
          OK! 用命令直接生成就行;在deploy.wsdd 的文件夾下新建一個(gè) makeWsdd.bat.
          其中的寫法有下面的例子來(lái)參考:

                * makeWsdd.bat 例子*
          *《********************************
          set AXISCLASSPATH= “應(yīng)用發(fā)布的路徑”
          set AXIS_LIB= “AXIS框架的內(nèi)部JAR包LIB路徑”
          SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;
          %AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

          java -Djava.ext.dirs=%AXISCLASSPATH% org.apache.axis.client.AdminClient
           -S服務(wù)名\services\AdminService -p端口號(hào)(如果你的端口號(hào)不是默認(rèn)的8080需要指定。
           例如:8899)deploy.wsdd
          ********************************》*


          如此,我寫了一“makeWsdd.bat”文件。如下:

                * makeWsdd.bat*
          *《********************************
          set AXISCLASSPATH=C:\Axis_webservice\Tomcat_4.1\webapps\axis
          set AXIS_LIB=C:\axis-1_4\lib
          SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;
          %AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

          java -Djava.ext.dirs=%AXISCLASSPATH% org.apache.axis.client.AdminClient
           -SBeanServer\services\AdminService -p 8080 deploy.wsdd
          ********************************》*

          保存好,接下來(lái)架設(shè)Webservice.

          環(huán)境架設(shè):
          首先,安裝JDK...(略)...本例用JDK版本號(hào)V1.4.
          其次,安裝Tomcat...(略)...本例用Tomcat版本號(hào)V4.1.
          再次,AXIS...(略)...本例用AXIS版本號(hào)V1.4. 去AXIS官方網(wǎng)站:
          http://www.apache.org下載AXIS,解壓后得,
             |- axis-1_4
                  |- docs
               |- ..(略)...
           |- lib
               |- axis.jar
               |- axis-ant.jar
               |- commons-discovery-0.2.jar
               |- commons-logging-1.0.4.jar
               |- jaxrpc.jar
               |- log4j-1.2.8.jar
               |- log4j.properties
               |- saaj.jar
               |- wsdlj-1.5.1.jar
           |- samples
               |- ..(略)...
           |- webapps
               |- axis
                  |- ..(略)...
           |- xmls
               |- ..(略)...
              將解壓后,C:\axis-1_4\webapps 目錄下的 axis 目錄 Copy 到 tomcat/webapps目錄(C:\Axis_webservice\Tomcat_4_1\webapps)下,

          架設(shè)AXIS:
          首先,將deploy.wsdd文件Copy到 %AXISCLASSPATH%/WEB-INF 目錄下;
          其次,將之前的類編譯后,連路徑一起Copy到 %AXISCLASSPATH%/WEB-INF/classes目錄下,
          最后,將tomcat的 catalina 服務(wù)啟動(dòng).
          (即:C:\Axis_webservice\Tomcat_4.1\bin,

             [特別注意的是:]
                 A。tomcat務(wù)必啟動(dòng)。
                 B。在寫如上的命令行時(shí),務(wù)必注意參數(shù)的寫法。“-D” 與 “-S”與其值間不能有空格。切記!
                 C。各XX的路徑里,最好是不要有空格,因?yàn)镴AVA里對(duì)大小寫與路徑空格有校驗(yàn)。
          ,)

          測(cè)試:
          命令行啟動(dòng)方法;運(yùn)行"cmd",在命令行里寫:"cd C:\Axis_webservice\Tomcat_4.1\bin",回車,再寫:"  catalina run ",回車,OK!
          后臺(tái)會(huì)報(bào)錯(cuò):
          "
          - Unable to find config file.  Creating new servlet engine config file: /WEB-INF/server-config.wsdd
          2007-1-20 10:07:48 org.apache.coyote.http11.Http11Protocol start
          信息: Starting Coyote HTTP/1.1 on port 8080
          "
          說(shuō)明,在../WEB-INF/下沒(méi)有"server-config.wsdd",暫時(shí)忽略。
          在IE地址欄寫:http://localhost:8080/axis
          可見(jiàn),axis 歡迎首頁(yè),點(diǎn)擊 "list" 便可看到默認(rèn)情況下發(fā)布了兩個(gè)服務(wù)下各有一個(gè)方法。一切準(zhǔn)備工作已經(jīng)OK!


          再回到,剛才我們寫的那個(gè)批處理文件:" makeWsdd.bat",
          直接雙擊,便可執(zhí)行, 有一個(gè)警告,可以忽略的。執(zhí)行完成后,在相應(yīng)的
          %AXISCLASSPATH%/WEB-INF下便有一“server-config.wsdd”文件,如下:

                *server-config.wsdd*
          *《********************************

          <?xml version="1.0" encoding="UTF-8"?>
          <deployment xmlns="  <parameter name="disablePrettyXML" value="true"/>
            <parameter name="adminPassword" value="admin"/>
            <parameter name="attachments.Directory" value="C:\Axis_webservice\Tomcat_4.1\webapps\axis\WEB-INF\attachments"/>
            <parameter name="dotNetSoapEncFix" value="true"/>
            <parameter name="enableNamespacePrefixOptimization" value="false"/>
            <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="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>
           <service name="OrderProcessor" provider="java:RPC">
            <parameter name="allowedMethods" value="processOrder"/>
            <parameter name="className" value="samples.userguide.example5.BeanService"/>
            <beanMapping languageSpecificType="java:samples.userguide.example5.Order" qname="ns1:Order" xmlns:ns1="urn:BeanService"/>
           </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>


          ********************************》*
           
          再去打開(kāi):"
          http://localhost:8080/axis/servlet/AxisServlet",或者,再刷新。
          便可以看到,我們新發(fā)布的一個(gè)webservice接口服務(wù),其名為:"OrderProcessor "
          此服務(wù)下的個(gè)方法:其名為:"processOrder "。

          點(diǎn)擊服務(wù)對(duì)應(yīng)的"(WSDL)"可見(jiàn)服務(wù)WSDL描述內(nèi)容。在其中也可以得服務(wù)的訪問(wèn)地址:
          "http://localhost:8080/axis/services/OrderProcessor?wsdl"
          服務(wù)器端的開(kāi)發(fā),搞定了!

          -:)    -:)    -:)  

          接下來(lái),準(zhǔn)備開(kāi)發(fā),客戶端的開(kāi)發(fā)。

           


                * Client.java *
          *《********************************
          package samples.userguide.example5;

          /**
           * This is a JavaBean which represents an order for some products.
           * Copyright: Copyright (c) 2007-1
           * @author Black skin (blackskin@126.com)
           * @version 1.0
           */

          import java.net.URL;

          import org.apache.axis.AxisFault;
          import org.apache.axis.client.Call;
          import org.apache.axis.client.Service;
          import org.apache.axis.utils.Options;

          import javax.xml.namespace.QName;
          import javax.xml.rpc.ParameterMode;

          public class Client {
           public static void main(String[] args) throws Exception {
            //Options options = new Options(args);
            String urlWsdl = "http://localhost:8080/axis/services/OrderProcessor?wsdl";

            Order order = new Order();
            order.setCustomerName("Black Skin");
            order.setShippingAddress("275 Grove Street, Newton, MA");

            String[] items = new String[] { "apple", "160ml-Milk" };
            int[] quantities = new int[] { 8, 4 };

            order.setItemCodes(items);
            order.setQuantities(quantities);

            Service service = new Service();
            Call call = (Call) service.createCall();
            QName qn = new QName("urn:BeanService", "Order");

            call.registerTypeMapping(Order.class, qn,
              new org.apache.axis.encoding.ser.BeanSerializerFactory(
                Order.class, qn),
              new org.apache.axis.encoding.ser.BeanDeserializerFactory(
                Order.class, qn));
            String result;
            try {
             //call.setTargetEndpointAddress(new java.net.URL(options.getURL()));
             call.setTargetEndpointAddress(new java.net.URL(urlWsdl));
             call.setOperationName(new QName("OrderProcessor", "processOrder"));
             call.addParameter("arg1", qn, ParameterMode.IN);
             call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);

             result = (String) call.invoke(new Object[] { order });
            } catch (AxisFault fault) {
             result = "Error : " + fault.toString();
            }

            System.out.println(result);
           }
          }

          ********************************》*

          oK! 到此,一個(gè)完整的Webservice例子就搞定了。

          另外,Axis 還提供了一些工具,如:" wsdl2java "、" java2wsdl "

          處理的方式與方法:
            java2wsdl:
             1. 以上為例,在以上工程的class輸出目錄新建一BAT文件:名為:“java2wsdl.bat”
             2. 其內(nèi)容為:
                   * java2wsdl.bat *
          *《********************************
          set AXIS_LIB=C:\axis-1_4\lib
          SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

          java org.apache.axis.wsdl.Java2WSDL -o Order.wsdl  -l"http://localhost:8080/axis/services/OrderProcessor" -n "urn:BeanService"  -p"samples.userguide.example5.Order" "urn:Order" samples.userguide.example5.BeanService
          ********************************》*

          把AXIS_LIB設(shè)為正確的本地包路徑,再運(yùn)行“java2wsdl.bat”,
          便可以在目錄下看到一個(gè)文件:“Order.wsdl”,通過(guò)這個(gè)WSDL文件,可以生成Webservice接口服務(wù)的框架,
          既可以是服務(wù)器端,也可以是客戶端框架。其細(xì)節(jié),可以參考下一節(jié)。


          處理的方式與方法:
            wsdl2java :
             1. 以上為例,把Order.wsdl拷貝過(guò)來(lái),在其目錄下新建一BAT文件:名為:“wsdl2java.bat”
             2. 其內(nèi)容為:
                 * wsdl2java.bat *
          *《********************************
          set AXIS_LIB=C:\axis-1_4\lib
          SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

          java org.apache.axis.wsdl.WSDL2Java Order.wsdl
          ********************************》*

          或者有另外的作法:把服務(wù)端的應(yīng)用啟動(dòng),直接寫成:

          java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/services/OrderProcessor?wsdl

          保存好后,運(yùn)行這個(gè)BAT文件,
          便會(huì)自動(dòng)生成:
          BeanService_pkg\
            BeanService.java
            BeanServiceService.java
            BeanServiceServiceLocator.java
            OrderProcessorSoapBindingStub.java   
            Order.java

          ok.


          來(lái)自:http://blackskin126.bokee.com/viewdiary.14630183.html

          posted @ 2007-06-29 12:43 狼愛(ài)上貍 閱讀(2333) | 評(píng)論 (0)編輯 收藏

          axis 的客戶端使用

          1. http://ws.apache.org/Axis/下載 axis-1_2_1 解壓放在 D:\softSetup\下

          dl.bitsCN.com網(wǎng)管軟件下載

           

          2.下載 apache-ant-1.6.1  解壓放在D:\softSetup\下 bitsCN全力打造網(wǎng)管學(xué)習(xí)平臺(tái)

          3.環(huán)境變量設(shè)置:

          需要什么來(lái)搜一搜吧so.bitsCN.com

           

          JAVA_HOME=C:\jdk1.5.0_06
          CATALINA_HOME=tomcat-5.5.15
          ANT_HOME=D:\softSetup\apache-ant-1.6.1
          AXISCLASSPATH=%AXIS_LIB%\activation.jar;%AXIS_LIB%\mail.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB% \wsdl4j.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xerces.jar;%AXIS_LIB%\junit.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar
          AXIS_HOME=D:\softSetup\axis-1_2_1
          AXIS_LIB=%AXIS_HOME%\lib
          CATALINA_HOME=D:\softSetup\jakarta-tomcat-5.0.24
          classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%AXISCLASSPATH%
          path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%CATALINA_HOME%\bin;%ANT_HOME%\bin so.bitsCN.com網(wǎng)管資料庫(kù)任你搜

          4.在命令行 運(yùn)行set 確保新加的環(huán)境變量生效

          bitsCN.com中國(guó)網(wǎng)管聯(lián)盟

           

          5.根據(jù)合作伙伴給的wsdl地址 http://www.****.com/services/OrderService?wsdl保存下來(lái)到D:\project\test\wsdl\OrderService.wsdl 需要什么來(lái)搜一搜吧so.bitsCN.com

          6.在命令行 切換到 D:\project\test\wsdl\下運(yùn)行axis的WSDL2Java 命令:  java org.apache.axis.wsdl.WSDL2Java OrderService.wsdl    生成 bean 文件,***Service.java,***ServiceLocator.java,***ServiceSoapBindingStub.java 等文件,可以用Axis的wsdl2java生成web service的客戶端,wsdl2java生成的客戶端是stub方式的。它包括endpoint借口、實(shí)現(xiàn)該接口的stub、 serviceLocator、可選的單元測(cè)試代碼。其中,serviceLocator中hard code了服務(wù)端地址.

          so.bitsCN.com網(wǎng)管資料庫(kù)任你搜

           

          7. 應(yīng)用.寫一個(gè)表單jsp,提交到下面jsp文件進(jìn)行處理(可以寫在類里,此處簡(jiǎn)單處理) play.bitsCN.com累了嗎玩一下吧

          <%@ page contentType="text/html; charset=GBK"%>
          <%@page import="org.apache.axis.client.Call"%>
          <%@page import="javax.xml.namespace.QName"%>
          <%@page import="java.net.MalformedURLException"%>
          <%@page import="java.rmi.RemoteException"%>
          <%@page import="java.util.*"%>
          <%@page import="java.net.URL"%>
          <%@page import="org.apache.axis.client.Service"%>
          <%@page import="com.newSky.datainterface.beans.*"%>
          <%!

          dl.bitsCN.com網(wǎng)管軟件下載

           

            private final static String success = "測(cè)試完成";
            private final static String fail = "測(cè)試失敗:";
            final static String endPoint = "http://www.***.com/services/OrderService";
            final static String portName = "addNewOrder";
            final static String nameSpace = "http://beans.datainterface.newSky.com";
          %>
          <html>
          <head></head>
          <body>
          <%
            try {
              Call call = null;
              URL url = null;
              try {
                //create new url
                url = new URL(endPoint);
              }
              catch (MalformedURLException e) {
                System.out.println(fail + e.getMessage());
                e.printStackTrace();
              }
              //create new service
              Service service = new Service();
              try {
                //create new call 需要什么來(lái)搜一搜吧so.bitsCN.com
                call = (Call) service.createCall();
              }
              catch (Exception se) {
                System.out.println(fail + se.getMessage());
                se.printStackTrace();
              }
              //設(shè)置服務(wù)器
              call.setTargetEndpointAddress(url);
              //設(shè)置端口
              call.setOperationName(new QName(endPoint, portName));
              //***********************
               //注冊(cè)類,開(kāi)始
               try {
                 QName qn1 = new QName(nameSpace, "OrderUserData");
                 call.registerTypeMapping(OrderUserData.class, qn1,
                                          new org.apache.axis.encoding.ser.BeanSerializerFactory(OrderUserData.class, qn1),

          bbs.bitsCN.com國(guó)內(nèi)最早的網(wǎng)管論壇

                                          new org.apache.axis.encoding.ser.BeanDeserializerFactory(OrderUserData.class, qn1));
               
               }
               catch (Exception EQ) {
                 EQ.printStackTrace();
               }
              //注冊(cè)類,結(jié)束
              //設(shè)置返回類型
              // set bean 此處省略。。
              try {
                //調(diào)用服務(wù)
                System.out.println("*************  測(cè)試開(kāi)始 ******************");
                call.setUsername(request.getParameter("id"));
                String result = (String) call.invoke(new Object[] {new Integer(request.getParameter("id)),
                                                       new String(request.getParameter("pwd")), orderData});

          so.bitsCN.com網(wǎng)管資料庫(kù)任你搜


                System.out.println(result);

          bbs.bitsCN.com國(guó)內(nèi)最早的網(wǎng)管論壇

           

                if(result.equals("-100")){
                  out.write("用戶名密碼錯(cuò)誤");
                }
                 else{
                  out.write("成功");
                }
                System.out.println("*************  測(cè)試完成 ******************");
              }
              catch (RemoteException re) {
                System.out.println(fail + re.getMessage());
                //re.printStackTrace();
              }
            }
            catch (Exception e) {
              // e.printStackTrace();
            }
          %>
          </body>
          </html>

          bitsCN全力打造網(wǎng)管學(xué)習(xí)平臺(tái)

           

          8. ok ^_^ bitsCN全力


          來(lái)自:http://www.bitscn.com/java/webservice/200611/82110.html

          posted @ 2007-06-29 12:33 狼愛(ài)上貍 閱讀(479) | 評(píng)論 (0)編輯 收藏

          用Axis開(kāi)發(fā)基于Java的Web服務(wù)

          概述

            本文介紹了一個(gè)比較簡(jiǎn)單實(shí)用的基于Java的SOAP引擎——Apache組織推出的Axis——的安裝、配置和應(yīng)用開(kāi)發(fā)方法,希望對(duì)有興趣做基于Java的Web Services應(yīng)用開(kāi)發(fā)的朋友有所幫助。

            Axis簡(jiǎn)介

            Axis是Apache組織推出的SOAP引擎,Axis項(xiàng)目是Apache組織著名的SOAP項(xiàng)目的后繼項(xiàng)目,目前最新版本是采用Java開(kāi)發(fā)的1.1版本,C++的版本正在開(kāi)發(fā)之中。Axis v1.1軟件包可以從http://ws.apache.org/axis/dist/1_1/下載得到。

            Axis的安裝

            應(yīng)用Axis開(kāi)發(fā)Web Services,你需要有一個(gè)支持Servlet的服務(wù)器引擎,比如廣為人知的Tomcat(Tomcat也是由Apache組織所提供的,目前的最新版本為4.1.24,下載地址為http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.1.24/)。在此之前當(dāng)然你機(jī)器必須已經(jīng)裝好了JDK1.3以上的版本,當(dāng)安裝好Tomcat之后,只需將下載的Axis軟件包解壓縮,將其中的“webapps”目錄下的“axis”目錄整個(gè)拷貝到Tomcat安裝目錄下的“webapps”目錄下即可。

            Axis的配置

            Axis基于Java開(kāi)發(fā),可以部署于多種操作系統(tǒng),使用前需要配置一系列的系統(tǒng)變量,在此假定你已經(jīng)在本機(jī)上裝好了Tomcat 4.0以上的版本,需要配置的系統(tǒng)變量如下表所示:

          CATALINA_HOME
          C:\Tomcat_4_1

          (此處應(yīng)為Tomcat的安裝位置,注意路徑名中不要有空格)

          AXIS_HOME
          %CATALINA_HOME%\webapps\axis

          AXIS_LIB
          %AXIS_HOME%\lib

          AXISCLASSPATH
          %AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

            如果你不愿做這么繁瑣的類路徑設(shè)置,可以直接將axis軟件包中“lib”目錄下的所有.jar文件加入到系統(tǒng)環(huán)境變量CLASSPATH中即可。

            Axis的測(cè)試

            安裝配置完畢后,應(yīng)測(cè)試一下是否Axis可以正確運(yùn)行了。

            啟動(dòng)Tomcat服務(wù)器,在瀏覽器中訪問(wèn)http://localhost:8080/axis/happyaxis.jsp,如果頁(yè)面顯示有錯(cuò)誤,則需要回頭檢查一下相關(guān)配置是否正確,如果瀏覽頁(yè)面能正確顯示出系統(tǒng)組件、屬性等參數(shù)配置信息,則表示安裝成功,如下圖所示:



            現(xiàn)在可以開(kāi)始開(kāi)發(fā)你的Web Services應(yīng)用了。

           


          作者:飛鷹出處:yesky責(zé)任編輯: 方舟 [ 2003-08-21 16:50 ]
          本文介紹了一個(gè)比較簡(jiǎn)單實(shí)用的基于Java的SOAP引擎的安裝、配置和應(yīng)用開(kāi)發(fā)方法

            服務(wù)的發(fā)布

            Axis提供了兩種服務(wù)發(fā)布方式,一種是即時(shí)發(fā)布(Instant Deployment),一種是定制發(fā)布(Custom Deployment)。

           

            使用即時(shí)發(fā)布

            對(duì)即時(shí)發(fā)布的支持是Axis的特色之一,使用即時(shí)發(fā)布使用戶只需有提供服務(wù)的Java類的源代碼,即可將其迅速發(fā)布成Web服務(wù)。每當(dāng)用戶調(diào)用這類服務(wù)的時(shí)候,Axis會(huì)自動(dòng)進(jìn)行編譯,即使服務(wù)器重啟了也不必對(duì)其做任何處理,使用非常簡(jiǎn)單快捷。

            使用即時(shí)發(fā)布首先需要一個(gè)實(shí)現(xiàn)服務(wù)功能的Java源文件,將其擴(kuò)展名改為.jws(Java Web Service的縮寫),然后將該文件放到“……\webapps\axis”目錄下即可。

            在此給出一個(gè)從英里到公里的長(zhǎng)度單位轉(zhuǎn)換的服務(wù),其源碼如下:

          文件Distance.jws

          /**

          * @author 飛鷹

          */

          public class Distance

          {

          public double convertMile2Kilometre( double mile )

          {

          //實(shí)現(xiàn)英里到公里的距離轉(zhuǎn)換

          return mile * 1.609;

          }//convertMile2Kilometre()

          }/* Distance */

            將其放到“……\webapps\axis”目錄,通過(guò)訪問(wèn)http://localhost:8080/axis/Distance.jws?wsdl可以看到這個(gè)服務(wù)的WSDL描述文件,這說(shuō)明Distance服務(wù)被成功發(fā)布了。如下圖所示:



            使用定制發(fā)布

            即時(shí)發(fā)布是一項(xiàng)令人激動(dòng)的技術(shù),它使Web服務(wù)的開(kāi)發(fā)變得如此簡(jiǎn)單;然而即時(shí)發(fā)布并不總是最好的選擇,比如有些應(yīng)用系統(tǒng)是第三方提供的,我們沒(méi)有購(gòu)買源代碼,只有.class文件,但我們又希望將這個(gè)應(yīng)用系統(tǒng)的一些功能對(duì)外發(fā)布成Web服務(wù),使其能夠在更大范圍內(nèi)產(chǎn)生作用,這個(gè)時(shí)候即時(shí)發(fā)布技術(shù)就無(wú)能為力了。此外,即時(shí)發(fā)布技術(shù)并不靈活,無(wú)法進(jìn)行更多的服務(wù)配置,這使得它并不能滿足一些特定系統(tǒng)的需求。

            因此,Axis提供了另一種服務(wù)發(fā)布方式,這就是定制發(fā)布。

            在此給出一個(gè)從加侖到升的容積單位轉(zhuǎn)換的服務(wù),其源碼如下:

            文件Capacity.java

          package samples.capacity;

           

          /**

          * @author 飛鷹

          */

          public class Capacity

          {

          public double convertGallon2Litre( double gallon )

          {

          //實(shí)現(xiàn)加侖到升的容積轉(zhuǎn)換

          return gallon * 4.546;

          }//convertGallon2Litre()

          }/* Capacity */

            將其編譯成.class文件,放置到“……\webapps\axis\samples\capacity”目錄下,即可著手進(jìn)行發(fā)布。

            定制發(fā)布不需要構(gòu)建.jws文件,但必須創(chuàng)建服務(wù)發(fā)布描述文件deploy.wsdd(Web Service Deployment Descriptor的縮寫),這個(gè)文件負(fù)責(zé)描述服務(wù)的名稱、入口等信息,其內(nèi)容如下:

            文件deploy.wsdd

          <deployment xmlns="http://xml.apache.org/axis/wsdd/"

          xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

           

          <service name="Capacity" provider="java:RPC">

          <parameter name="className" value="samples.capacity.Capacity"/>

          <parameter name="allowedMethods" value="*"/>

          </service>

           

          </deployment>

            將該文件也放到“……\webapps\axis\samples\capacity”目錄下,然后可以采用Axis提供的一個(gè)客戶端管理工具——AdminClient來(lái)完成服務(wù)的定制發(fā)布。

            在“……\webapps\axis\samples\capacity”目錄下,運(yùn)行:

          java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

            可以看到以下運(yùn)行結(jié)果:

          Processing file deploy.wsdd

          <Admin>Doneprocessing</Admin>

            這表明Capacity服務(wù)定制發(fā)布完成。

            通過(guò)訪問(wèn)http://localhost:8080/axis/services/Capacity?wsdl可以看到這個(gè)服務(wù)的WSDL描述文件,這說(shuō)明Capacity服務(wù)被成功發(fā)布了。如下圖所示:




          作者:飛鷹出處:yesky責(zé)任編輯: 方舟 [ 2003-08-21 16:50 ]
          本文介紹了一個(gè)比較簡(jiǎn)單實(shí)用的基于Java的SOAP引擎的安裝、配置和應(yīng)用開(kāi)發(fā)方法

            服務(wù)的訪問(wèn)

            GET方式的服務(wù)訪問(wèn)

            一般的SOAP消息都是采用POST方式實(shí)現(xiàn)傳遞,但也可以通過(guò)GET方式來(lái)訪問(wèn)。比如以下給出的一個(gè)服務(wù)——“HelloWorld”,其源碼如下:

           

          文件HelloWorld.jws

          /**

          * @author 飛鷹

          */

          public class HelloWorld

          {

          public String helloWorld()

          {

          //在服務(wù)器端打印輸出

          System.out.println( "Hello World!" );

           

          //返回相應(yīng)字符串

          return "Hello World!";

          }//helloWorld()

           

          }/* HelloWorld */

            這個(gè)服務(wù)給出一個(gè)名位“helloWorld”的無(wú)入口參數(shù)的操作,返回一個(gè)內(nèi)容為“Hello World!的字符串”,同時(shí)在服務(wù)器端打印“Hello World!”,將該文件放到“……\webapps\axis”目錄下,即可通過(guò)GET方法直接訪問(wèn)該服務(wù),訪問(wèn)的地址為http://localhost:8080/axis/HelloWorld.jws?method=helloWorld,可以看到返回的SOAP信封消息,同時(shí)服務(wù)器端給出了相應(yīng)的顯示信息“Hello World!”這表明HelloWorld服務(wù)被成功訪問(wèn)了。如下圖所示:



            客戶端服務(wù)訪問(wèn)編程

            Axis提供了一套API來(lái)實(shí)現(xiàn)SOAP,從http://localhost:8080/axis/docs/apiDocs/index.html可以看到Axis的API文檔。

            其中,org.apache.axis.client.Call和org.apache.axis.client.Service是兩個(gè)比較常用的類,一般的客戶端程序欲訪問(wèn)一個(gè)Web Service時(shí),都要生成一個(gè)客戶端的Service對(duì)象和Call對(duì)象,在訪問(wèn)服務(wù)之前,首先要對(duì)Call對(duì)象設(shè)置相應(yīng)的參數(shù),包括服務(wù)的位置、操作名、入口參數(shù)、返回值類型等,最后調(diào)用Call對(duì)象的invoke方法訪問(wèn)服務(wù)。

            以下給出了一個(gè)客戶端訪問(wèn)Web服務(wù)的例程——AXISTest.java:

            文件AXISTest.java

          package axisexercise;

           

          import org.apache.axis.client.Call;

          import org.apache.axis.client.Service;

          import org.apache.axis.encoding.XMLType;

           

          import javax.xml.rpc.ParameterMode;

           

          /**

          * @author 飛鷹

          */

          public class AXISTest

          {

          public static void main( String[] args ) throws Exception

          {

          Service service = new Service();

          Call call = ( Call ) service.createCall();

           

           

          //////////訪問(wèn)即時(shí)發(fā)布的Distance服務(wù)

          //設(shè)置訪問(wèn)點(diǎn)

          call.setTargetEndpointAddress( "http://localhost:8080/axis/Distance.jws" );

           

          //設(shè)置操作名

          call.setOperationName( "convertMile2Kilometre" );

           

          //設(shè)置入口參數(shù)

          call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );

          call.setReturnType( XMLType.XSD_DOUBLE );

          Double d1 = new Double( 190 );

           

          //調(diào)用服務(wù)

          System.out.println( d1 + " 英里相當(dāng)于 " +

          call.invoke( new Object[] {d1} ) + " 公里!" );

           

           

           

          //////////訪問(wèn)定制發(fā)布的Capacity服務(wù)

          call = ( Call ) service.createCall();

          //設(shè)置訪問(wèn)點(diǎn)

          call.setTargetEndpointAddress( "http://localhost:8080/axis/services/Capacity" );

           

          //設(shè)置操作名

          call.setOperationName( "convertGallon2Litre" );

           

          //設(shè)置入口參數(shù)

          call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );

          call.setReturnType( XMLType.XSD_DOUBLE );

          d1 = new Double( 10.00 );

           

          //調(diào)用服務(wù)

          System.out.println( d1 + " 加侖相當(dāng)于 " +

          call.invoke( new Object[] {d1} ) + " 升!" );

          } //main()

          }/* AXISTest */

            編譯運(yùn)行后運(yùn)行可以看到以下的結(jié)果:

            190.0英里相當(dāng)于305.71公里!

            10.0加侖相當(dāng)于45.46升!
           
            注意程序在訪問(wèn)即時(shí)發(fā)布的Distance服務(wù)和定制發(fā)布的Capacity服務(wù)時(shí)的不同,前者的服務(wù)訪問(wèn)點(diǎn)地址為http://localhost:8080/axis/HelloWorld.jws,而后者的則為http://localhost:8080/axis/services/Capacity。


          來(lái)自:http://hi.baidu.com/zxhcloth/blog/item/bb8637dbf28e0b67d0164ea5.html

          posted @ 2007-06-29 10:17 狼愛(ài)上貍 閱讀(353) | 評(píng)論 (0)編輯 收藏

          在windows 2000,XP 下通過(guò)mod_jk2.so整合Tomcat5.0 和 Apache2.0

          在windows 2000,XP 下通過(guò)mod_jk2.so整合Tomcat5.0 和 Apache2.0

          ------- dreamsky15(阿賢) 原創(chuàng)

          準(zhǔn)備工作:
          分別到www.sun.comwww.apache.org 下載

          JDK1.4 : j2sdk-1_4_2_04-windows-i586-p.exe
          Tomcat5 : jakarta-tomcat-5.0.14.exe
          apache2:apache_2.0.48-win32-x86-no_ssl.exe
          jk2 : jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip

          版本可能有所更新。


          1.安裝JDK1.4,指定安裝在 C:\JDK1.4目錄下;
          2.確認(rèn)80和8080端口不被占用,特別是IIS是否占用80端口,否則要修改端口設(shè)置;
          3.安裝Tomcat5.0,指定安裝在C:\Tomcat5.0目錄下,
           指定JAVA虛擬機(jī)目錄為剛才安裝的 C:\JDK1.4;
          4.安裝apache2,指定安裝在 C:\ 根目錄下,那么它自己會(huì)自動(dòng)創(chuàng)建Apache2目錄,
           得到 C:\Apache2 最終目錄;
          5.設(shè)置windows系統(tǒng)環(huán)境變量中的系統(tǒng)變量:

          path:
           C:\JDK1.4\bin;C:\JDK1.4\jre\bin;

          classpath:
           C:\JDK1.4;C:\JDK1.4\lib;C:\JDK1.4\lib\dt.jar;C:\JDK1.4\lib\tools.jar;C:\Tomcat5.0\common\lib\servlet-api.jar;C:\Tomcat5.0\common\lib\tools.jar;
          6.重啟電腦
          7.用瀏覽器訪問(wèn)
          http://localhost/  和 http://localhost:8080/ 
          兩個(gè)網(wǎng)站,它們分別是apache和Tomcat的默認(rèn)首頁(yè);
          如果不成功則要重新檢查設(shè)置;
          8.解壓 jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip
          9.在解壓文件的 doc\mod_jk2 目錄下有 INSTALL.txt 英文文檔教你安裝,你可以作為參照。
          10.在解壓文件的 modules 目錄下有 mod_jk2.so 文件,將其復(fù)制到 C:\Apache2\modules;
          11.在解壓文件的 conf 目錄下有 workers2.properties.sample文件,將其復(fù)制到 C:\Apache2\conf 目錄下,將文件名改為workers2.properties,增加兩行:
          [uri:/*.jsp]
          group=lb

          這表明要Tomcat解釋所有以 jsp 為后綴的文件。

          增加
          [uri:/servlet/*]
          group=lb

          這表明要Tomcat解釋/servlet/目錄下的所有文件,
          所以所有servlet最好映射到 /servlet/ 路徑下,其他的文件不要放到這個(gè)目錄下。
          (注:tomcat中所有沒(méi)有在 web.xml 中注冊(cè)的 servlet默認(rèn)映射到 /servlet/ 路徑下。
          但前提條件是你要修改tomcat的 web.xml ,去掉兩處 <servlet-name>invoker</servlet-name>的注釋,來(lái)激活這個(gè)功能。)

          這樣做,是為了令到Tomcat專職解釋所有 jsp 和 servlet ,而將 html,txt等類型的文件交給強(qiáng)大的Web服務(wù)器——apache解釋,各司其職,分擔(dān)Tomcat的壓力。

          12.備份好C:\Apache2\conf\httpd.conf防止不測(cè),修改 C:\Apache2\conf\httpd.conf 文件,原文件有很多行LoadModule,
          在其后增加一行:
          LoadModule jk2_module modules/mod_jk2.so
          這個(gè)在 INSTALL.txt 英文文檔里有說(shuō);

          找到 DocumentRoot "C:/Apache2/htdocs" ,修改為你指定的根目錄
          DocumentRoot "C:/Tomcat5.0/webapps"

          正反斜杠無(wú)所謂,最好用 / ;

          同樣找到<Directory "C:/Apache2/htdocs">
          修改為<Directory "C:/Tomcat5.0/webapps">

          找到 DirectoryIndex index.html index.html.var
          在后面增加 index.jsp 使得apache將index.jsp也作為默認(rèn)首頁(yè)。

          13.將原來(lái) <VirtualHost *:80> 相關(guān)的設(shè)置注釋去掉,自定義你的實(shí)際參數(shù);
          其中
          DocumentRoot /www/docs/dummy-host.example.com
          改為DocumentRoot "C:/Tomcat5.0/webapps"

          將 AddDefaultCharset ISO-8859-1 改為
          AddDefaultCharset gb2312
          使得apache默認(rèn)是簡(jiǎn)體中文。
          14.
          啟動(dòng)Tomcat5.0,apache2
          你會(huì)看到apache service monitor 控制臺(tái)窗口下的狀態(tài)欄文字由原來(lái)的
          Apache/2.0.48 (Win32)
          變?yōu)?br>Apache/2.0.48 (Win32) mod_jk2/2.0.4

          分別訪問(wèn) http://localhost/jsp-examples/
          http://localhost:8080/jsp-examples/
          測(cè)試其中的jsp例子,如果都能正確運(yùn)行,證明配置成功!!!
          恭喜你! :)

          有錯(cuò)誤或疑問(wèn),請(qǐng)多多交流。


          來(lái)自:
          http://blog.csdn.net/dreamsky15/archive/2004/10/11/132261.aspx

          posted @ 2007-06-27 20:59 狼愛(ài)上貍 閱讀(495) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共38頁(yè): First 上一頁(yè) 28 29 30 31 32 33 34 35 36 下一頁(yè) Last 
          主站蜘蛛池模板: 桐梓县| 珠海市| 禹城市| 包头市| 平和县| 邵阳县| 连江县| 英超| 渝中区| 菏泽市| 五峰| 信宜市| 陇西县| 安义县| 吴川市| 大石桥市| 惠水县| 河曲县| 沙洋县| 南岸区| 拉萨市| 河津市| 马鞍山市| 漯河市| 驻马店市| 广昌县| 济阳县| 洪洞县| 达尔| 五指山市| 兴山县| 正镶白旗| 长治市| 佛坪县| 九江市| 贵定县| 青州市| 商南县| 游戏| 资阳市| 松原市|