JAX-WS服务器端
TemperatureInfo 实体类
package cn.entity;
import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 天气预报实体类
* */
@XmlRootElement(name="TemperatureInfo")
public class TemperatureInfo {
private String city;//城市
private Date date;//日期
private int min;//最低
private int max;//最高
private int average;//平均值
private String desc;//说明
public TemperatureInfo() {
}
public TemperatureInfo(String city, Date date, int min, int max,
int average, String desc) {
this.city = city;
this.date = date;
this.min = min;
this.max = max;
this.average = average;
this.desc = desc;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public int getMin() {
return min;
}
public void setMin(int min) {
this.min = min;
}
public int getMax() {
return max;
}
public void setMax(int max) {
this.max = max;
}
public int getAverage() {
return average;
}
public void setAverage(int average) {
this.average = average;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
WeatherService 业务类接口与实现
package cn.biz;
import java.util.Date;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebService;
import cn.entity.TemperatureInfo;
/**
* Web 服务端
* */
@WebService(targetNamespace="http://www.baidu.cn/ws/Weather")
public interface WeatherService {
/**
* 返回3天的天气
* @param city 城市
* @param dates 哪几天
* @return 天气列表
*/
@WebMethod
List<TemperatureInfo> getweathers(String city,List<Date> dates);
}
package cn.biz.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import javax.jws.WebMethod;
import javax.jws.WebService;
import cn.biz.WeatherService;
import cn.entity.TemperatureInfo;
@WebService(targetNamespace="http://www.baidu.cn/ws/Weather")
public class WeatherServiceImpl implements WeatherService {
/**
* 模拟根据城市和日期获取天气信息
* */
@WebMethod
public List<TemperatureInfo> getweathers(String city, List<Date> dates) {
List<TemperatureInfo> list = new ArrayList<TemperatureInfo>();
for (Date date : dates) {
list.add(getTemperature(city,date));
}
System.out.println("服务器端的方法被成功调用...");
return list;
}
/**
* WSDL 不要暴露出来的方法
* */
@WebMethod(exclude = true)
private TemperatureInfo getTemperature(String city, Date date) {
Random ran = new Random();
final String[] WEATHERS={"晴","雨","多云","雪"};
int min = ran.nextInt();
int max=0;
do{max=ran.nextInt(45);}while(min>max);
int average = (max+min)/2;
String werther=WEATHERS[ran.nextInt(WEATHERS.length)];
//随机产生天气
return new TemperatureInfo(city, date, min, max, average, werther);
}
}
Server 本地服务器主程序
package cn.server;
import java.sql.Timestamp;
import javax.xml.ws.Endpoint;
import cn.biz.WeatherService;
import cn.biz.impl.WeatherServiceImpl;
/**
* 本地服务器主程序
* */
public class Server {
/**
* 构造方法
* */
protected Server() {
//天气预报服务
WeatherService weatherService = new WeatherServiceImpl();
//访问地址,端口号 8084 ,查看 WSDL 文件,http://localhost:8084/WeatherService?wsdl
String address = "http://localhost:8084/WeatherService";
//发布服务
Endpoint.publish(address, weatherService);
}
//将服务发布到本地的 jdk6 自带的 Web 容器中
public static void main(String[] args) {
System.out.println(new Timestamp(System.currentTimeMillis()));
new Server();//在构造函数中启动
try {
Thread.sleep(30*60*1000);//分钟
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(new Timestamp(System.currentTimeMillis()));
System.exit(0);//关闭服务器
}
}
PS:先启动 Tomcat ,后运行控制器,最后在浏览器上输入“http://localhost:8084/WeatherService?wsdl”
找到了“C:\Program Files (x86)\Java\jdk1.7.0_45\bin”下的 “wsimport.exe”
在同级文件夹下创建 demo 包,用来存在Java包
开始进行 cmd
获取的 Java包 如图
JAX-WS客户端
TemperatureInfo 修改 “protected Date date;//修改类型,包括 get 和 set 的方法" 和覆写 toString 方法
Client 客户端代码
package cn.baidu.Client;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import cn.baidu.ws.weather.TemperatureInfo;
import cn.baidu.ws.weather.WeatherServiceImpl;
/**
* 客户端代码
* */
public class Client {
//可以在 WeatherServiceImplService.java 中找
public static void main(String[] args) throws Exception {
//创建 2 个后面要用到的 2 个 QName
//1.根据服务地址创建 URL 对象
URL wsdlDocumentLocation = new URL("http://localhost:8084/WeatherService?wsdl");
QName serviceName = new QName("http://www.baidu.cn/ws/Weather","WeatherServiceImplService");
//2.根据 URL 对象和服务名称创建 Service 类
Service service = Service.create(wsdlDocumentLocation,serviceName);
//3.获取服务接口
QName portName = new QName("http://www.baidu.cn/ws/Weather","WeatherServiceImplPort");
WeatherServiceImpl port = service.getPort(portName,WeatherServiceImpl.class);
//准备参数
List<Date> dates = new ArrayList<Date>();
dates.add(java.sql.Date.valueOf("2014-10-16"));
dates.add(java.sql.Date.valueOf("2014-10-17"));
dates.add(java.sql.Date.valueOf("2014-10-18"));
List<TemperatureInfo> obj = port.getweathers("广州", dates);
for (TemperatureInfo temperatureInfo : obj) {
//产生 toString 方法
System.out.println(temperatureInfo);
}
}
}
效果图: