webservice入门(3)---手把手教你用axis创建自己的webservice

本文详细介绍如何利用Apache Axis创建、发布并调用WebService。从搭建请求和响应对象开始,到使用Java2WSDL生成WSDL文件,再到WSDL2Java生成服务代码,并最终部署到Tomcat服务器上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

随着 SOA 的流行, webservice 开发也变得相当的热门。许多企业都将自己的网站迁移到 soa 的架构。今天我们来一起体验一下通过 axis 来创建、发布和调用 webservice 的过程。如果大家不太了解 SOA 请访问下面网址( http://www-900.ibm.com/cn/software/rational/solution/tech/soa_design.shtml

        在开始之前我默认大家已经具有axis的安装经验,如果对axis安装和配置发布有任何问题请看http://yangyang.javaeye.com/blog/56519 http://yangyang.javaeye.com/blog/56552 两篇文章。let's go!

       首先我们先假设一个需求。我们需要一个 service ,功能是给手机充值,充值成功后返回操作代码和消息。给手机充值需要手机号、充值金额、操作类型。操作成功或者失败后返回操作代码和消息。在这里我们将客户端的请求和服务器端响应进行了包装代码如下:

java 代码

1.          package com.yy.ws;   

2.          public class ClientRequest {   

3.               private String opType;   

4.               private int amount;   

5.               private String phoneNumber;   

6.               public int getAmount() {   

7.                   return amount;   

8.               }   

9.               public void setAmount( int amount) {   

10.                this .amount = amount;   

11.            }   

12.            public String getOpType() {   

13.                return opType;   

14.            }   

15.            public void setOpType(String opType) {   

16.                this .opType = opType;   

17.            }   

18.            public String getPhoneNumber() {   

19.                return phoneNumber;   

20.            }   

21.            public void setPhoneNumber(String phoneNumber) {   

22.                this .phoneNumber = phoneNumber;   

23.            }   

24.       }   

optype 代表操作类型,也可以用枚举类型。 amount 代表充值金额。 phoneNumber 代表手机号。

下面是服务器响应对象。如下:

java 代码

1.          package com.yy.ws;   

2.          public class ServerResponse {   

3.               private long resultCode;   

4.               private String message;   

5.               public String getMessage() {   

6.                   return message;   

7.               }   

8.               public void setMessage(String message) {   

9.                   this .message = message;   

10.            }   

11.            public long getResultCode() {   

12.                return resultCode;   

13.            }

14.            public void setResultCode( long resultCode) {   

15.                this .resultCode = resultCode;   

16.            }   

17.       }   

resultCode 代表充值操作代码。 message 代表服务器端操作成功与否的消息。

 

下面我们通过 axis 提供的一个工具 org.apache.axis.wsdl.Java2WSDL. 来产生 wsdl 文件。 Java2WSDL 是一个根据 axis 用户提供的 webservice 接口来产生相应的 wsdl 文件。在接口中我们定义了 webservice 的所有方法(服务)。如果大家不知道 wsdl 请查阅相应资料。 http://www.ibm.com/developerworks/cn/webservices/ws-intwsdl/part1/#N10054

interface 代码如下:

java 代码

1.   package com.yy.ws;   

2.     

3.   public interface MobileBoss {   

4.           public ServerResponse charge(ClientRequest req);   

5.   }  

这个接口定义了一个名字为 MobileBoss webservice, 其中一个服务名字为 charge 。下面我们通过 Java2WSDL 工具生成这个 ws wsdl 文件。

进入接口所在源文件的文件夹(包的最上层,如果包名是 com.yy.ws 则需要在 com 的上一层目录下如 classes ),我的文件夹结构是 classes/com/yy/ws/ 所以我需要进入源文件目录:

C:/ws>cd classes

在控制台输入如下命令:

C:/ws/classes> java org.apache.axis.wsdl.Java2WSDL -o mb.wsdl -l "http://localhost:8080/axis/services/MobileBoss" -n "urn:MobileBoss" -p"com.yy.ws" "urn:MobileBoss" com.yy.ws.MobileBoss

参数说明: -o 输出 wsdl 文件名称

                   -l 访问的 url

                  -n 命名空间

                 -p 包名 命名空间的名字( urn: 是命名空间的缩写,必须有!)

               com.yy.ws.MobileBoss 是接口的全路径。包名 + 类名。

如果没有抛出异常,我们就可以在 C:/ws/classes 文件夹下找到 mb.wsdl.

这个 mb.wsdl 文件描述的这个 ws 的所有信息,包括请求响应对象、访问 url 、端口等等信息。这个文件是由 axis Java2WSDL 工具生成的,怎么样?是不是很方便啊!

 

       下面我们来通过 org.apache.axis.wsdl.WSDL2Java 来生成相应的 webservice 代码。

进入 wsdl 文件所在目录。

C:/ws> cd classes

键入如下命令:

C:/ws/classes> java org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -S true -Nurn:MobileBoss com.yy.ws mb.wsdl

参数说明: -o 输出文件所在目录( .- 代表当前目录

                    -s 生成 server 端绑定代码

                   -d 发布范围

                  -S 是否产生发布和撤销 webservice deploy.wsdd undeploy.wsdd 文件。 ture 代表生成发布文件。

                  -Nurn: 命名空间 包名

                 mb.wsdl - wsdl 文件名。

如果没有抛出异常,我们就可以在 C:/ws/classes 文件夹下找到下面几个文件:

ClientRequest.java

MobileBoss.java

MobileBossService.java

MobileBossServiceLocator.java

MobileBossSoapBindingImpl.java

MobileBossSoapBindingSkeleton.java

MobileBossSoapBindingStub.java

ServerResponse.java

deploy.wsdd undeploy.wsdd

除了最后两个发布文件以外最重要的有两个文件,即 MobileBossSoapBindingImpl.java MobileBossServiceLocator.java

MobileBossSoapBindingImpl 代码如下:

java 代码

1.   java 代码

8.          package com.yy.ws;   

9.            

10.       public class MobileBossSoapBindingImpl implements com.yy.ws.MobileBoss{   

11.            public com.yy.ws.ServerResponse charge(com.yy.ws.ClientRequest in0) throws java.rmi.RemoteException {   

12.                return null ;   

13.            }

}   

我们需要在这个 webservice 中实现自己的业务方法!我们加入如下业务代码:

java 代码

             

8.          package com.yy.ws;   

9.            

10.       public class MobileBossSoapBindingImpl implements com.yy.ws.MobileBoss {   

16.            public com.yy.ws.ServerResponse charge(com.yy.ws.ClientRequest req)   

17.                    throws java.rmi.RemoteException {   

18.                String bizInfo = req.getPhoneNumber() + "/" + req.getOpType() + "/"   

19.                        + req.getAmount();   

20.                System.out.println(bizInfo);   

21.                System.out.println(req.getPhoneNumber() + "is charged successfully!" );   

22.                ServerResponse res = new ServerResponse();   

23.                res.setMessage(bizInfo); // save service informations.   

24.                res.setResultCode( 8888 ); // save result code.   

25.                return res;   

26.            }   

27.         

28.       }  

好了现在我们将 webservice 的实现代码发布到 tomcat axis web 应用中。如将你的代码拷贝到 axis/WEB-INF/classes

进入你的 deploy.wsdd 所在目录。

cd C:/tomcat5/webapps/axis/WEB-INF/classes/com/yy/ws

输入如下命令:

C:/tomcat5/webapps/axis/WEB-INF/classes/com/yy/ws>   java     org.apache.axis.client.AdminClient deploy.wsdd

AdminClient - 一个 axis 发布工具,会自动地将你的 webservice 发布到 WEB-INF 下的 server-config.wsdd 文件中。如果显示 :

Processing file deploy.wsdd
<Admin>Done processing</Admin>

则表示发布成功!

       好了,现在我们已经完成了创建和发布过程,接下来我们来进行最后一步工作 —— 调用我们写的 webservice!

     

java 代码

1.          package com.yy.ws.test;   

2.            

3.          import java.net.MalformedURLException;   

4.          import java.rmi.RemoteException;   

5.            

6.          import javax.xml.rpc.ServiceException;   

7.            

8.          import com.yy.ws.ClientRequest;   

9.          import com.yy.ws.MobileBoss;   

10.       import com.yy.ws.MobileBossService;   

11.       import com.yy.ws.MobileBossServiceLocator;   

12.       import com.yy.ws.ServerResponse;   

13.         

14.       public class Test {   

15.            public static void main(String args[]) throws ServiceException, MalformedURLException, RemoteException{   

16.                ClientRequest req = new ClientRequest();   

17.                req.setAmount( 1000 );   

18.                req.setOpType( "charge" );   

19.                req.setPhoneNumber( "13912345678" );   

20.                MobileBossService sl = new MobileBossServiceLocator();   

21.                //URL url = new URL("http://localhost:8080/axis/services/MobileBoss");   

22.                //s.getMobileBoss(url);   

23.                MobileBoss mb = sl.getMobileBoss(); //default port   

24.                ServerResponse resp = mb.charge(req);   

25.                System.out.println( "client result:" +resp.getResultCode()+ "/nclient message:" +resp.getMessage());   

26.            }   

27.       }   

结果如下:

服务器端显示:

13912345678|charge|1000
13912345678is charged successfully!

客户端显示:

client result:8888

client message:13912345678|charge|1000

      服务器段成功返回消息,大功告成!不是很难吧?!这篇文章的所有代码我都测试过,全部可以直接使用。希望能够对大家有所帮助。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值