author:何桂坤
--------services.xml文件-------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>weatherService</name>
<serviceClass>ch09.server.Iweather</serviceClass>
<implementationClass>ch09.server.WeatherImpl</implementationClass>
<scope>application</scope>
</service>
<service>
<name>weekWork</name>
<serviceClass>ch09.server.IweekWork</serviceClass>
<implementationClass>ch09.server.weekWorkImpl</implementationClass>
<scope>application</scope>
</service>
<!-- 配置文件解析
<service>
当前服务的名称(为客户端使用)比如要测试次文件时 就以这个名为访问名
<name>CreditCard</name>
指定服务的名称空间有银行(提供商)提供
<namespace>www.jbaptech.com.cn/CreditCard</namespace>
为name元素绑定的class类 如果是接口就要下一元素指定接口的实现类
<serviceClass>y2javaee.sg.ch09.IProcessCredit</serviceClass>
接口的实现类
<implementationClass>y2javaee.sg.ch09.ProcessCredit</implementationClass>
</service>
-->
</beans>
-----------------------服务接口--------------------------
package ch09.server;
import java.util.Random;
public class WeatherImpl implements Iweather {
//实现随机数接口的类 返回1-15的随机数
public int getRandom() {
Random rand=new Random();
int radom=rand.nextInt(16);//产生1~16的整数nextInt(100)时返回0-99
return radom;
}
}
----------------------------客户端调用-------------------------
package ch09.client;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import ch09.server.Iweather;
//天气的客户端类
public class WeatherClient {
public int ramGain() {
int result=-1;//代表运行本方法出错时的默认值
//创建天气预报web服务的元数据
//实例化对象服务工厂并调用它的Crete方法传入参数(接口类) 获得服务的元数据
Service srvcModel=new ObjectServiceFactory().create(Iweather.class);//括号里面获得接口(类)
//创建天气预报web服务的代理
//实例化XFire的代理工厂XFireProxyFactory(XFireFactory.newInstance()获得xFire库的实例,getXFire()通过内部方法获得库)
XFireProxyFactory factory=new XFireProxyFactory(XFireFactory.newInstance().getXFire());
//创建天气预报web服务的地址(这里写的是本机)
/*(http://localhost:8080/restranthgk/services/weatherService?wsdl)利用此地址测试是否成功
* services/*为web.xml配置文件拦截下来访问的路径 weatherService为 services.xml里面的名
* 路径对应正确才能成功 每次更改配置文件时都要重启tomcat 否则还是运行原来的代码
*/
String helloWorldURL="http://localhost:8080/restranthgk/services/weatherService";
try {
//生成天气预报web服务调用对象
//(强制把object类型转换为接口类型)通过代理工厂factory.create(元数据,服务URL)
Iweather iClient=(Iweather)factory.create(srvcModel,helloWorldURL);
//获得0-15的随机整数
result=iClient.getRandom();//通过接口调用方法获得随机数
} catch (Exception e) {
}
return result;//返回
}
//显示天气最终的状况
public String showWeather() {
int weatherNum=this.ramGain();//调用上面的方法
String todayWeather="";
switch (weatherNum) {
case 0:
todayWeather="晴";
break;
case 1:
todayWeather="晴到多云";
break;
case 2:
todayWeather="多云";
break;
case 3:
todayWeather="阵雨";
break;
case 4:
todayWeather="中雨";
break;
case 5:
todayWeather="大雨";
break;
case 6:
todayWeather="大到暴雨";
break;
case 7:
todayWeather="雷阵雨";
break;
case 8:
todayWeather="雨夹雪";
break;
case 9:
todayWeather="小雪";
break;
case 10:
todayWeather="中雪";
break;
case 11:
todayWeather="大到暴雪";
break;
case 12:
todayWeather="冰雹";
break;
case 13:
todayWeather="霜冻";
break;
case 14:
todayWeather="雾";
break;
case 15:
todayWeather="阴";
break;
default:
todayWeather="预测不到,可能因为调用天气的API出错了";
break;
}
return todayWeather;
}
}
----------------------------------------------------