第一步:創建傳輸的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,驗證服務是否成功發佈
第四步:運行客戶端,驗證。