这一节我们就CXF框架简单的JavaBean对象传递进行讲解。
第一步:创建传输的JavaBean对象(UserInfo)
package com.ws.model;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name="UserInfo")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"userName","userAge"})
public class UserInfo {
private String userName;
private Integer userAge;
public UserInfo(String name,Integer age){
this.userAge = age;
this.userName = name;
}
public UserInfo(){
}
// 添加geter/seter方法..
}
注解:@XmlRootElement-指定XML根元素名称(可选)
@XmlAccessorType-控制属性或方法序列化 , 四种方案:
FIELD-对每个非静态,非瞬变属性JAXB工具自动绑定成XML,除非注明XmlTransient
NONE-不做任何处理
PROPERTY-对具有set/get方法的属性进行绑定,除非注明XmlTransient
PUBLIC_MEMBER -对有set/get方法的属性或具有共公访问权限的属性进行绑定,除非注 明XmlTransient
@XmlType-映射一个类或一个枚举类型成一个XML Schema类型
第二步:创建webservices服务端接口和实现类
1、创建服务端接口类
package com.ws.services;
import javax.jws.WebService;
import com.ws.model.UserInfo;
@WebService
public interface IUserServices {
public UserInfo getUserInfo(String userName, Integer userAge);
}
2、创建服务端接口实现类
package com.ws.services.impl;
import javax.jws.WebService;
import com.ws.model.UserInfo;
import com.ws.services.IUserServices;
@WebService
public class UserServicesImpl implements IUserServices {
public UserInfo getUserInfo(String userName, Integer userAge) {
return new UserInfo(userName,userAge);
}
}
3、创建服务端,并发布服务
package com.test;
import javax.xml.ws.Endpoint;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import com.ws.services.impl.UserServicesImpl;
public class ServerTest {
public ServerTest(){
// 发布User服务接口
Endpoint.publish("http://localhost:8090/userInfoServices", new UserServicesImpl());
}
public static void main(String[] args) {
// 启动服务
new ServerTest();
System.out.println("Server ready...");
try {
Thread.sleep(1000*300);//休眠五分分钟,便于测试
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Server exit...");
System.exit(0);
}
}
第三步:创建webservices客户端,并进行测试(这里只例举在客户端工程中的测试方法)
1、将服务端的JavaBean和Services接口类,copy到客户端工程中,且目录要一致
2、在客户端工程中,新建一个测试类测试
package com.ws.client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.ws.model.UserInfo;
import com.ws.server.IUserServices;
public class UserTest {
public static void main(String[] args) {
//创建WebService客户端代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//注册WebService接口
factory.setServiceClass(IUserServices.class);
//设置WebService地址
factory.setAddress("http://localhost:8090/userInfoServices");
IUserServices userServices = (IUserServices)factory.create();
System.out.println("invoke userinfo webservice...");
// 测试返回JavaBean对象的
UserInfo user = userServices.getUserInfo("vicky", 23);
System.out.println("UserName: "+user.getUserName());
System.out.println("UserAge : "+user.getUserAge());
System.exit(0);
}
}
第四步:运行webServices服务,在IE中输入http://localhost:8090/userInfoServices?wsdl,验证服务是否成功发布
第五步:运行客户端,验证。