月光博客

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

« 百度搜藏即将发布提高浏览体验的五十个最佳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
  • 文章排行:
  • 2.Kradeye
  • 今天是感恩节,也给您发了封email,接收一下,呵呵!
  • ip: 219.153.148.*  2006-11-23 22:12:27   回复该留言
  • 3.cugbig
  • 搞计算机的大都是靠团队合作的
    搞单打独斗的基本上就只有黑客和一些非常小的软件的作者了
  • ip: 220.175.39.*  2006-11-24 7:44:48   回复该留言
  • 6.中国牛
  • 虚心想请教一下,zblog如何才能够实现调用远程的数据库!
  • ip: 218.15.22.*  2006-11-24 16:33:47   回复该留言
  • 7.Forest
  • 天哪月光!google的网页快照突然能用了,吓死我了。你快看看。
  • ip: 58.61.29.*  2006-11-24 18:10:58   回复该留言
  • 9.williamlong
  • 你用了插件才能用的吧,我在普通方式下还是无法打开网页快照。
    引自 Forest
    天哪月光!google的网页快照突然能用了,吓死我了。你快看看。

  •   2006-11-24 19:24:59   回复该留言
  • 10.my2jia
  • 我这google的网页快照也能用,我没装任何插件
  • ip: 60.186.70.*  2006-11-24 21:31:22   回复该留言
  • 11.my2jia
  • 快照的地址好像已由http://www.google.com/search?q=cache......
    改为http://72.14.235.104/search?q=cache......了
  • ip: 60.186.70.*  2006-11-24 21:34:42   回复该留言
  • 16.williamlong
  • wsdd文件和deploy.bat放在同一个目录下即可。我是放在WEB-INF目录下,应该放哪个目录都可以吧。
  •   2006-11-28 12:21:03   回复该留言
  • 17.hellows
  • web service技术本身并不难,关键是如何使用web service来架构好你的系统,呵呵,这个是精髓啊
  • ip: 203.86.45.*  2006-11-30 17:29:13   回复该留言
  • 18.guan
  • 我觉得你说的都是很基础的东西,我想问一下,如果我的web service涉及到复杂数据类型,该怎么处理?
    web service是用xml和xml schema来表述的。
    请问,你怎么把xml schema与其wsdl联系起来?
    我在被这个问题困惑:(
  • ip: 202.202.5.*  2006-12-18 16:07:51   回复该留言
  • 19.williamlong
  • web service传的参数可以是任意类型的,直接定义好这个类型,然后发布,客户端自动生成的代码就会包含这个类的所有调用方法。
  •   2006-12-18 18:32:56   回复该留言
  • 20.snailwls
  • 我用的是eclipse3.1+my eclipse4.0,为什么在我的eclipse的file-->new-->other中,my eclipse下没有web service这一项,是一定要eclipse3.2+
    my eclipse5.0才会有web service吗?
  • ip: 218.75.77.*  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.......
    谢谢!
  • ip: 222.66.78.*  2007-1-24 18:09:31   回复该留言
  • 22.yugisjw
  • 楼主你好!我请加我msn可以吗? 请教您webservice问题谢谢!看到请加一下!谢谢啊
  • ip: 60.209.248.*  2007-2-6 10:16:06   回复该留言
  • 23.hiyouth
  • web service传的参数可以是任意类型的,直接定义好这个类型,然后发布,客户端自动生成的代码就会包含这个类的所有调用方法。

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

    不这样改我这边出现找不到服务的错误
  • ip: 121.32.165.*  2007-5-30 10:29:58   回复该留言
  • 27.南冥鱼
  • ibm这个片文章更好点,看了月光的有点云里雾里的,可能没有什么背景知识
    http://www.ibm.com/developerworks/cn/webservices/ws-startaxis/index.html
  • ip: 211.155.225.*  2007-6-27 14:48:46   回复该留言
  • 28.路过
  • 不错,谢谢了,正在学习这方面,虽然以前用过,但都是别人搭的框架,看过之后明白多了,真的谢谢了。
  • ip: 219.136.134.*  2007-7-26 21:26:47   回复该留言
  • 29.爬虫
  • 真的非常感谢,正好手上有个调别人的webservice服务的小功能,自己摸了几天,一直半懂不懂,看了你的简明提示,结果发觉调用真的是很简单。

    1.获取服务的wsdl
    2.用bat或其它工具生成 客户端java文件
    3.简单测试调用自动生成的java文件 调用。
    4.应用到自己的逻辑中,OK!
  • ip: 221.234.44.*  2007-8-9 10:39:02   回复该留言
  • 30.soulh5
  • deploy.bat这个怎么创建呀,我用的file->new->file就报错了,不知道用的是哪个?
  • ip: 221.2.149.*  2007-8-15 10:01:35   回复该留言
  • 31.soulh5
  • 双击deploy.bat程序一闪而过,发现并没有生成test文件夹
  • ip: 221.2.149.*  2007-8-15 11:36:18   回复该留言
  • 33.wang

  • 我刚接触这个不太懂 你这里面写的SayHello_PortType是什么,又是怎么生成的呢,为什么没有这个类。谢谢
  • ip: 123.122.70.*  2007-12-25 11:15:18   回复该留言
  • 35.学习者
  • SayHello_PortType这个类是怎么出来的?
    我生成也没有生成这个类啊?
    请教什么原因呢?
  • ip: 222.66.34.*  2008-5-7 11:41:34   回复该留言
  • 37.谢谢
  • 看了两天,今天看了你的帮助,终于搞通了,非常感谢。
  • ip: 221.221.188.*  2008-8-4 16:17:25   回复该留言
  • 40.老高
  • 可以使用axis提供的Java2WSDL功能生成所要发布类的 WSDL,步骤如下:
    1.在你的eclipse或myeclipse的项目中找到你引入的 axis.jar包,打开它,在其里面找到 org.apache.axis.wsdl下面的Java2WSDL类,然后以 Java application方式运行一下它
    2.打开菜单栏“run”-->“Debug”,在弹出框的左边找到“Java Application”项,在其里面你会看到“Java2WSDL”子项,点击它---> 在右面“Main”选项下有:“Project -- '你的项目名称' , Main class -- 'org.apache.axis.wsdl.Java2WSDL'”,这些信息是自动进去的,不需要改动;打开“Arguments”选项,在其下“Program arguments”中输入:
    Java代码
    -d -l"http://127.0.0.1:8080/TestWebService/services/SayHello" -o "sayHello.wsdl" com.test.SayHello

    -d -l"http://127.0.0.1:8080/TestWebService/services/SayHello" -o "sayHello.wsdl" com.test.SayHello

    然后点击"Debug"按钮,就可以生成你要的wsdl文件了。
    下面说下参数的意思:
    -d 这个选项是要生成 deploy.wsdd 和 undeploy.wsdd
    -l 这个选项是要生成webService将来要访问的地址,我做了个假设:http://127.0.0.1:8080/TestWebService/services/SayHello
    -o 这个选项是要生成wsdl文件,我假设了一个文件名:sayHello.wsdl
    com.test.SayHello 这个就是我们要发布的类,可以更换成你的发布类
  • ip: 121.28.80.*  2009-8-8 18:07:16   回复该留言
  • 42.TonyWang
  • 这两天正在研究这个,明天按这个思路再尝试,不知道是否能通!顶了!
  • ip: 59.151.106.*  2010-3-11 23:11:38   回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 跟随我的推特:跟随我的推特
  • 跟随新浪微博:跟随新浪微博
  • 通过Google订阅本站
  • 通过鲜果订阅本站
  • 通过电子邮件订阅本站

站内搜索

热文排行

最新评论及回复

最近发表

网站收藏

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

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