axis1.x框架开发web service

本章主要通过实例阐述整个webservice项目的开发过程。

登录网站:

http://www.apache.org/dyn/closer.cgi/axis/axis/java/1.4/,下载axis1.4版,目录结构如下图所示。


docs是框架说明文档(包括API)、lib是框架所依赖的jar包、sample是示例、xmls是当前工程所需的xml、webapps是当前工程的webroot目录。

1.1.2服务器

本小节说明如何在eclipse或者myeclipse中,创建第一个webservice工程。所有示例始于helloworld。下面将详细说明服务器端发布webservice项目、客户端调用的过程。

1)  打开myeclipse,创建web工程,名称为“axiswebservice”,并将2.1.1小节下载的lib文件夹下的jar包添加至工程中。最终效果如下图所示。

2)  创建服务器代码HelloWorld.java,具体内容和普通的java类编写无任何差别。具体代码如下。

package com.ll.server;
 
public class HelloWorld {
    public String sayHello(Stringusername)
       return "hello, " + username;
    }
}


3)  在WEB-INF目录下创建一个名为“deploy.wsdd”,这是一个webservice部署描述文件(web service deploymentdescriptor),后续将使用此文件来发布webservice。具体内容如下。

<?xml version="1.0"encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <!-- service标签代表一个WebService服务 -->
    <service name="HelloWorld"provider="java:RPC">
    <!-- 命名空间,使用wsdl2java生成客户端代码时,包路径为:com.ll.server -->
    <!-- 假如发布服务地址为:http://localhost:8887/axiswebservice/services/HelloWorld-->
    <!-- 如果属性wsdlTargetNamespace不设置的话,生成客户端代码的默认包路径为:localhost.axiswebservice.services -->
    <parameter name="wsdlTargetNamespace" value="http://server.ll.com"/>
    <parameter name="wsdlServicePort" value="HelloWorld"/>
    <!-- 服务类路径 -->
        <parameter name="className"value="com.ll.server.HelloWorld" />
        <!-- * 代表所有的方法都暴露 -->
        <parameter name="allowedMethods"value="*" />
        <!-- 当前WebService的作用域,它有3个值,分别是:request每个请求、session每个用户、application所有请求 -->
        <parameter name="scope"value="request" />
    </service>
</deployment>

4)  修改web.xml,加入axisServlet的支持,具体代码如下。

<!-- 加入AxisServlet的支持 -->
<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>/services/*</url-pattern>
</servlet-mapping>


5)  将此web工程部署至tomcat(本文使用tomcat5.5)中,如下图所示。

6)  配置tomcat端口,启动tomcat服务器;利用AdminClient客户端管理工具发布webservice项目。具体命令如下。执行以下命令之后,WEB-INF下会生成一个server-config.wsdd文件,此文件为webservice服务生成wsdl文件的依据,工程启动即加载此文件,记录了axis已发布的Web服务的描述信息。

D:\apache-tomcat-5.5.25\webapps\axiswebservice\WEB-INF>

java -Djava.ext.dirs=liborg.apache.axis.client.AdminClient-lhttp://localhost:8887/axiswebservice/services/AdminService deploy.wsdd

命令说明:

Ø  D:\apache-tomcat-5.5.25\webapps\axiswebservice\WEB-INF表示webservice工程部署目录

Ø  -Djava.ext.dirs=lib表示使用工程lib下的jar包

Ø  org.apache.axis.client.AdminClient表示axis工具类,用来发布webservice服务

Ø  -lhttp://localhost:8887/axiswebservice/services/AdminService,“-l”表示参数,后跟具体的tomcat部署的工程访问路径;“axiswebservice”表示工程名;“services/AdminService”为固定写法。

Ø  deploy.wsdd表示第3)步创建的发布描述文件

7)  打开浏览器,输入:http://localhost:8887/axiswebservice/services,红色区域是我们刚才发布的webservice方法,点击“wsdl”超链接,生成服务对应的wsdl(WSDL是WebService的描述语言,是一种接口定义语言,用于描述Web Service的接口信息等)描述文件。此文件详细描述了服务器端的方法、参数、返回值等。后续将使用此文件通过axis提供的WSDL2JAVA工具自动生成客户端调用代码。这里只关注一个属性

<wsdlsoap:address location="http://localhost:8887/axiswebservice/services/HelloWorld" />

此属性表示客户端访问服务器的具体地址,即客户端通过此地址来访问服务体提供的服务方法sayHello。


本小节说明如何调用已发布的webservice服务,这里调用方式有两种,一种是直接手写整个调用服务器端方法;第二种是使用服务器端生成的wsdl文件,通过axis提供的WSDL2JAVA工具自动生成客户端调用代码,从而较少手工代码的编写。一般情况下建议使用第二种方法,因为第二种方法其实是第一种方法的一个封装,可大大减少代码出错率。下面就这两种方法做一简单介绍。

1)  打开myeclipse,创建web工程,名称为“axisclient”。

Ø  并将2.1.1小节下载的lib文件夹下的jar包添加至工程中。

Ø  访问服务器发布地址:

http://localhost:8887/axiswebservice/services/HelloWorld将网页文件保存为HelloWorld.wsdl,并将此文件拷贝至axisclient工程下的WEB-INF目录下。

 

Ø  创建客户端测试类:com.ll.client.HelloWorldClient.java

最终效果如下图所示。

 

2)  编写客户端测试代码类:com.ll.client.HelloWorldClient.java,实现手工调用服务器,运行即可。具体代码如下。

 

下面介绍第二种方法,即通过WSDL2JAVA工具自动生成客户端调用代码。

1)  进入客户端工程所在WEB-INF目录,此目录下应该包括lib文件夹,axis所需jar包;HelloWorld.wsdl文件,生成客户端代码的描述。Dos命令窗口输入:

java-Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -o clientsrc Session -S trueHelloWorld.wsdl。命令输入完毕时候,无任何错误提示,表示生成成功,如下图所示。

2)  将上一步生成的clientsrc目录的代码拷贝至客户端工程中,如下图所示。


3)  编写客户端测试代码类:com.ll.client.HelloWorldClient.java,使用自动生成的客户端代码调用服务器方法。具体代码如下。

/**
     * 使用通过wsdl文件生成的客户端代码,调用服务器方法
     * 此方法是将直接通过服务器发布地址调用的相关方法,通过wsdl2java工具进行了封装,使得每次调用步骤精简
     * */
    public static void useClinetCode() {
       try {
           //获取服务
           HelloWorldService client =new HelloWorldServiceLocator();
           //获取服务类
           HelloWorld hello =client.getHelloWorld();
           //调用服务方法,输出返回结果
           String result =hello.sayHello("beyond");
           System.out.println("clientCall,result = " + result);
       } catch (Exception e) {
           e.printStackTrace();
       }
    }

.2  使用eclipse插件开发

使用eclipse webservice插件自动生成webservice服务器和客户端代码简单方便。下面介绍具体操作步骤。

1.2.1服务器

1)  创建web工程,名称为axiswebservice。

Ø  新建一个com.ll.server.HelloWorld.java,具体代码见2.1.2部分。

Ø  点击HelloWorld.java文件,然后右键,选择“newàotheràwebservice”,如下图所示。

 

Ø  点击“next”,如下图选择“publish the web service”选项。


 

Ø  点击“next”,选择要发布的方法,点击“finish”完毕或者点击“next”启动服务器。如下图所示。


 

2)  生成完毕之后,具体工程目录结构如下图所示。至此,服务器代码发布结束。


 

1.2.2客户端

使用服务器生成的HelloWorld.wsdl文件,生成客户端代码。具体操作如下。

1)  首选新建一个web工程,名为axisclient。

Ø  创建包com.ll.client

Ø  将服务器生成的HelloWorld.wsdl文件,拷贝至WEB-INF目录下

Ø  选择“HelloWorld.wsdl”,点击右键,选择“newàotheràweb service client”。如下图所示。


 

2)  点击“next”,如下图所示。


 

3)  点击“next”,选择生成客户端代码的位置,点击“finish”完成。最终的目录结构如下图所示。

4)  下面编写测试类,com.ll.client.HelloWorldClient.java。具体代码如下。

package com.ll.client;
 
import java.rmi.RemoteException;
 
import com.ll.server.HelloWorld;
 
public class HelloWorldClient {
 
    public static void main(String[] args) {
 
       HelloWorld hello = newcom.ll.server.HelloWorldProxy();
       try {
           String res =hello.sayHello("beyond");
           System.out.println("res = " + res);
       } catch (RemoteException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
    }
}



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值