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

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

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

    Terry.Li-彬

    虛其心,可解天下之問(wèn);專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks
    我的代碼如下:
    這是發(fā)布到服務(wù)器上面的代碼:
    package   com;
    import   java.util.*;
    public   class   ArrayListService   {
    public   ArrayList   myAL(){
    ArrayList <String>   myAL   =   new   ArrayList <String> ();
    String   str=new   String( "這是一個(gè)WebService   Of   ArrayList   ! ");
    myAL.add(str);
    return   myAL;
    }}

    客戶端的代碼:
    package   com;
    import   org.apache.axis.client.Call;
    import   org.apache.axis.client.Service;
    import   java.util.*;

    public   class   ArrayListClient   {
    public   static   void   main(String[]   args)   {    
    try   {        
    String   wsdlUrl   =   "http://127.0.0.1:8080/axis/services/ArrayListService?wsdl ";        
         
    Service   service   =   new   Service();        
    Call   call   =   null;        
    call   =   (Call)   service.createCall();                

    call.setOperationName( "myAL ");        
    call.setTargetEndpointAddress(new   java.net.URL(wsdlUrl));          
    //ArrayList   al=(ArrayList)call.invoke(new   Object[]   {});
    call.invoke(new   Object[]   {});
    System.out.println( "請(qǐng)求信息: ");
    call.getMessageContext().getRequestMessage().writeTo(System.out);
    System.out.println( " ");
    System.out.println( "響應(yīng)信息: ");
    call.getMessageContext().getResponseMessage().writeTo(System.out);
    System.out.println( " ");
    }  
    catch   (Exception   ex)   {         ex.printStackTrace();         }}}
    打印出來(lái)的請(qǐng)求和響應(yīng)消息也正常。
    可是服務(wù)器返回的是一個(gè)ArrayList,當(dāng)用這一句時(shí)“ArrayList   al=(ArrayList)call.invoke(new   Object[]   {});”就報(bào)錯(cuò):
    java.lang.ClassCastException:   [Ljava.lang.Object;
    at   com.ArrayListClient.main(ArrayListClient.java:17)
    這是什么原因啊,如何把響應(yīng)消息里面的數(shù)據(jù)返回成ArrayList呢?

    注:server-config.wsdd
    <service   name= "ArrayListService "   provider= "java:RPC ">    
        <parameter   name= "className "   value= "com.ArrayListService "/>
        <parameter   name= "allowedMethods "   value= "* "/>
        <requestFlow>
        <handler   type= "loging "/>
        </requestFlow>
        <responseFlow>
        <handler   type= "loging "/>
        </responseFlow>
      </service>

    這是服務(wù)響應(yīng)消息:
    <?xml   version= "1.0 "   encoding= "utf-8 "?>
    <soapenv:Envelope   xmlns:soapenv= "http://schemas.xmlsoap.org/soap/envelope/ "                     xmlns:xsd= "http://www.w3.org/2001/XMLSchema "  
                      xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance ">
    <soapenv:Body>
    <myALResponse   soapenv:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/ ">
    <myALReturn   href= "#id0 "/>
    </myALResponse>
    <multiRef   id= "id0 "   soapenc:root= "0 "   soapenv:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/ "                       soapenc:arrayType= "xsd:anyType[1] "   xsi:type= "soapenc:Array "                       xmlns:soapenc= "http://schemas.xmlsoap.org/soap/encoding/ ">
    <multiRef   xsi:type= "soapenc:string "> 这是一个WebService   Of   ArrayList   ! </multiRef>
    </multiRef>
    </soapenv:Body>
    </soapenv:Envelope>
    20 
    發(fā)表于:2007-01-10 17:29:401樓 得分:0
    arrayList   ,victor,set,map傳輸在j2ee   web   service標(biāo)準(zhǔn)里是有限制的   ,改用數(shù)組

    初步搞定:(服務(wù)如何發(fā)布就不詳細(xì)說(shuō)了,網(wǎng)上很多)
    java程序用   Axis做服務(wù)時(shí)自定義類實(shí)體的傳送

    核心代碼:
    QName   qn   =   new   QName( "urn:BeanService ", "MyArryBean ");                                          
                            call.registerTypeMapping(MyArryBean.class,   qn,
                            new   BeanSerializerFactory(MyArryBean.class,   qn),
                            new   BeanDeserializerFactory(MyArryBean.class,   qn));
    這是在客戶機(jī)端的代碼,用于注冊(cè)服務(wù)器上面的自定義類。然后就可以在客戶端實(shí)例化這個(gè)類來(lái)使用。(如果MyArryBean   與服

    務(wù)類不在同一個(gè)包里面,即服務(wù)需要用   import   來(lái)引用的話,這時(shí)就要用到   :包名.MyArryBean.class)

    在Axis服務(wù)端,注冊(cè)自定義對(duì)象的序列化/反序列化器
    服務(wù)器的server-config.wsdd:
    ...
    <service   name= "ArrayListService "   provider= "java:RPC ">    
        <parameter   name= "className "   value= "com.ArrayListService "/>
        <parameter   name= "allowedMethods "   value= "* "/>
        <beanMapping   languageSpecificType= "java:com.MyArryBean "   qname= "ns:MyArryBean "   xmlns:ns= "urn:BeanService "/>
        <requestFlow>
        <handler   type= "loging "/>
        </requestFlow>
        <responseFlow>
        <handler   type= "loging "/>
        </responseFlow>
      </service>
    ...

    服務(wù)器上面的自定義類(這個(gè)類要被傳遞給客戶端):MyArryBean.java
    package   com;
    import   java.io.Serializable;

    public   class   MyArryBean   implements   Serializable{
    private   static   final   long   serialVersionUID   =   -6414428095965735488L;
    private   String   str= " ";
    public   MyArryBean(){}
    public   void   setBean(String   str){this.str=str;}
    public   String   getBean(){return   this.str;}
    }

    服務(wù)器上面的服務(wù)類:ArrayListService.java
    package   com;

    public   class   ArrayListService   {
    //這里返回的是一個(gè)int數(shù)組
    public   int[]   myAL(){
    int   myAL[]   =   new   int[5];
    for(   int   i=0;i <5;i++){
    myAL[i]=i;
    }
    return   myAL;
    }
    //這里返回的是一個(gè)自定義對(duì)象
    public   MyArryBean   myAB(String   myStr){
    MyArryBean   _myArryB=new   MyArryBean();
    _myArryB.setBean(myStr);
    return   _myArryB;
    }
    }  

    客戶端代碼:ArrayListClient.java
    package   com;
    import   org.apache.axis.client.Call;
    import   org.apache.axis.client.Service;
    import   org.apache.axis.encoding.ser.BeanDeserializerFactory;
    import   org.apache.axis.encoding.ser.BeanSerializerFactory;
    import   javax.xml.namespace.QName;

    public   class   ArrayListClient   {
    public   static   void   main(String[]   args)   {    
    try   {        
    String   wsdlUrl   =   "http://127.0.0.1:8080/axis/services/ArrayListService?wsdl ";        
    String   nameSpaceUri   =   "http://localhost:8080/axis/services/ArrayListService ";

    Service   service   =   new   Service();        
    Call   call   =   null;        
    call   =   (Call)   service.createCall();        

                            //注冊(cè)MyArryBean的序列化類型
                            QName   qn   =   new   QName( "urn:BeanService ", "MyArryBean ");                                          
                            call.registerTypeMapping(MyArryBean.class,   qn,
                            new   BeanSerializerFactory(MyArryBean.class,   qn),
                            new   BeanDeserializerFactory(MyArryBean.class,   qn));
                           
                            //這里取得的是一個(gè)服務(wù)器int數(shù)組
    call.setOperationName( "myAL ");        
    call.setTargetEndpointAddress(new   java.net.URL(wsdlUrl));          
    int[]   _resp   =   (int[])call.invoke(new   java.lang.Object[]   {});
            for   (int   i=0;i <5;i++){
    System.out.println( "int數(shù)組: "+_resp[i]);
    }
     
                            //這里取得的是一個(gè)服務(wù)器自定義對(duì)象
            //這里實(shí)例化服務(wù)器上面的映射的自定義類
            MyArryBean   CmyAB=new   MyArryBean();
            CmyAB.setBean( "這是的客戶端實(shí)例化服務(wù)器的類!yes ");
            System.out.println( "return   value   is   "   +   CmyAB.getBean());
            QName   getmyABQn   =   new   QName(nameSpaceUri,   "myAB ");
            call.setOperationName(getmyABQn);                                          
                            call.setTargetEndpointAddress(new   java.net.URL(wsdlUrl));
                            CmyAB   =   (MyArryBean)   call.invoke(new   Object[]   {   "這是調(diào)用服務(wù)器的類!web "   });
                            System.out.println( "return   value   is   "   +   CmyAB.getBean());  
           
            System.out.println( "請(qǐng)求信息: ");
    call.getMessageContext().getRequestMessage().writeTo(System.out);
    System.out.println( " ");
    System.out.println( "響應(yīng)信息: ");
    call.getMessageContext().getResponseMessage().writeTo(System.out);
    System.out.println( " ");
    }  
    catch   (Exception   ex)   {         ex.printStackTrace();         }}}


    運(yùn)行結(jié)果:

    int數(shù)組:0
    int數(shù)組:1
    int數(shù)組:2
    int數(shù)組:3
    int數(shù)組:4
    return   value   is   這是的客戶端實(shí)例化服務(wù)器的類!yes
    return   value   is   這是調(diào)用服務(wù)器的類!web
    請(qǐng)求信息:
    <?xml   version= "1.0 "   encoding= "UTF-8 "?>
      <soapenv:Envelope   xmlns:soapenv= "http://schemas.xmlsoap.org/soap/envelope/ "                                                                          

      xmlns:xsd= "http://www.w3.org/2001/XMLSchema "  
                                          xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance ">
        <soapenv:Body>
          <ns1:myAB   soapenv:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/ "                            

    xmlns:ns1= "http://localhost:8080/axis/services/ArrayListService ">
            <ns1:arg0   xsi:type= "soapenc:string "   xmlns:soapenc= "http://schemas.xmlsoap.org/soap/encoding/ ">
              这是调用服务器的类!web
            </ns1:arg0>
          </ns1:myAB>
        </soapenv:Body>
      </soapenv:Envelope>
    響應(yīng)信息:
    <?xml   version= "1.0 "   encoding= "utf-8 "?>
    <soapenv:Envelope   xmlns:soapenv= "http://schemas.xmlsoap.org/soap/envelope/ "                                      

    xmlns:xsd= "http://www.w3.org/2001/XMLSchema "  
                                        xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance ">
      <soapenv:Body>
        <ns1:myABResponse   soapenv:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/ "                                          

    xmlns:ns1= "http://localhost:8080/axis/services/ArrayListService ">
          <myABReturn   href= "#id0 "/>
        </ns1:myABResponse>
        <multiRef   id= "id0 "   soapenc:root= "0 "   soapenv:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/ "                    

          xsi:type= "ns2:MyArryBean "   xmlns:soapenc= "http://schemas.xmlsoap.org/soap/encoding/ "                          

    xmlns:ns2= "urn:BeanService ">
          <bean   xsi:type= "soapenc:string ">
            这是调用服务器的类!web
          </bean>
        </multiRef>
      </soapenv:Body>
    </soapenv:Envelope>

    發(fā)表于:2007-01-19 16:48:182樓 得分:0
    正解:
    這一版沒(méi)有把它寫(xiě)成服務(wù)\客戶端的形式

    package   com;
    import   java.io.ByteArrayInputStream;
    import   java.io.ByteArrayOutputStream;
    import   java.io.IOException;
    import   java.io.ObjectInputStream;
    import   java.io.ObjectOutputStream;
    import   java.io.Serializable;
    import   java.util.*;

    public   class   ArrayListSerializ   implements   Serializable{
    /**
      *   此例是一個(gè)序列化/反序列化的方法   :
      *  
      *   主要思想是把一個(gè)對(duì)象寫(xiě)入對(duì)象輸出流,然后把這個(gè)流里面的數(shù)據(jù)導(dǎo)入字節(jié)數(shù)組輸出流
      *   再把字節(jié)數(shù)組輸出流導(dǎo)入到字節(jié)數(shù)組。這時(shí),由于byte[]數(shù)組是從ObjectOutputStream之后得來(lái)的,
      *   那么是不可以new   String(buff)的,因?yàn)槠渲邪瞬豢梢?jiàn)字符,根本不是一個(gè)字符串。
      *   只能用sun.misc.BASE64Encoder把它翻譯成字符串形式。
      *   至此,這就完成了序列化成字符串行式的過(guò)程
      *  
      *   再通過(guò)sun.misc.BASE64Decoder().decodeBuffer把字符串轉(zhuǎn)換成一個(gè)byte[],
      *   然后通過(guò)其反思路完成反序列化過(guò)程
      */
    private   static   final   long   serialVersionUID   =   1L;
    private   static   void   myArrayListSerializer()
    {
    ArrayList <String>   myAL=new   ArrayList <String> ();
    myAL.add( "This   is   a   serial   programme.author:   張正明 ");
    System.out.println( "ArrayList 's   content:   "+myAL.get(0));
    //序列化使用的輸出流
    ObjectOutputStream   OOS=null;
    //序列化后數(shù)據(jù)流給ByteArrayOutputStream   來(lái)保存。
    //ByteArrayOutputStream   可轉(zhuǎn)成字符串或字節(jié)數(shù)組
    ByteArrayOutputStream   BAOS=new   ByteArrayOutputStream();
    //ByteArrayInputStream   可接收一個(gè)字節(jié)數(shù)組 "byte[] "。供反序列化做參數(shù)
    ByteArrayInputStream   BAIS=null;
    //反序列化使用的輸入流
    ObjectInputStream   OIS=null;
    try   {
    OOS=new   ObjectOutputStream(BAOS);
    OOS.writeObject(myAL);
    byte[]   buff=BAOS.toByteArray();

      /*由于byte[]數(shù)組是從ObjectOutputStream之后得來(lái)的,
        *那么是不可以new   String(buff)的,因?yàn)槠渲邪瞬豢梢?jiàn)字符,根本不是一個(gè)字符串
        */
    System.out.println( "序列化成一個(gè)byte[]的字符串形式   : "+buff);
    //轉(zhuǎn)換成字符串
    sun.misc.BASE64Encoder   encoder   =   new   sun.misc.BASE64Encoder();
    String   Sstr   =   encoder.encode(buff);
    System.out.println( "序列化成一個(gè)字符串: "+Sstr);
    System.out.println( "檢查序列化成一個(gè)字符串和序列化成一個(gè)byte[]是否為同一個(gè)內(nèi)容: "+
    Arrays.equals(buff,   new   sun.misc.BASE64Decoder().decodeBuffer(Sstr)));
    OOS.close();

                            //   把字符串轉(zhuǎn)成一個(gè)byte[]
    byte[]   DSbuff=new   sun.misc.BASE64Decoder().decodeBuffer(Sstr);
    System.out.println( "反序列化成一個(gè)byte[]字符串形式   : "+DSbuff);
    //實(shí)現(xiàn)反序列化
    BAIS=new   ByteArrayInputStream(DSbuff);
    OIS=new   ObjectInputStream(BAIS);
    ArrayList   c=(ArrayList)(OIS.readObject());
    System.out.println( "反序列化后取提ArrayList的數(shù)據(jù):   "+c.get(0));
    OIS.close();
    }  
    catch   (IOException   e)   {e.printStackTrace();}
    catch   (Exception   ex)   {System.out.println( "序列化時(shí)產(chǎn)生錯(cuò)誤 ");}
    }
    public   static   void   main(String[]   args){
    myArrayListSerializer();
    }
    }
    posted on 2007-11-24 14:41 禮物 閱讀(3451) 評(píng)論(0)  編輯  收藏 所屬分類: webservice
    主站蜘蛛池模板: 亚洲国产综合久久天堂| 国产亚洲视频在线观看| 中文字幕精品无码亚洲字| 动漫黄网站免费永久在线观看 | 成全视频高清免费观看电视剧| 亚洲色欲啪啪久久WWW综合网| 久久亚洲国产成人亚| 亚洲精品无码久久久久AV麻豆| 91免费资源网站入口| 亚洲欧洲免费视频| 久久成人永久免费播放| 美女被艹免费视频| 亚洲色欲色欲www在线播放| 亚洲一卡2卡3卡4卡国产网站| 亚洲一区二区在线免费观看| 亚洲色无码专区在线观看| 亚洲精品WWW久久久久久| 成人爱做日本视频免费| 久久精品女人天堂AV免费观看| 最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影 | 亚洲中文字幕乱码熟女在线| 亚洲福利视频一区二区三区| 亚洲精品高清视频| 久久精品国产亚洲av四虎| 亚洲国产三级在线观看| 国产成人综合亚洲AV第一页| 亚洲精品和日本精品| 亚洲男人第一无码aⅴ网站 | 亚洲熟妇丰满xxxxx| 亚洲综合精品第一页| 国产亚洲sss在线播放| 亚洲人成网站看在线播放| 亚洲一区二区三区无码国产| 亚洲欧洲自拍拍偷午夜色| 亚洲小说图片视频| 亚洲国产综合在线| 激情综合亚洲色婷婷五月APP| 激情五月亚洲色图| 亚洲精品国产精品| 深夜特黄a级毛片免费播放| 九九全国免费视频|