web service 传递复杂对象

复杂的数据对象

List

Map

数组

自定义对象---这个我们在前面已经说过了。

1、javabean的使用--必须是可序列化的类

public class Address implements Seriazable {

     private String address;

     private String city;

     private String country;


     private String[] array;

     private List<Integer> list;

     private boolean isExist;

     public Address() {

          list = new ArrayList<Integer>();

          list.add(1);

          list.add(2);

          list.add(3);

      }

      //setter   getter 方法

}

编写服务类

public class AddressManager { //ws的服务类

//定制不同服务方法

public List<Address> getAddress() {

              List<Address> returnlist = new ArrayList<Address>();

              Address address = new Address();

              address.setAddress("天津");

              address.setCity("南开区");

              address.setCountry("中国");

              address.setExist(false);

              address.setArray(new String[] {“a", "b", "c"});

              return returnlist;

        }

        //在添加另外一个方法

        public Map<Integer, Address> getAddressMap() {

             Map<Integer, Address> map = new HashMap<Integer, Address>();

             Address address = new Address();

              address.setAddress("天津");

              address.setCity("南开区");

              address.setCountry("中国");

              address.setExist(false);

              address.setArray(new String[] {“a", "b", "c"});

              map.put(1, address);

             return map;

}

//编写server-config.wsdd的配置项目

<service name="AddressManager" provider="java:RPC">

     <parameter name="className" value="com.object.ws.AddressManager" />

     <parameter name="allowMethods" value="*" />

     <!--定义AddressManager所使用的JavaBean的数据类型 -->

     <beanMapping qname="myNSD:Address" xmlns:myNSD="urn:AddressManager" languageSpecificType="java:com.objectws.Address"/>

</service>

//客户端测试代码

       String url = "http://localhost:8080/axis/services/AddressManager"; 

       Service service = new Service();

       try {

             Call  call = (Call) service.createCall();

             QName qn  = new QName("urn:AddressManager", "Address");//在ws查找Address(javabean的类型)

             //找到javaBean的描述,将此类型javaBean,在call中进行设置(序列化,反序列化)

             call.registerTypeMapping(Address.class, qn, new BeanSerializerFactory(Address.class, qn),  new BeanDeserializerFactory(Address.class, qn));

             //设置连接

             call.setTargetEndpointAddress(new URL(url));

             call.setOperationName(new QName("AddressManage", "getAddress"));

             //设置返回结果的类型

             call.setReturnClass(ArrayList.class);

             Object[] ss = null;    //无参

             ArrayList<Address> list = (ArrayList<Address>) call.invoke(ss);  //

       } catch ( Exception e ) {

            e.printStackTrace(); 

      }

这里注意在我们的自定义类中还有自定义类,这个时候我们还是需要配置一个<beanMapping>就可以了。

而且这些类必须要进行序列化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值