AXIS进行java的WebService开发
近期由于参与项目涉及到使用JAVA进行WebService进行开发,所以特地在网上查找资料研究了一下,在java中一般是使用Axis框架来进行webservice开发的,Axis比较强大,能自动帮我们生成网络通信的代码,为开发节约了不少时间,在这里特此记录一下,备忘。
一、Axis环境的安装
1、主要软件环境
安装环境 J2SE SDK 1.4.2(或更高版本),Tomcat 5.0(或更高版本),eclipse 3.2(或其他IDE)。
2、下载并配置Axis
到 http://www.ip97.com/apache.org/ws/axis/1_4/axis-bin-1_4.zip网站下载Axis安装包。
下载完成解压后,将 webapps/axis 这个目录复制 %tomcathome%/webapps/ 下然后启动tomcat, 打开URL: http://localhost:8080/axis/ ;
配置成功后将有如下信息,打开 validataion 然后,页面上的信息会告诉你已经有的包和还要差的包,然后根据提示将必须的包下载全.复制到 %tomcathome%/webapps/axis/WEB-INF/lib/目录; 重起tomat ,直到必须的包都装齐.
Jar包列表如下:
xmlsec.jar;wsdl4j-1.5.1.jar;saaj.jar;mail.jar;log4j-1.2.8.jar;jaxrpc.jar;commons-logging-1.0.4.jar;commons-discovery-0.2.jar;axis-ant.jar;axis.jar;activation.jar
Axis支持三种web service的部署和开发,分别为:
1). Dynamic Invocation Interface (DII)
2). Dynamic Proxy方式
3). Stubs方式
一般建议我们使用Stubs方式,因此下面主要就介绍一下第三种方式。注意,我自己的 Java源代码是放在D:"workspace"test"目录下,Axis相关包文件放在D:"workspace"test"WEB-INF目录下。
二、编写wsdd发布web服务,编写stub client访问web服务
1、编写服务端程序
在server包下编写SayHello.java,并编译server.SayHello.java
package server;
public class SayHello
{
public String getName(String name)
{
return "hello "+name;
}
}
2、编写wsdd文件
deploy.wsdd文件内容如下(该文件放在工程目录下的WEB-INF目录下):
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="SayHello" provider="java:RPC">
<parameter name="className" value="server.SayHello "/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
3、发布服务
编辑一个deploy.bat,Axis_Lib为axis.jar路径。内容如下:
set Axis_Lib=."lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/test/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd
执行这个批处理文件,这时候,如果提示成功的话,访问http://localhost:8080/test/services 就会显示服务列表。
若这个时候报找不到servlet/AxisServlet(404 not found),则是web.xml没有设置好AxisServlet (可以参考axis里目录下的web-inf里面的web.xml的设置【查找AxisServlet查看】)。
4、生成客户端client stub文件
在浏览器上访问服务器端的服务,可以下载到WSDL文件,通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码。
编写一个WSDL2Java.bat文件,其内容如下:
set Axis_Lib=."lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=E:"soft"Eclipse"eclipse"workspace"WebServiceTest"src"
set Package= client.SayHello
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% http://localhost:8080/test/services/SayHello?wsdl
执行这个批处理文件就可以生成client stub.生成的stub client文件列表为:SayHello.java,SayHelloService.java,SayHelloServiceLocator.java,SayHelloSoapBindingStub.java
5、编写客户端程序,编译并执行
在client.SayHello包下编写TestClient.java文件,代码如下:
package client.SayHello;
public class TestClient {
public static void main(String[] args) throws Exception {
SayHelloService service = new SayHelloServiceLocator();
SayHello_PortType client = service.getSayHello() ;
String retValue = client.getName("gz!");
System.out.println(retValue);
}
}