一个使用AXIS发布并调用Web Service的例子

 

一、实验要求

       1.编写两个程序,分别实现两个数的加法和减法逻辑,程序的接口定义如下:

interface CalculatorAdd{

public double Add(double x, double y);}

interface CalculatorSub{

public double Add(double x, double y);}

  2将这两个程序发布为Web服务

       方法1:发布一个基于pojowebservice

       方法2:利用services.xml来发布webservice

  3.  编写调用客户端程序,分别调用加法和减法,并输出预期的计算结果

二、实验设备(环境)及要求

  1Java运行环境 JDK1.6版本

  2Servlet容器运行环境Tomcat 6.0版本

 3Webservice容器运行环境AXIS2 1.5.war

 4Web服务客户端运行环境AXIS2 1.5类库

三、实验前期准备

1.搭建Web服务平台环境

axis2-1.5.1-war.zip文件解压到相应的目录,将目录中的axis2.war文件放到<Tomcat安装目>/webapps目录中,并启动Tomcat

2.测试web服务运行环境运行是否正常

 在浏览器地址栏中输入如下的URLhttp://localhost:8080/axis2/,在浏览器中显示AXIS运行控制台,运行正常。

3.编写服务端逻辑实现类

建立一个java Project工程。编写Java程序分别实现CalculatorAddCalculatorSub接口

四、发布一个基于pojowebservice

// Calculator.java

public class Calculator {

       public int CalculatorAdd(int i, int j){

              return i+j;

       }

       public int CalculatorSub(int i, int j){

              return i-j;

       }

}

步骤:

a.       编写Calculator.javaCalculator.java编译后的class文件放入<Tomcat安装目>/webapps/axis2/WEB-INF/pojo目录下如果没有pojo文件夹,则自己创建,注意Calculator.java不要加包。

b.       输入http://localhost:8080/axis2/services/listServices 在页面看到所有已发布的可见的webservice,本实验的webservice名为类名Calculator

c.        下面我们编写java程序的客户端来调用我们写的webservice

package client;

 

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.rpc.client.RPCServiceClient;

 

public class RPCclient {

       public static void main(String[] args) {

               //  使用RPC方式调用WebService       

        RPCServiceClient serviceClient;

               try {

                      serviceClient = new RPCServiceClient();

               Options options = serviceClient.getOptions();

                 

               //  指定调用WebServiceURL

               EndpointReference targetEPR = new EndpointReference(

                          "http://localhost:8080/axis2/services/Calculator");

               

               options.setTo(targetEPR);

              

               //  指定CalculatorSub方法的参数值

               Object[] opAddEntryArgs = new Object[] {3.4,5};

              

               //  指定CalculatorSub方法返回值的数据类型的Class对象

               Class[] classes = new Class[] {Double.class};

           

               //  指定要调用的CalculatorSub方法及WSDL文件的命名空间

               QName opAddEntry = new QName("http://ws.apache.org/axis2", "CalculatorSub ");

                 

               //  调用CalculatorSub方法并输出该方法的返回值

               System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);

                                  

} catch (AxisFault e) {

                     // TODO Auto-generated catch block

                     e.printStackTrace();

              }

         }

       }

d.       运行(注意web服务已经启动)

 

五、利用services.xml来发布webservice

步骤:

a.       编写带有包名serviceCalculator.java编译生成class文件。

b.       编写AXIS的服务发布描述文件services.xml

c.        将服务实现类和service.xml打包,按照标准格式打包为.aar 过程举例:在d盘根目录下建立一个MyDemo文件夹,有在MyDemo文件夹下建立一个META-INF文件夹和一个名为包名service的文件夹。将service.xml放在META-INF文件夹下;将Calculator.class放在service文件夹下。进入DOS界面,输入D: / MyDemo >jar  cvf  MyServic.aar .  (注意后面有个点)。

d.       部署服务。拷贝打包好的aar文件到<Tomcat安装目>/webapps/axis2/WEB-INF/services目录下。

e.       输入http://localhost:8080/axis2/services/listServices 在页面看到所有已发布的可见的webservice,本实验的webservice名为类Calculator

f.         下面我们编写java程序的客户端来调用我们写的webservice。如基于pojo方法的客户端程序一样。

services.xml内容如下:

<service name="Calculator">

    <description>

        Calculator Service

    </description>

    <parameter name="ServiceClass">

        service.Calculator 

    </parameter>

    <messageReceivers>

        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"

            class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />

        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"

         class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />

    </messageReceivers>

</service>

 

六.改进客户端实现方法

以上这种方法编写客户端程序太麻烦,所有的调用都得我们自己写。现在我们用用axis提供的工具wsdl2java来生成客户端stub,这样我们调用远程webservice就像调用本地一样方便。

利用命令wsdl2java -uri http://localhost:8080/axis2/services/ Calculator?wsdl -p client -o d:/stub 其中-url参数指定了wsdl文件的,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。就可以得到stub。可以在环境变量里加入AXIS2_HOME=D:Program/Filesaxis2(注意这里是你的axsi2的工具解压目录);在path里加入%AXIS2_HOME%/bin。之后利用上述命令。

生成的stub文件下有一个名为src的文件夹和一个build.xmlsrc的文件夹里面的client文件夹包含CalculatorCallbackHandler.javaCalculatorStub.java。将client文件夹拷入Eclipsesrcsrc文件夹下;将build.xml放在工程的根目录下。编写客户端程序。代码如下。

package client;

import org.apache.axis2.AxisFault;

public class CalculatorStubClient {

      public static void main(String[] args) {

try {

                    CalculatorStub stub = new CalculatorStub();

                    CalculatorStub.CalculatorAdd add = new CalculatorStub.CalculatorAdd();

                    add.setI(3);

                    add.setJ(7);

                    System.out.println(stub.calculatorAdd(add).get_return());

             } catch (Exception e) {

                    e.printStackTrace();

             }

      }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值