webservice的实现
WebService更多是一种标准,而不是一种具体的技术。不同的平台,不同的语言大都提供WebService的开发实现。在Java领域,WebService的一个成熟实现是Axis。
q Axis是Apache的一个开源WebService引擎,它是目前最为成熟的开源WebService引擎之一。
q Apache Axis是符合W3C的SOAP协议的实现。
q 该项目是属于Apache SOAP协议的子项目。
登陆http://www.apache.org/dyn/closer.cgi/ws/axis/1_4站点,Axis的最新版本是1.4,本文中示例程序都是基于该版本完成。下载到axis-bin-1_4.zip文件,解压缩该文件,发现如下的文件结构:
q docs:存放Axis的说明文档。
q lib:存放Axis的二进制发布包。
q samples:存放利用Axis发布WebService的示例代码。
q webapps:存放安装Axis的基础应用。
q xmls:存放相关配置文档。
q 还有LICENSE等相关说明文档。
安装Axis,首先必须保证系统已经正确安装了Web服务器,笔者使用Tomcat6.0.24。webapps下的axis路径全部复制到Tomcat的webapps路径下。然后打开浏览器,输入:http://localhost:8080/axis/。
如果出现如图1所示界面表示Axis的基本类库已经安装成功,地址中的8080是我的Tomcat的端口。单击如图1所示页面的左上方“Validation”链接,出现如图2所示界面:
图1 Axis安装成功界面
图2 Axis校验界面(已安装组件)
如若页面显示Axis的必需组件缺少一个没有安装,两个可选组件也没有安装,单击上面的提示链接,分别登陆:
q http://java.sun.com/products/javabeans/glasgow/jaf.html
q http://java.sun.com/products/javamail/
q http://xml.apache.org/security/
依次下载如下三个压缩文件:
q jaf-1_1-fr.zip
q javamail-1_4.zip
q xml-security-bin-1_2_1.zip
将这三个压缩文件解压缩。将jaf-1_1-fr.zip压缩包中的activation.jar文件,复制到axis应用的WEB-INF\lib下;将javamail-1_4.zip压缩包中的mail.jar文件,复制到axis应用的WEB-INF/lib下;再将xml-security-bin-1_2_1.zip的lib下xmlsec-1.2.1.jar和xalan.jar文件,复制到WEB-INF/lib下。再次校验Axis,看到页面提示全部安装成功。
完成了前面的部署后,就可以开始开发自己的WebService了。首先编写需要提供服务的类,该类不需要实现任何接口,也不需要继承任何父类,只需要是POJO即可。Axis支持将普通方法暴露成WebService。看如下的服务类:
//服务类,应该声明为public
public class Hello
{ //服务方法
public String sayHello(String name)
{
return "hello ," + name + ",Welcome to Axis";
}
}
该类简单得难以置信,但正是个简单的类,它可以提供WebService。将该类的文件名存为Hello.jws。
注意:不是java后缀,而是jws后缀。
将该文件放入axis应用的根路径下,也就是与WEB-INF同一级路径,然后重启动Tomcat,或者在Tomcat控制台重新加载axis应用。然后,打开浏览器输入如下地址:
http://localhost:8080/axis/Hello.jws
看到如图所示界面:
图3 Hello WebService
图4 WebService的WSDL描述
这表示该WebService发布成功,单击“Click to see the WSDL”链接,可查看该WebService的WSDL描述。成功发布的WebSerivice通过网络访问,因为SOAP协议基于HTTP协议,因此WebService可以在互联网上访问。访问该WebService的客户端代码如下:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class WebServiceClient {
// 程序的入口
public static void main(String args[])
{
System.out.println("开始调用WebService");
try
{
// WebService所在的url
String endpoint = "http://localhost:8080/axis/Hello.jws";
// 创建Serivce对象,Service对用用于创建Call对象
Service service = new Service();
// 创建Call对象,Call对象用于调用服务
Call call = (Call) service.createCall();
// 为Call对象设置WebService的url
call.setTargetEndpointAddress(new java.net.URL(endpoint));
// 为Call对象设置调用的方法名
call.setOperationName("sayHello");
// 调用WebService的方法,并获得返回值
String s = (String) call.invoke(new Object[] { "hsaingyu" });
// 输出返回值
System.out.println(s);
}
catch (Exception e)
{
System.out.println(e.toString());
}
System.out.println("调用WebService正常结束");
}
}
运行结果: