cxf 传接对象
cxf 传递对象CXF框架简单的JavaBean对象传递进行讲解。?第一步:创建传输的JavaBean对象(UserInfo)[java] vi
cxf 传递对象
CXF框架简单的JavaBean对象传递进行讲解。
?第一步:创建传输的JavaBean对象(UserInfo)
[java] view plaincopy
- 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、创建服务端接口类
[java] view plaincopy
- 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、创建服务端接口实现类
[java] view plaincopy
- 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、创建服务端,并发布服务
[java] view plaincopy
- 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、在客户端工程中,新建一个测试类测试
[java] view plaincopy
- 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,验证服务是否成功发布
第四步:运行客户端,验证。