JAX-WS 模仿天气预报发布

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);
		}

	}

}

 

效果图:

 


 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值