axis2和cxf复合类型参数传递(绝对权威)

首先服务端是由CXF发布的服务CXF服务版本为2.2,之前说过2.3JDK需要1.6的,本人用1.5版本。

本章只讲对象数组的传递和List类型的传递。

CXF客户端:

本人用的CXF版本为2.2和2.3均可以通过。

首先是客户端包装接口,只需要定义和服务接口一样即可,名称可以任意,但是包名必须相同。

如:客户端定义接口如下(跟服务端一样哦):

@WeService

public class IHelloWorld {

User[] getUsers(User[] user){

return user;

}

List<User> getListUser(List<User> user){

return user;

}

}

User.java我就不写了,很简单。

客户端调用:

JaxWsProxyFactoryBean factory1 = new JaxWsProxyFactoryBean();
  factory1.setServiceClass(IHelloWorld.class);
  factory1.setAddress("
http://127.0.0.1:8088/**/IHelloWorld");
  QName qName1 = new QName("
命名空间");//wsdl文件中targetNameSpace的值
  factory1.setServiceName(qName1);
  IHelloWorld service = (IHelloWorld) factory1.create();
List<User> list = new ArrayList<User>();
  User user = new User();
  user.setAge(25);
  user.setName("fei");
  User[] users = new User[]{user}; 

 list.add(user);

//直接可以调用了

System.out.println(service.getUsers(users));

System.out.println(service.getListUser(users));

OK CXF的调用就可以。如有问题可以联系我

AXIS2客户端:

axis2调用还是要注意一些问题的。我用的jdk是1.4的版本比较低,在实现的过程中让我很头疼,大家最好还是用1.5之上的吧。另外大家最好用axis2 1.4版本的,因为之前的版本与CXF服务端访问时,SOAP可能无法解析会出错。

因为axis无法直接传递list和对象数组参数,1.4是这样的高版本就不晓得了。所以必须封装一下我们建一个Users.java

public class Users{

private User[] user;

private List userList;

//get和set方法

}

User.java就不写了

客户端调用:写在MAIN方法里,如果做项目就写在action里

   RPCServiceClient serviceClient = new RPCServiceClient();
  Options options = serviceClient.getOptions();
  EndpointReference targetEPR = new EndpointReference("
http://localhost:8088/**/HelloWorld?wsdl");
  options.setTo(targetEPR);
  QName name2 = new QName("
targetNameSpace", "getUsers");
  QName name3 = new QName("
targetNameSpace"getListUser");
  Users users = new Users();
  User[] user2 = new User[2];
  List list = new ArrayList();
  for (int i = 0; i < 2; i++) {
   User user1 = new User();
   user1.setName("fei" + i);
   user1.setAge(24 + i);
   user2[i] = user1;
   list.add(user1);
  }
  users.setUsers(user2);
  users.setUserList(list);
  Object[] object1 = new Object[] { users };
  Class[] classes2 = new Class[] { Users.class };
  Class[] classes3 = new Class[] { List.class };
  Object[] object3 = serviceClient.invokeBlocking(name2, object1, classes2);
  System.out.println(object3.toString());
  Object[] object4 = serviceClient.invokeBlocking(name3, object1, classes3);
  List list1 = (List) object4[0];
  System.out.println(list1.size());
  OK ,Axis2的访问也很简单。有问题请留言。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值