这段时间一直在捣鼓xfire实现web service的工作,发现了很多问题,其中最受大家关注的要属复杂类型的参数传递问题和调用返回复杂类型web service的问题。这些问题在网上很少有个详细的解决方案,于是经过自己的研究,终于得到解决问题的方法,收获颇多。为了让所有的xfire初学者少走弯路,我将给出解决方案如下。
第一步:使用MyEclipse创建一个web service工程,编写服务端代码,即发布web service.
//定义复杂类型
package nudt;
public class Member {
private String name;
private String sex;
private int age;
private String telephone;
public Member() {
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setAge(int age) {
this.age = age;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getName() {
return this.name;
}
public String getSex() {
return this.sex;
}
public int getAge() {
return this.age;
}
public String getTelephone() {
return this.telephone;
}
}
//
//定义接口类
package nudt.server;
import nudt.Member;
public interface MemberInfo {
public Member[] getMembers();
public String memberToString(Member member);
}
///
//定义接口实现类
package nudt.server;
import nudt.Member;
public class MemberInfoImpl implements MemberInfo{
public Member[] getMembers() {
Member[] members = new Member[3];
for(int i=0;i<3;i++){
members[i] = new Member();
members[i].setName("name" + i);
members[i].setSex("sex" + i);
members[i].setAge(i);
members[i].setTelephone("telephone" + i);
}
return members;
}
public String memberToString(Member member) {
return member.getName()+"," + member.getSex() + "," + member.getAge() + "," + member.getTelephone();
}
}
//services.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>MemberInfo</name>
<namespace>memberInfo</namespace>
<serviceClass>nudt.server.MemberInfo</serviceClass>
<implementationClass>
nudt.server.MemberInfoImpl
</implementationClass>
</service>
</beans>
第二步:使用Myeclipse Plugin生成Client Stub。
第三步:编写客户端代码。
package test;
import java.util.List;
import nudt.MemberInfoClient;
import nudt.MemberInfoPortType;
public class TestCase {
public static void main(String[] args) {
MemberInfoClient client = new MemberInfoClient();
MemberInfoPortType service = client.getMemberInfoHttpPort();
nudt.ObjectFactory factory = new nudt.ObjectFactory();
nudt.Member member = factory.createMember();
member.setName(factory.createMemberName("honggaoqi"));
member.setName(factory.createMemberSex("boy"));
member.setAge(23);
member.setTelephone(factory.createMemberTelephone("xxxxxxxxxx"));
System.out.println(service.memberToString(member));
List<nudt.Member> member2 = service.getMembers().getMember();
for(int i=0;i<member2.size();i++){
System.out.println(service.memberToString(member2.get(i)));
}
}
}
输出结果为:
null,boy,23,xxxxxxxxxx
name0,sex0,0,telephone0
name1,sex1,1,telephone1
name2,sex2,2,telephone2