java中序列化和反序列化如何操作arraylist_一个服务返回一个ArrayList,如何使用Axis序列化/反序列化啊...

arrayList   ,victor,set,map传输在j2ee   web   service标准里是有限制的   ,改用数组

初步搞定:(服务如何发布就不详细说了,网上很多)

java程序用   Axis做服务时自定义类实体的传送

核心代码:

QName   qn   =   new   QName( "urn:BeanService ", "MyArryBean ");

call.registerTypeMapping(MyArryBean.class,   qn,

new   BeanSerializerFactory(MyArryBean.class,   qn),

new   BeanDeserializerFactory(MyArryBean.class,   qn));

这是在客户机端的代码,用于注册服务器上面的自定义类。然后就可以在客户端实例化这个类来使用。(如果MyArryBean   与服

务类不在同一个包里面,即服务需要用   import   来引用的话,这时就要用到   :包名.MyArryBean.class)

在Axis服务端,注册自定义对象的序列化/反序列化器

服务器的server-config.wsdd:

...

...

服务器上面的自定义类(这个类要被传递给客户端):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;}

}

服务器上面的服务类:ArrayListService.java

package   com;

public   class   ArrayListService   {

//这里返回的是一个int数组

public   int[]   myAL(){

int   myAL[]   =   new   int[5];

for(   int   i=0;i <5;i++){

myAL[i]=i;

}

return   myAL;

}

//这里返回的是一个自定义对象

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();

//注册MyArryBean的序列化类型

QName   qn   =   new   QName( "urn:BeanService ", "MyArryBean ");

call.registerTypeMapping(MyArryBean.class,   qn,

new   BeanSerializerFactory(MyArryBean.class,   qn),

new   BeanDeserializerFactory(MyArryBean.class,   qn));

//这里取得的是一个服务器int数组

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数组: "+_resp[i]);

}

//这里取得的是一个服务器自定义对象

//这里实例化服务器上面的映射的自定义类

MyArryBean   CmyAB=new   MyArryBean();

CmyAB.setBean( "这是的客户端实例化服务器的类!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[]   {   "这是调用服务器的类!web "   });

System.out.println( "return   value   is   "   +   CmyAB.getBean());

System.out.println( "请求信息: ");

call.getMessageContext().getRequestMessage().writeTo(System.out);

System.out.println( " ");

System.out.println( "响应信息: ");

call.getMessageContext().getResponseMessage().writeTo(System.out);

System.out.println( " ");

}

catch   (Exception   ex)   {         ex.printStackTrace();         }}}

运行结果:

int数组:0

int数组:1

int数组:2

int数组:3

int数组:4

return   value   is   这是的客户端实例化服务器的类!yes

return   value   is   这是调用服务器的类!web

请求信息:

xmlns:xsd= "http://www.w3.org/2001/XMLSchema "

xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance ">

xmlns:ns1= "http://localhost:8080/axis/services/ArrayListService ">

这是调用服务器的类!web

响应信息:

xmlns:xsd= "http://www.w3.org/2001/XMLSchema "

xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance ">

xmlns:ns1= "http://localhost:8080/axis/services/ArrayListService ">

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

xmlns:ns2= "urn:BeanService ">

这是调用服务器的类!web

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值