首先服务端是由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的访问也很简单。有问题请留言。