〔摘 要〕研究了使用XML結合SOAP、WSDL等技術解決校園信息化建設中數據重復和信息孤島等問題的方案。首先進行數據建模,將校園異構系統信息表述為標準的XML格式,通過SOAP封裝、WSDL描述實現對信息的請求、響應和傳輸,解決校園分布式環境下數據格式不一致的難題,實現異構系統之間的通訊,實現的資源共享。
〔關鍵詞〕可擴展標記語言;簡單對象訪問協議;Web服務描述語言;統一描述、發現和集成
〔中圖分類號〕G203 〔文獻標識碼〕A 〔文章編號〕1008-0821(2009)07-0076-03
Research and Design on the Campus Information
Shared Scheme Based on XML/SOAPDu Juan
(College of Economy and Management,Southwest University of Science and Technology,Mianyang 621010,China)
〔Abstract〕This paper studied the scheme that solved the problems of data repetition and isolated information island in the campus information construction using XML and SOAP,WSDL and other Web services technology.First,set data modeling,described the campus heterogeneous systems information to standard XML format,then realized the request,response and transmission of information through SOAP packaging and WSDL description,solved the difficult problem of inconsistent data formats in campus distributed environment,realized the communications of heterogeneous systems,realized resources sharing.
〔Key words〕XML;SOAP;WSDL;UDDI
現階段高校內部教學、科研、辦公、管理等各方面事務都逐漸從單純的手工、文檔管理方式向信息化、系統化管理發展。然而,在實現多個基于本地數據庫的信息管理系統的同時,出現了信息重復、資源浪費、交互困難的情況,隨之而來的還有信息不同步、形成資源孤島等問題。
以XML作為信息存儲和交換的格式,可以很好的解決校園中存在的“信息孤島”問題,實現不同系統之間的集成與交互以及異構數據庫間的數據共享。XML不僅提供具有意義的數據,也提供了驗證的方式(XML Schema),使得程序能輕易地獲得內容,并能夠徹底地完成內容數據和表達方式的分離。將XML作為標準的信息表示格式,同時利用基于XML的開放的數據接口和分布式數據管理能力,實現對跨平臺、各種異構數據庫的統一數據交換和管理,實現數據在全校部門、學院之間順暢的流通。數據交換的核心問題是信息的標準化,主要解決信息的可理解性問題,包括人和機器對信息的理解,最重要的是機器對信息的識別,并能根據數據進行自動處理。XML為信息的標準化提供了有力的工具。在校園信息平臺中,各部門、學院之間使用XML作為數據交換的統一格式,用XML統一表示來自不同數據源的數據,可以實現系統間的數據交換,實現信息共享[4]。
其次,還必須有一種方法來進行消息的傳遞。基于XML的簡單對象訪問協議SOAP可以和任何的傳輸協議聯合使用,可以方便地穿越防火墻,面向服務體系結構中的發布、查找和綁定操作都可以得到SOAP的支持。將SOAP+HTTP應用于校園分布式信息平臺中,實現對校園分布式環境中XML格式的數據的封裝和傳輸,進而實現部門之間的便利信息交互。另外,使用WSDL來描述Web服務,對服務的實現和接口進行標準化的定義,為部門、學院之間的服務調用提供具體的方法。
1 數據建模
在XML的項目中,首先應該創建標準的數據格式。為此我們首先要考慮在本校園分布式信息平臺的開發模塊中涉及到哪些數據,定義描述數據交換中所涉及事實的數據模型。具有高置信度的模型一旦被創建,數據模型便可以轉換成為schema,然后才能繼續開展以后的工作。
首先,讓我們對校園信息化建設中的“黨建”、“人事”信息進行數據分析。學校的“黨建”管理工作的目的在于管理全校黨員的黨建信息,其中的黨建信息涉及到很多數據項。通過走訪和調查,經過分析和整理,得到“黨建”管理模塊的數據邏輯結構,其中包括姓名、所在支部、申請入黨時間、黨校學習情況、入黨時間、轉正時間等數據項。同理,“人事”管理模塊的數據邏輯結構包括編號、姓名、性別、出生年月、參加工作時間、職稱、學歷等數據項,如圖1所示。

接下來,為了可以結構化地定義有關數據,需要對以上兩個模塊進行數據建模。一般來說,就是定義Schema文件,在定義了Schema后,所有的數據都將按照這個Schema來組織和檢查。XML Schema是一種控制文檔結構的方法,使用XML語法,具有XML的特點。作為XML語言的主要模塊,Schema對標識的標準化模式起著極其重要的作用。因為模式在發送者和接收者之間規定了強制性的協議,有利于文檔之間的信息交流,而且可以在不同的群體之間共享,使得在不同的應用程序間創建、管理和處理相同的文件變得容易,共享數據模式極大地簡化了XML詞匯的創建和維護,提高了數據的可靠性[5]。
在開發過程中,我們采用Axis這個Soap引擎來實現對數據的建模:
首先在服務提供方開發Java接口和類,然后使用Axis中的Java2WSDL工具從Java接口和類創建WSDL,WSDL中的types元素描述了數據的Schema。數據項信息體現在定義的Java類中,該類的編寫符合JavaBean的規范,簡單地說就是通過get/set方法來定義數據項。例如,組織部定義“黨建”模塊的Java類:
public class Dangjian implements java.io.Serializable{
private java.lang.String JPTime;∥定義“入黨時間”
……
public java.lang.String getJPTime(){
? return JPTime;}
public void setJPTime(java.lang.String JPTime){
? this.JPTime=JPTime;}
……}
同時,把方法的參數和返回值數據類型設為對象,比如提供一個接口用來發送短信息,那么希望接口的參數是一個消息對象,這個消息對象封裝了一條信息的所有內容包括發送者、接收者、發送時間、信息內容等等。因為如果把每個內容都做成一個參數,那這個接口的參數可能會非常的多,因此封裝成對象是很有必要的。Axis要求復雜類型對象的編寫必須符合JavaBean的規范,就是對象的屬性是通過get/set方法來訪問的。
創建的Java接口部分代碼如下:
public interface DangjianService extends java.rmi.Remote{
public dj7.Dangjian getDangjianInfo(java.lang.String in0);∥查詢單條記錄的方法
public boolean deleteDangjianInfo(java.lang.String in0);∥刪除記錄的方法
public dj7.Dangjian[] getAllDangjianInfo(java.lang.String in0);∥查詢多條記錄的方法
public boolean addDangjianInfo(java.lang.String[] in0);∥添加記錄的方法
public boolean modifyDangjianInfo(java.lang.String[] in0);∥修改記錄的方法
public int getRowCount(java.lang.String in0);∥返回記錄條數
}
用Java2WSDL工具從上述接口、類創建WSDL文件。生成的WSDL文檔的types元素是Dangjian這個JavaBean到WSDL的映射,它描述了Web服務與用戶之間交換的消息的所有數據類型,XML Schema是默認的類型系統。部分WSDL文檔:
上述Schema文件分別定義了Web Services環境中傳輸“黨建信息”“人事信息”時所要遵守的的格式。如:人事處的“人事信息”包含“姓名”、“職稱”、“學歷”等項,元素ZhiChen為string類型,可以為空……組織部的“黨員信息”包含“入黨時間”、“共青團推優時間”、“入黨證書編號”等項,元素JPTime為string類型,可以為空……人事處、組織部服務器端將包含調用結果的實例對象按照這個Schema文件的格式要求轉換成客戶端所要求的XML文檔,進而構造返回給客戶端的SOAP消息,完成服務的請求;客戶端可以根據這個Schema文件完成對響應SOAP消息的解析(具體通過WSDL中types元素映射生成的類來實現,該類實現了序列化接口)。
2 信息的傳輸
其次,是要實現將XML格式的數據通過SOAP進行傳輸。采用Axis引擎實現數據的SOAP傳輸,主要通過jaxrpc來實現。對于客戶端,主要使用Call類來完成調用Web服務,在客戶端的stub類中,設置一個org.apache.axis.client.Call對象來調用服務,實際上,服務的請求和響應都是靠Call類中的invoke()方法來實現的,在調用invoke()方法前,需要對Call的屬性進行設置,其中,setTargetEndpointAddress()方法設置了服務的endpoint,這個標志著服務地址的參數是從Locator類中傳來的,在本系統中的值為:http:∥222.196.35.143:8080/axis/services/DangjianService7,setOperationName()方法設置了服務操作名稱及其方法。invoke()方法把Call對象轉換成XML SOAP請求,并把請求發送給endpoint,當返回應答后,invoke()方法返回一個java.lang.Object對象,這個對象中包含的或者是客戶端需要得到的服務器應答,或者是錯誤信息。服務器端響應過程如圖2所示。

在Axis處理SOAP消息時,會涉及到序列化或反序列化問題。序列化指的是把一個Java對象寫到一個XML文檔上的過程;反序列化則指從一個XML文檔中讀取一個對象定義并基于該定義創建一個Java對象的過程。Axis提供了許多類來實現內建支持類型的序列化和反序列化,用Java的基本數據類型及其對象形式作為方法參數時是無縫的,不需要考慮序列化和反序列化的問題。Call對象的registerTypeMapping()方法起到為序列化/反序列化器注冊類型映射信息的作用。
實現了SOAP封裝后,信息以一個標準的xml格式在校園分布式環境中進行傳輸。同理,其他部門如科技處、學生處等也能制訂自己的模式文件,以XML格式表述信息,解決數據格式不一致的難題和異構系統之間的通訊,從而使不同應用系統之間交換數據變得容易,實現校園分布式環境下的資源共享。符合模式文件,含有黨員信息的XML示例文件如下:
?
?
?
?
3 服務的發布和發現
最后,我們需要讓所設計的Web服務能夠讓其他部門所找到,所以要應用一些方法來讓服務開發者發布服務,讓服務的使用者發現Web服務,UDDI確定了一種機制,使得校園分布式環境下的Web服務提供者可以為其Web服務作廣告,也使得Web服務調用者能找到其感興趣的Web服務。
參考文獻
[1]張云濤,溫浩宇.應用Web Services降低供應鏈信息系統總擁有成本[J].現代情報,2008,(7):53-55.
[2]柳巧玲,叢秋實,等.基于Web服務的業務流程管理集成應用研究[J].情報雜志,2007,(2):51-52.
[3]Fu X,Bultan T,Su J.WSAT:A Tool for Formal Analysis of Web Services[C].Proceedings of the 16th International Conference on Computer Aided Verification,2004.7.
[4]孫霞.基于XML的數字化校園信息發布與交換技術研究[D].武漢:武漢理工大學,2005:4-26.
[5]李益紅,王娟.XML及其在電子商務中的應用[J].福建電腦,2004,(3):34.