<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    菠蘿三國

    大江東去,浪淘盡...
    隨筆 - 34, 文章 - 47, 評(píng)論 - 22, 引用 - 0
    數(shù)據(jù)加載中……

    用DataHandler來實(shí)現(xiàn)一個(gè)帶附件的soap請(qǐng)求的web services

    1.為了使其對(duì)DataHandler的支持。除了配置好axis環(huán)境之外,還要在sun的網(wǎng)站上下載jaf 1-0-2.jar包,并把它注冊(cè)到CLASS_PATH中。
    2.編寫服務(wù)程序(.java),既支持文本文件,也支持二進(jìn)制文件。
    package test.gaolong;

    import java.io.*;
    import javax.activation.*;

    public class FileService{
      public static String Repository="./files/";
      public String putFile(DataHandler dh,String name){
       if(name==null)
           name="test.tmp";
           System.out.println("test");
       try{
        File dir=new File(Repository);
        if(!dir.exists()){
             dir.mkdir(); System.out.println("makedir"+"test");
          }
        InputStream input=dh.getInputStream();
        FileOutputStream fos=new FileOutputStream(new File(dir,name));
        System.out.println("test");
        byte[] buffer=new byte[1024*4];
        int n=0;
        while((n=input.read(buffer))!=-1){
         fos.write(buffer,0,n);
         System.out.println(buffer);
        }
        System.out.println("test");
        input.close();
        fos.close();
       }catch(IOException e){
        e.printStackTrace();
       }
      return name+"send OK";
     }
     public DataHandler getFile(String name){
      File dir=new File(Repository);
      if(!dir.exists())
      dir.mkdir();
      File data=new File(dir,name);
      if(data.exists())
             return new DataHandler(new FileDataSource(data));
      else
             return null;
      }
    }
    3。寫deploy.wsdd部署描述文件如下:
    <deployment xmlns="http://localhost:7001/axis/services/FileService" >
      <service name="FileService" provider="java:RPC">
        <parameter name="className" value="test.gaolong.FileService"/>
        <parameter name="allowedMethods" value="*"/>
        <parameter name="allowedRoles" value="user"/>
        <operation name="getFile" returnQName="returnqname" returnType="ns1:DataHandler" xmlns:SchemaNS="      <parameter name="name" type="SchemaNS:string"/>
        </operation>
         <operation name="putFile" returnQName="returnqname" returnType="ns1:DataHandler" xmlns:SchemaNS="
          <parameter name="dh" type="ns1:DataHandler"/>
          <parameter name="name" type="SchemaNS:string"/>
        </operation>
        <typeMapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory" type="java:javax.activation.DataHandler" qname="ns1:DataHandler" serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory" encodingStyle="
    http://schemas.xmlsoap.org/soap/encoding/%22/%3E//注意見下面的。
      </service>
    </deployment>

    注:對(duì)于soap1.2而言,要使用上面的<typeMaping>,而對(duì)于soap1.1而言,則有一點(diǎn)區(qū)別如下:
     <typeMapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory" lanuageSpecificType="java:javax.activation.DataHandler" qname="ns1:DataHandler" serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/%22/>
    4。啟動(dòng)服務(wù)器,用java org.apache.axis.client.AdminClient  -p 7001  deploy.wsdd部署webservices即可訪問。
    5。編寫客戶端應(yīng)用訪問程序如下:
     import javax.xml.rpc.ParameterMode;
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
    import javax.xml.namespace.QName;
    import org.apache.axis.soap.SOAP11Constants;
    import java.net.URL;
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import org.apache.axis.encoding.ser.*;
    public class ServiceClient{
     public static void main(String[] args) throws Exception{
      String filename="HelloWorld.java";
      DataHandler dh=new DataHandler(new FileDataSource(filename));
      String endpoint="  String name="gaolong1";
      Service service=new Service();
      Call call=(Call) service.createCall();
         call.setTargetEndpointAddress(new java.net.URL(endpoint));
         call.setOperationName(new QName("
            QName qnameattachment=new QName("FileService","DataHandler");
            call.registerTypeMapping(dh.getClass(),qnameattachment,JAFDataHandlerSerializerFactory.class,JAFDataHandlerDeserializerFactory.class);
            call.addParameter("s1",qnameattachment,ParameterMode.IN);
            call.addParameter("s2",XMLType.XSD_STRING,ParameterMode.IN);
      call.setReturnType(XMLType.XSD_STRING);//XMLType.XSD_STRING);//用Class.forName("java.lang.String")來獲取java類型
      String ret=(String)call.invoke(new Object[] {dh,"HelloWorld.java"});
      System.out.println(ret);
     }
    }
    6。成功執(zhí)行客戶端應(yīng)用程序,可以找到上傳文件。
    請(qǐng)求的soap消息:
    POST /axis/services/FileService HTTP/1.0
    Content-Type: multipart/related; type="text/xml"; start="<3165C8664597DC7EF29D5BFAC8972562>";  boundary="----=_Part_0_21866740.1141202759484"
    Accept: application/soap+xml, application/dime, multipart/related, text/*
    User-Agent: Axis/1.2.1
    Host: localhost:7003
    Cache-Control: no-cache
    Pragma: no-cache
    SOAPAction: ""
    Content-Length: 1050


    ------=_Part_0_21866740.1141202759484
    Content-Type: text/xml; charset=UTF-8
    Content-Transfer-Encoding: binary
    Content-Id: <3165C8664597DC7EF29D5BFAC8972562>

    <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2001/XMLSchema-instance%22%3E%3Csoapenv:Body%3E%3Cns1:putFile soapenv:encodingStyle="------=_Part_0_21866740.1141202759484
    Content-Type: application/octet-stream
    Content-Transfer-Encoding: binary
    Content-Id: <03D9C1D3A9E0788D274934C3ABD52811>

    public class HelloWorld{
      public String sayHello(String name){
             return "Hello"+name;
             }
          }
    ------=_Part_0_21866740.1141202759484--
    上傳后的文件的位置:/*在該目錄下創(chuàng)建文件夾:D:\bea\user_projects\domains\mydomain\files,并把相應(yīng)的文件存入該目錄下*/
    7.另一種基于java mail的帶附件的傳輸,是基于xmlDOM+servlet可以來實(shí)現(xiàn),只是比較底層而已。

    posted on 2007-08-06 22:40 菠蘿 閱讀(1992) 評(píng)論(2)  編輯  收藏 所屬分類: AXIS

    評(píng)論

    # re: 用DataHandler來實(shí)現(xiàn)一個(gè)帶附件的soap請(qǐng)求的web services [未登錄]  回復(fù)  更多評(píng)論   

    dddd
    2012-09-17 17:56 | dd

    # re: 用DataHandler來實(shí)現(xiàn)一個(gè)帶附件的soap請(qǐng)求的web services [未登錄]  回復(fù)  更多評(píng)論   

    rrrrrrrr
    2012-09-17 17:57 | dd
    主站蜘蛛池模板: 国产亚洲av片在线观看16女人| 亚洲一卡二卡三卡四卡无卡麻豆| 精品无码无人网站免费视频| 国产成人精品日本亚洲专| 无码不卡亚洲成?人片| a级片免费在线播放| 亚洲一区中文字幕| 久久亚洲中文字幕精品一区四| 91短视频免费在线观看| 日本高清免费中文在线看| 91亚洲va在线天线va天堂va国产| 免费看美女被靠到爽| 视频免费在线观看| 丰满亚洲大尺度无码无码专线| 精品久久香蕉国产线看观看亚洲| 永久免费av无码网站韩国毛片| 日韩在线观看视频免费| 亚洲欧洲日韩综合| 在线观看亚洲精品国产| 中文字幕影片免费在线观看| 手机看片国产免费永久| 久久亚洲AV成人无码国产最大| 亚洲AV无码日韩AV无码导航| 成人亚洲网站www在线观看| h视频在线免费看| 中国在线观看免费的www| 亚洲gay片在线gv网站| 亚洲卡一卡2卡三卡4卡无卡三| 亚洲AV无码乱码精品国产| 中文毛片无遮挡高潮免费| a级男女仿爱免费视频| 美女露100%胸无遮挡免费观看| 亚洲国产成人久久综合一区| 亚洲精品卡2卡3卡4卡5卡区| 免费人成在线观看网站品爱网日本 | 国语成本人片免费av无码| 99re6在线视频精品免费| 美女扒开屁股让男人桶爽免费| 亚洲区视频在线观看| 亚洲国产精品自在在线观看| 91麻豆精品国产自产在线观看亚洲|