月光博客

青青子衿, 悠悠我心, 但为君故, 沉吟至今

« 百度搜藏即将发布提高浏览体验的五十个最佳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/ ]

本文链接地址:http://www.williamlong.info/archives/701.html
  • 文章排行:
  • 17.hellows
  • web service技术本身并不难,关键是如何使用web service来架构好你的系统,呵呵,这个是精髓啊
  • 2006-11-30 17:29:13
  • 18.guan
  • 我觉得你说的都是很基础的东西,我想问一下,如果我的web service涉及到复杂数据类型,该怎么处理?
    web service是用xml和xml schema来表述的。
    请问,你怎么把xml schema与其wsdl联系起来?
    我在被这个问题困惑:(
  • 2006-12-18 16:07:51
  • 20.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
  • 21.anthony
  • 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
    我这样子写,可是不通过呀!帮一下,好么?
    错误提示:'Java' is not recognised.......
    谢谢!
  • 2007-1-24 18:09:31
  • 23.hiyouth
  • web service传的参数可以是任意类型的,直接定义好这个类型,然后发布,客户端自动生成的代码就会包含这个类的所有调用方法。

    才不是呢,并不是所有类型都可以传的,尤其你在java和微软的东西之间互相调用的时候你就知道了,用这个一定要注意,类型越基本,越简单,就越好
  • 2007-3-20 13:46:07
  • 24.hiyouth
  • 还有 装上插件以后,那些wsdd,wsdl等文件都是可以自动生成的,无需再写构架上的代码,只要参数不变,改变业务就可以了,其他系统可以直接引用
  • 2007-3-20 13:48:57
  • 25.海豚湾
  • 楼主你好!我是一名工程硕士生正在写论文,想写一些新的东西, 请教您webservice问题谢谢!能否留联系电话.可发给我邮箱.
  • 2007-5-8 9:22:34
  • 26.失落的雨冬
  •   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>


    这里的
    <parameter name="className" value="server.SayHello.getName"/>
    要改成
    <parameter name="className" value="server.SayHello"/>
    吧.

    不这样改我这边出现找不到服务的错误
  • 2007-5-30 10:29:58
  • 27.南冥鱼
  • ibm这个片文章更好点,看了月光的有点云里雾里的,可能没有什么背景知识
    http://www.ibm.com/developerworks/cn/webservices/ws-startaxis/index.html
  • 2007-6-27 14:48:46
  • 29.爬虫
  • 真的非常感谢,正好手上有个调别人的webservice服务的小功能,自己摸了几天,一直半懂不懂,看了你的简明提示,结果发觉调用真的是很简单。

    1.获取服务的wsdl
    2.用bat或其它工具生成 客户端java文件
    3.简单测试调用自动生成的java文件 调用。
    4.应用到自己的逻辑中,OK!
  • 2007-8-9 10:39:02
  • 34.wang

  • 我刚接触这个不太懂 你这里面写的SayHello_PortType是什么,又是怎么生成的呢,为什么没有这个类。谢谢
  • 2007-12-25 11:15:18

发表评论:

◎声明:转载本文时请务必以超链接形式标明文章原始出处和作者,本文严禁商业网站转载。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 通过Google订阅本站
  • 通过鲜果订阅本站
  • 通过抓虾订阅本站
  • 通过电子邮件订阅本站

站内搜索


热文排行

最新评论

最近发表

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.

This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.