最近項目中需要使用Web Service來傳輸文件,研究了下Axis中對文件傳輸的支持機制,現寫在博客裏,一方面是作爲備忘,二來希望對用到的人有作幫助。
Axis中主要使用DataHandler來提供對文件的讀入操作,DataHandler的getInputStream方法可以得到從客戶端傳入的文件流,DataHandler的作用主要是對客戶端傳輸的文件進行序列化操作。
下面來看Server端代碼:
server-config.wsdd
看了deploy配置文件後,大家也許會問,DataHandler就是用來作文件序列化操作的,那爲什麼在wsdd文件中還要配置文件序列化/反序列化器呢?
這是因爲DataHandler本身是需要序列化和反序列化的,所以必須要用Axis提供的序列化/反序列化器JAFDataHandlerSerializerFactory和JAFDataHandlerDeserializerFactory來進行序列化/反序列化操作。
Client端代碼:
當運行完Client代碼後,會在Console中顯示出:
Success file saved on server, at: E:/Eclipse3.4.2/readme.txt
仔細的讀者可以會發現,這個在服務器上存放文件的路徑比較奇怪,怎麼會是Eclipse的工作路徑,而不是Tomcat服務器的工作路徑呢?按理說應該存儲在服務器的路徑下,經過一番試驗後發現,影響存放位置的是在Eclipse中服務器的Working directory路徑,它默認爲Eclipse的安裝路徑。這個值大家可以點擊服務器屬性頁--> "Open launch configuration" --> "Arguments“ --> "Working directory"進行修改。見下圖。
OK,今天就寫到這吧,該睡覺咯,呵呵~~