Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          版權聲明:原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://zhangjunhd.51cto.com/113473/26960
          本文介紹如何使用Axis2傳遞附件。
          author: ZJ 07-5-7
           
          1.工作環境
          IDE: Eclipse 3.1.2
          jdk: jdk1.5.0_04
          Tomcat: apache-tomcat-5.0.28
          AXIS2:1.0(war版本和bin版本)
           
          2.實現
             Eclipse新建一個動態web工程,在WEB-INF"lib下加入axis2所需的jar包。
          本例的是一個系統的用戶上傳下載圖片格式文件的例子,每次上傳出攜帶附件外,還包括文件名, 文件類型。此webservice實現的2個功能就是upload, download.
            AXIS2webservice發布的時候是打包成xxx.aar發布的,xxx.aar展開后的目錄結構為
           --
              --META-INF
                 services.xml
              --包含server端實現的class( 目錄跟package是一樣的結構)
           
          3.服務器端FileTransferServer.java
          package sample;
           
          import org.apache.axiom.attachments.utils.IOUtils;
          import org.apache.axiom.om.OMAbstractFactory;
          import org.apache.axiom.om.OMElement;
          import org.apache.axiom.om.OMFactory;
          import org.apache.axiom.om.OMNamespace;
          import org.apache.axiom.om.OMText;
          import org.apache.axis2.AxisFault;
           
          import java.io.File;
          import java.io.FileOutputStream;
          import java.io.InputStream;
           
          import java.util.Iterator;
           
          import javax.activation.DataHandler;
          import javax.activation.FileDataSource;
           
          public class FileTransferServer {
                 public static final String TMP_PATH = "D:/temp";
           
                 public OMElement upload(OMElement element) throws Exception {
                        OMElement _fileContent = null;//文件內容
                        OMElement _fileName = null;//文件名
                        OMElement _fileType = null;//文件類型
                        System.out.println("The element for upload: " + element);
                        for (Iterator _iterator = element.getChildElements(); _iterator
                                      .hasNext();) {
                               OMElement _ele = (OMElement) _iterator.next();
                               if (_ele.getLocalName().equalsIgnoreCase("fileContent")) {
                                      _fileContent = _ele;
                               }
                               if (_ele.getLocalName().equalsIgnoreCase("fileName")) {
                                      _fileName = _ele;
                               }
                               if (_ele.getLocalName().equalsIgnoreCase("fileType")) {
                                      _fileType = _ele;
                               }
                        }
           
                        if (_fileContent == null || _fileType == null) {
                               throw new AxisFault("Either Image or FileName is null");
                        }
           
                        OMText binaryNode = (OMText) _fileContent.getFirstOMChild();
                        String fileName = _fileName.getText();
                        String fileType = _fileType.getText();
                        String storeDir = TMP_PATH + "/" + "tempTest";
                        File dir = new File(storeDir);
                        if (!dir.exists()) {
                               dir.mkdir();
                        }
                        String filePath = storeDir + "/" + fileName + "." + fileType;
                        File uploadFile = new File(filePath);
                        if (uploadFile.exists()) {
                               filePath = storeDir + "/" + fileName + "(1)" + "." + fileType;
                               uploadFile = new File(filePath);
                        }
           
                        // Extracting the data and saving
                        DataHandler actualDH;
                        actualDH = (DataHandler) binaryNode.getDataHandler();
           
                        FileOutputStream imageOutStream = new FileOutputStream(uploadFile);
                        InputStream is = actualDH.getInputStream();
                        imageOutStream.write(IOUtils.getStreamAsByteArray(is));
                        // setting response
                        OMFactory fac = OMAbstractFactory.getOMFactory();
                        OMNamespace ns = fac.createOMNamespace("http://example.org/filedata",
                                      "fd");
                        OMElement ele = fac.createOMElement("response", ns);
                        ele.setText("true");
                        return ele;
                 }
           
                 public OMElement download(OMElement element) throws Exception {
                        System.out.println("The element for download: " + element);
                        OMElement _userName = null;
                        OMElement _fileName = null;
                        OMElement _fileType = null;
                        for (Iterator _iterator = element.getChildElements(); _iterator
                                      .hasNext();) {
                               OMElement _ele = (OMElement) _iterator.next();
                               if (_ele.getLocalName().equalsIgnoreCase("userName")) {
                                      _userName = _ele;
                               }
                               if (_ele.getLocalName().equalsIgnoreCase("fileName")) {
                                      _fileName = _ele;
                               }
                               if (_ele.getLocalName().equalsIgnoreCase("fileType")) {
                                      _fileType = _ele;
                               }
                        }
                        String userName = _userName.getText();
                        String fileName = _fileName.getText();
                        String fileType = _fileType.getText();
                        String filePath = TMP_PATH + "/" + userName + "/" + fileName + "."
                                      + fileType;
                        System.out.println("The filePath for download: " + filePath);
                        FileDataSource dataSource = new FileDataSource(filePath);
                        DataHandler expectedDH = new DataHandler(dataSource);
                        OMFactory fac = OMAbstractFactory.getOMFactory();
                        OMNamespace ns = fac.createOMNamespace("http://example.org/filedata",
                                      "fd");
                        OMText textData = fac.createOMText(expectedDH, true);
                        OMElement ele = fac.createOMElement("response", ns);
                        ele.addChild(textData);
                        return ele;
                 }
          }
           
          4.services.xml
             
                  This is a sample Web Service with two operations,echo and ping.
             
              sample.FileTransferServer
             
                  urn:upload
                 
             
               
                  urn:download
                 
             
           
          將這兩個文件打包并部署到Tomcat上(略)。
           
          5.測試
          FileTransferClient.java
          package sample;
           
          import java.io.File;
          import java.io.FileOutputStream;
          import java.io.InputStream;
           
          import javax.activation.DataHandler;
          import javax.activation.FileDataSource;
           
          import org.apache.axiom.attachments.utils.IOUtils;
          import org.apache.axiom.om.OMAbstractFactory;
          import org.apache.axiom.om.OMElement;
          import org.apache.axiom.om.OMFactory;
          import org.apache.axiom.om.OMNamespace;
          import org.apache.axiom.om.OMText;
          import org.apache.axiom.soap.SOAP11Constants;
          import org.apache.axis2.AxisFault;
          import org.apache.axis2.Constants;
          import org.apache.axis2.addressing.EndpointReference;
          import org.apache.axis2.client.Options;
          import org.apache.axis2.client.ServiceClient;
           
          public class FileTransferClient {
             private static EndpointReference targetEPR =
           new EndpointReference("http://127.0.0.1:8080/axis2/services/FileOperation");
            
             public static boolean upload(String fileName, File file, String fileType) {
               try {
                OMElement data = buildUploadEnvelope(fileName, file, fileType);
                Options options = buildOptions();
                ServiceClient sender = new ServiceClient();
                sender.setOptions(options);
                System.out.println("The data in method upload: "+data);
                OMElement ome = sender.sendReceive(data);
                System.out.println("Convert the data to element in method upload: "+ome);
                String b = ome.getText();
                return Boolean.parseBoolean(b);
               }
               catch(Exception e) {
                 e.printStackTrace();
               }
               return false;
             }
            
             public static boolean download(String userName, String fileName, String fileType) {
               try {
                 OMElement data = buildDownloadEnvelope(userName, fileName, fileType);
                 Options options = buildOptions();
                 ServiceClient sender = new ServiceClient();
                 sender.setOptions(options);
                 System.out.println("The data in method download: "+data);
                 OMElement ome = sender.sendReceive(data);
                 System.out.println("Convert the data to element in method download: "+ome);
                 OMText binaryNode = (OMText) ome.getFirstOMChild();
                 binaryNode.setOptimize(true); //必須加此句,否則會出現ContentID is null的異常!
                 DataHandler actualDH = (DataHandler) binaryNode.getDataHandler();
                 FileOutputStream imageOutStream = new FileOutputStream("D:/userTemp/xx.gif");
                 InputStream is = actualDH.getInputStream();
                 imageOutStream.write(IOUtils.getStreamAsByteArray(is));
                 return true;
                }
                catch(Exception e) {
                  e.printStackTrace();
                }
               return false;
             }
            
             private static OMElement buildUploadEnvelope(String fileName, File file, String fileType) {
               DataHandler expectedDH;
               OMFactory fac = OMAbstractFactory.getOMFactory();
               OMNamespace omNs = fac.createOMNamespace("http://example.org/filedata", "fd");
               OMElement data = fac.createOMElement("upload", omNs);
               OMElement fileContent = fac.createOMElement("fileContent", omNs);
               FileDataSource dataSource = new FileDataSource(file);
               expectedDH = new DataHandler(dataSource);
               OMText textData = fac.createOMText(expectedDH, true);
               fileContent.addChild(textData);
               OMElement _fileName = fac.createOMElement("fileName", omNs);
               _fileName.setText(fileName);
               OMElement _fileType = fac.createOMElement("fileType", omNs);
               _fileType.setText(fileType);
               data.addChild(_fileName);
               data.addChild(_fileType);
               data.addChild(fileContent);
               return data;
          posted on 2008-07-10 16:54 禮物 閱讀(1444) 評論(0)  編輯  收藏 所屬分類: web service
          主站蜘蛛池模板: 屏边| 兴城市| 镇雄县| 滕州市| 阿巴嘎旗| 特克斯县| 忻城县| 濮阳市| 娱乐| 巨野县| 综艺| 保康县| 汉川市| 贡觉县| 镇远县| 增城市| 芦山县| 婺源县| 定襄县| 平利县| 随州市| 岱山县| 阜新市| 大石桥市| 喀什市| 会理县| 泗洪县| 台北县| 中牟县| 建水县| 兴国县| 江川县| 南平市| 镇远县| 房产| 临夏市| 基隆市| 太保市| 广西| 高清| 台北县|