4.UDDI(Universal Description,Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议,主要对
Web services 进行注册和搜索。我们的webservice主要就是通过它来实现功能的。
好了,话不多说,跨平台的咱就不多少了,在这里我们主要说说用java来实现webservice,我们简单模拟一个商城和支付的两个系统的调用,主要分三步:
? ? ? 一、我们要去下载xfire包,http://xfire.codehaus.org/Download,这里下载,解压之后把xfire-all-1.2.6.jar和lib文件夹下的jar包都准备好,这些都是我们需要的。
? ? ?二、开发服务器端。
1、新建web项目,命名为WSService,导入刚才的jar包。
2、新建一个接口,命名为com.webservice.ws.PayService,其中只有一个方法。其代码如下:
package com.webservice.ws;
public interface PayService {
public int pay(String name,double money);
}
? ? 3、实现这个接口,其实现类是
com.webservice.ws.impl.PayServiceImpl,其代码如下:
package com.webservice.ws.impl;
import com.webservice.ws.PayService;
public class PayServiceImpl implements PayService {
public int pay(String name,double money) {
if("admin".equals(name)){//判断用户名是否正确,(当然,数据应该从数据库来,我们这里只是模拟)
if(money < 2000){//判断余额是否足够,如果小于2000,则不足,返回1
return 1;
}else{
return 2;//余额足够,返回2
}
}
return 0;//用户名不正确,返回0
}
}
4、在项目的src目录下新建META-INF文件夹,下面新建xfire文件夹,在xfire下新建services.xml文件,结构目录如下图所示
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?services.xml用来发布接口,其代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns='http://xfire.codehaus.org/config/1.0' >
<service>
<name>PayService</name>
<serviceClass>com.webservice.ws.PayService</serviceClass>
<implementationClass>com.webservice.ws.impl.PayServiceImpl</implementationClass>
</service>
</beans>
5、最后,在web.xml中配置拦截,一般都是用servlet进行配置,其代码如下:
<servlet>
<servlet-name>xfireservlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfireservlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
好了,现在我们的webservice的服务器端就配置好了,我们可以进行发布访问了。访问
http://127.0.0.1:8081/WSService/services/PayService?wsdl,就可以看见配置信息了,wsdl就是用在这里的,用来详细说明webservice的接口信息,这里描述了我们刚才发布的那个接口,
三、开发客户端程序。我们这里用一个方法来模拟客户端程序,对刚才的服务器发布的接口进行调用。
1、新建一个项目,因为webservice是跨平台的分布式应用,所以这里用什么项目都可以,我们就用普通的java项目好了,命名为WSClient。
2、导入jar包。在项目的src下新建lib目录,将第一步的jar包导入,添加到path路径中。
3、新建一个和服务器端一样的接口。实际项目中根据WSDL可以建立,因为在wsdl文件中我们已经拿到了所需要的接口名称、返回值类型和参数列表了,代码和第二部一样,我们就不贴了。
4、实现类,对接口进行调用,代码如下:
package com.webservice.cs;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
public class Test {
public static void main(String[] args) {
//这个url是服务器发布的接口的地址,也是我们在WSDL中可以看见的,直接复制过来即可。
String url="http://127.0.0.1:8081/WSService/services/PayService";
//新建Service服务接口模板
Service service = new ObjectServiceFactory().create(PayService.class);
//创建代理工厂
XFireProxyFactory factory = new XFireProxyFactory( XFireFactory.newInstance().getXFire());
try {
//在这里调用方法
PayService ps = (PayService) factory.create(service,url);
String name="admin";
double money = 2100;
int rs = ps.pay(name,money);
switch (rs) {
case 0:
System.out.println("用户名不存在,请核实");
break;
case 1:
System.out.println("支付成功");
break;
case 2:
System.out.println("支付失败【余额不足】");
break;
default:
System.out.println("支付失败【原因未知】");
break;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
最后运行程序,就能看到运行结果了。在这里,用一个项目去调用另外一个项目,写的比较简单,只有一个方法,但是在实际项目中是一样的用法。
好了,webservice就先写这么多,以后有需求再进行补充。