WebService更多是一种标准,而不是一种具体的技术。不同的平台,不同的语言大都提供WebService的开发实现。在Java领域,WebService的一个成熟实现是Axis。
q Axis是Apache的一个开源WebService引擎,它是目前最为成熟的开源WebService引擎之一。
q Apache Axis是符合W3C的SOAP协议的实现。
q 该项目是属于Apache SOAP协议的子项目。
14.6.1.1 Axis的下载
登陆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等相关说明文档。
14.6.1.2 Axis的安装
安装Axis,首先必须保证系统已经正确安装了Web服务器,笔者使用Tomcat5.0.28。也可使用其他应用服务器,例如WebLogic。webapps下的axis路径全部复制到Tomcat的webapps路径下。然后打开浏览器,输入:http://localhost:8888/axis/。
如果出现如图14.3所示界面表示Axis的基本类库已经安装成功,地址中的8888是笔者的Tomcat的端口。单击如图14.3所示页面的左上方“Validation”链接,出现如图14.4所示界面:
图14.3 Axis安装成功界面 图14.4 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 下载: https://sdlc1a.sun.com/ECom/EComActionServlet;jsessionid=A45E3E2265BF823B4399BB95F59DD152
q javamail-1_4.zip 下载:
https://sdlc1a.sun.com/ECom/EComActionServlet;jsessionid=503F19F1D96612179D16E4CC7436893F
q xml-security-bin-1_2_1.zip 下载: http://xml.apache.org/security/dist/java-library/
将这三个压缩文件解压缩。
将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,看到页面提示全部安装成功。
1、Dynamic Invocation Interface ( DII)
2、Dynamic Proxy方式
3、Stubs方式
对于前两种Web Service的发布基本一样,客户端的访问也很类似,第一种发布就是直接将.java后缀改为.jws,并将生成的.class文件拷贝到WEB- INF/jwsclasses下面,非常简单,但它也有缺陷,就是不适合程序部署和大型项目开发,而且不支持包(package)的形式.
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
就是说如果向容器请求/servlet/AxisServlet、*.jws、/services/*这几种映射会引起调用AxisServlet这个类,我们要用的就这几行,其他的可以直接删掉。
2.在WEB-INF/src下面新建一个myService.java文件,如下
public class myService {
public String getusername(String name){
return "Hello "+name+",this is an Axis DII Web Service";
}
}
将myService.java拷贝到AxisTest根目录下,将其后缀改为jws。
启动Tomcat输入http://localhost:8080/AxisTest/myService.jws,
com.axistest包下新建一个myServiceTestorByjws.java,选中public static void main(),
代码如下:
package com.client;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
String endpoint="http://localhost:8080/AxisTest/MyService.jws";
String name=" 张三";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.addParameter("param1",XMLType.XSD_STRING,ParameterMode.IN);
call.setOperationName( "sayHello" );
call.setReturnType( XMLType.XSD_STRING );
String ret = (String) call.invoke( new Object[] { name } );
System.out.println("返回结果:" + ret);
}