青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 百度搜藏即将发布提高浏览体验的五十个最佳FireFox扩展插件 »

使用Axis开发Web Service程序

  今天是感恩节,差点又要在公司加班了。好在Web Service程序并不是特别难搞,下午终于在eclipse下调通过了,正确产生了服务器端和客户端的Java代码,apache的东西的确很不错。

  说道Web Service的程序开发,八个月前我加班调试公司和中国电信的商务领航系统的接口的时候,用的就是Web Service,Web Service有很多优点,使用Web Service可以在不同编程语言间实现数据交换,而我那时对Web Service也不熟,就由同事帮我生成了一大堆Web Service的框架代码,我则只单独开发业务代码。

  这次的另外一个项目也要用Web Service了,不过人手也少了,没有人帮做Web Service了,只好自己动手。

  好在开发前,有个同事先给我们不熟悉Web Service的程序员进行了一些培训,我才知道原来以前的Web Service都是可以自动生成代码的,而且也不难,试了一个下午客户端和服务器端的Web Service代码就都调试通过了,真不错。

  为了更多喜爱开发的程序员也能迅速了解Web Service的开发,我这里整理了一些通过Axis开发Web Service的一些要点,希望能让不熟悉Web Service的开发人员能够迅速掌握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文件内容如下:

<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.getName"/>
  <parameter name="allowedMethods" value="*"/>
 </service>
</deployment>

  3、发布服务:

  编辑一个deploy.bat,Axis_Lib为axis.jar路径。内容如下:

set Axis_Lib=D:\workspace\test\WEB-INF\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 就会显示服务列表。

  4、生成客户端client stub文件

  在浏览器上访问服务器端的服务,可以下载到WSDL文件,通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码。

  编写一个WSDL2Java.bat文件,其内容如下:

set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\workspace\test\src
set Package=server.SayHello
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl

  执行这个批处理文件就可以生成client stub.

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

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

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

import java.net.URL;
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(retValue);

    }

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

  至此,整个服务器端和客户端的Web Service框架代码就完成了,剩下的就是在里面加入你的业务代码了,怎么样,Web Service并不难开发吧。



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/701.html
  • 文章排行:
  • 1.Kradeye
  • 自己做不挺好吗,为什么还要上班?
  • 2006/11/23 21:57:58   支持(36)反对(10) 回复
  • 2.南冥鱼
  • ibm这个片文章更好点,看了月光的有点云里雾里的,可能没有什么背景知识
    http://www.ibm.com/developerworks/cn/webservices/ws-startaxis/index.html
  • 2007/6/27 14:48:46   支持(17)反对(11) 回复
  • 3.karying
  • 如果我只需要做一个android的客户端,和用C#做的服务器端通信,还有必要去配置axis吗
  • 2011/3/30 11:34:42   支持(12)反对(6) 回复
  • 4.hellows
  • web service技术本身并不难,关键是如何使用web service来架构好你的系统,呵呵,这个是精髓啊
  • 2006/11/30 17:29:13   支持(11)反对(6) 回复
  • 5.guan
  • 我觉得你说的都是很基础的东西,我想问一下,如果我的web service涉及到复杂数据类型,该怎么处理?
    web service是用xml和xml schema来表述的。
    请问,你怎么把xml schema与其wsdl联系起来?
    我在被这个问题困惑:(
  • 2006/12/18 16:07:51   支持(13)反对(10) 回复
  • 6.my2jia
  • 快照的地址好像已由http://www.google.com/search?q=cache......
    改为http://72.14.235.104/search?q=cache......了
  • 2006/11/24 21:34:42   支持(11)反对(9) 回复
  • 7.wang

  • 我刚接触这个不太懂 你这里面写的SayHello_PortType是什么,又是怎么生成的呢,为什么没有这个类。谢谢
  • 2007/12/25 11:15:18   支持(9)反对(7) 回复
  • 8.TonyWang
  • 这两天正在研究这个,明天按这个思路再尝试,不知道是否能通!顶了!
  • 2010/3/11 23:11:38   支持(7)反对(5) 回复
  • 9.williamlong
  • web service传的参数可以是任意类型的,直接定义好这个类型,然后发布,客户端自动生成的代码就会包含这个类的所有调用方法。
  • 2006/12/18 18:32:56   支持(10)反对(9) 回复
  • 10.yugisjw
  • 楼主你好!我请加我msn可以吗? 请教您webservice问题谢谢!看到请加一下!谢谢啊
  • 2007/2/6 10:16:06   支持(11)反对(10) 回复
  • 14.dplead
  • 月光大哥,你的博客有超多的指导文章,谢谢你分享了
  • 2011/3/8 9:44:24   支持(8)反对(7) 回复
  • 16.williamlong
  • 可能各地的网络环境不同吧,我用电信的ADSL还是无法打开快照。
  • 2006/11/24 22:12:44   支持(6)反对(6) 回复
  • 17.snailwls
  • 我用的是eclipse3.1+my eclipse4.0,为什么在我的eclipse的file-->new-->other中,my eclipse下没有web service这一项,是一定要eclipse3.2+
    my eclipse5.0才会有web service吗?
  • 2007/1/4 15:58:51   支持(9)反对(9) 回复
  • 18.海豚湾
  • 楼主你好!我是一名工程硕士生正在写论文,想写一些新的东西, 请教您webservice问题谢谢!能否留联系电话.可发给我邮箱.
  • 2007/5/8 9:22:34   支持(6)反对(6) 回复
  • 19.路过
  • 不错,谢谢了,正在学习这方面,虽然以前用过,但都是别人搭的框架,看过之后明白多了,真的谢谢了。
  • 2007/7/26 21:26:47   支持(9)反对(9) 回复
  • 20.爬虫
  • 真的非常感谢,正好手上有个调别人的webservice服务的小功能,自己摸了几天,一直半懂不懂,看了你的简明提示,结果发觉调用真的是很简单。

    1.获取服务的wsdl
    2.用bat或其它工具生成 客户端java文件
    3.简单测试调用自动生成的java文件 调用。
    4.应用到自己的逻辑中,OK!
  • 2007/8/9 10:39:02   支持(11)反对(11) 回复
  • 21.soulh5
  • deploy.bat这个怎么创建呀,我用的file->new->file就报错了,不知道用的是哪个?
  • 2007/8/15 10:01:35   支持(7)反对(7) 回复
  • 22.壹小时
  • 月光学的是java还是微软一盘的
  • 2009/11/10 15:31:37   支持(7)反对(7) 回复
  • 23.1465963618465
  • hello ,
    楼主,你的deploy用法不对吧,Beikao帝(Http://Www.Beikaodi.Com/word/deploy.html)中的例句好像不是你这么用的
    time:12:06:58 PM
  • 2016/6/15 12:08:26   支持(0)反对(0) 回复
  • 24.cugbig
  • 搞计算机的大都是靠团队合作的
    搞单打独斗的基本上就只有黑客和一些非常小的软件的作者了
  • 2006/11/24 7:44:48   支持(8)反对(9) 回复
  • 25.Forest
  • 天哪月光!google的网页快照突然能用了,吓死我了。你快看看。
  • 2006/11/24 18:10:58   支持(8)反对(9) 回复
  • 26.my2jia
  • 我这google的网页快照也能用,我没装任何插件
  • 2006/11/24 21:31:22   支持(7)反对(8) 回复
  • 27.又帅又可爱
  • 马上学习一下!哈哈。
  • 2006/11/28 10:07:58   支持(13)反对(14) 回复
  • 28.学习者
  • SayHello_PortType这个类是怎么出来的?
    我生成也没有生成这个类啊?
    请教什么原因呢?
  • 2008/5/7 11:41:34   支持(7)反对(8) 回复
  • 29.someguy
  • 哥们, 非常好的axis1.4入门文章,我代表广大人们感谢你.
    不过指出一个错误:
    deploy.wsdd文件的内容
    <parameter name="className" value="server.SayHello.getName"/>
    应该为
    <parameter name="className" value="server.SayHello"/>

    className 嘛,应该是类名,你写成了方法名了
  • 2010/4/23 16:34:48   支持(9)反对(10) 回复
  • 30.Kradeye
  • 今天是感恩节,也给您发了封email,接收一下,呵呵!
  • 2006/11/23 22:12:27   支持(7)反对(9) 回复
  • 31.my2jia
  • XXX真是变幻莫测
    现在快照又不能访问了
  • 2006/11/24 22:48:18   支持(7)反对(9) 回复
  • 32.williamlong
  • wsdd文件和deploy.bat放在同一个目录下即可。我是放在WEB-INF目录下,应该放哪个目录都可以吧。
  • 2006/11/28 12:21:03   支持(11)反对(13) 回复
  • 33.hiyouth
  • 还有 装上插件以后,那些wsdd,wsdl等文件都是可以自动生成的,无需再写构架上的代码,只要参数不变,改变业务就可以了,其他系统可以直接引用
  • 2007/3/20 13:48:57   支持(7)反对(9) 回复
  • 34.soulh5
  • 双击deploy.bat程序一闪而过,发现并没有生成test文件夹
  • 2007/8/15 11:36:18   支持(8)反对(10) 回复
  • 36.中国牛
  • 虚心想请教一下,zblog如何才能够实现调用远程的数据库!
  • 2006/11/24 16:33:47   支持(8)反对(11) 回复
  • 37.hiyouth
  • web service传的参数可以是任意类型的,直接定义好这个类型,然后发布,客户端自动生成的代码就会包含这个类的所有调用方法。

    才不是呢,并不是所有类型都可以传的,尤其你在java和微软的东西之间互相调用的时候你就知道了,用这个一定要注意,类型越基本,越简单,就越好
  • 2007/3/20 13:46:07   支持(10)反对(13) 回复
  • 38.谢谢
  • 看了两天,今天看了你的帮助,终于搞通了,非常感谢。
  • 2008/8/4 16:17:25   支持(8)反对(11) 回复
  • 40.中国牛
  • 看了半天,搞不懂是啥东西!
  • 2006/11/24 16:32:08   支持(6)反对(10) 回复
  • 41.又帅又可爱
  • 月光大哥,第2步编写wsdd文件的这个文件放在哪里啊?
  • 2006/11/28 11:09:04   支持(5)反对(10) 回复
  • 42.williamlong
  • 你用了插件才能用的吧,我在普通方式下还是无法打开网页快照。
    引自 Forest
    天哪月光!google的网页快照突然能用了,吓死我了。你快看看。

  • 2006/11/24 19:24:59   支持(5)反对(11) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.