使用Axis开发Web Service程序

来源:互联网 发布:网络安全意识培训 编辑:程序博客网 时间:2024/04/29 11:12
使用Axis开发Web Service程序

Axis环境的安装

  1、安装环境 J2SE SDK 1.4,Tomcat 5.0,eclipse 3.2。

  2、到 http://xml.apache.org 网站下载Axis安装包。

  3、将Axis相关包文件放在WEB-INF/lib目录下。

  4、Axis可选的包:activation.jar; mail.jar; xmlsec-1.4.Beta1.jar拷贝到WEB-INF目录下,生成客户端时候需要使用。

  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文件内容如下:server 为包名 SayHello为类名

<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路径。本机为 ./lib目录 内容如下:AxisWebservice 为项目名称

set Axis_Lib=./lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/AxisWebservice/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd

  执行这个批处理文件,这时候,如果提示成功的话,访问http://localhost:8080/AxisWebservice/services 就会显示服务列表。
如下:

And now... Some Services
AdminService (wsdl)
AdminService
Version (wsdl)
getVersion
//下面就是我们刚才的服务函数了
SayHello (wsdl)
getName

4. 编辑web.xml文件内容  其中, web.xml 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   
   <servlet>
    <servlet-name>AxisServlet</servlet-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>
 
  <mime-mapping>
    <extension>wsdl</extension>
     <mime-type>text/xml</mime-type>
  </mime-mapping>
 

  <mime-mapping>
    <extension>xsd</extension>
    <mime-type>text/xml</mime-type>
  </mime-mapping>
   
   
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

  5、生成客户端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=D:/workspace60/AxisWebservice/src
set Package=com.xino.service
set wsdl_path=http://127.0.0.1:8080/AxisWebservice/services/SayHello?wsdl
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% %wsdl_path%

  执行这个批处理文件就会在 src 文件夹下的 包 com.xino.service 下生成 client stub.  共四个文件

  生成的stub client文件列表为:SayHello_PortType.java,SayHelloService.java,SayHelloServiceLocator.java,SayHelloSoapBindingStub.java .

  6、编写客户端程序,编译并执行

  下面是一段junit测试客户端代码。

package com.xino.client;

import com.xino.service.SayHelloService;
import com.xino.service.SayHelloServiceLocator;
import com.xino.service.SayHello_PortType;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestWSClient extends TestCase {

    public TestWSClient(String string) {
        super(string);
    }

    public void SayHelloClient() throws Exception {

        SayHelloService service = new SayHelloServiceLocator();
        SayHello_PortType client = service.getSayHello() ;
        String retValue = client.getName("clientname");
        System.out.println("getname "+retValue);

    }

    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(new TestWSClient("SayHelloClient"));
        return suite;
    }

}


  至此,整个服务器端和客户端的Web Service框架代码就完成了,剩下的就是在里面加入你的业务代码了。

本机测试通过 运行结果 :
getname hello clientname
原创粉丝点击