博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个简单的AXIS远程调用Web Service示例
阅读量:5925 次
发布时间:2019-06-19

本文共 2538 字,大约阅读时间需要 8 分钟。

hot3.png

我们通常都将编写好的Web Service发布在Tomcat或者其他应用服务器上,然后通过浏览器调用该Web Service,返回规范的XML文件。但是如果我们不通过浏览器调用,而是通过客户端程序调用,该如何实现?

     接下来,我们利用Eclipse作为开发工具,演示一个Axis调用WebService的简单示例。步骤如下:
    
     第一步:新建Web Project 。
     第二步:导入AXIS类库。(官方下载:)(即把下载包里../lib/目录下的jar文件拷贝到工程的classpath下。  )
     第三步:新建一个简单的连接字符串的类HelloWorld.java:

package com.mzh.webservice;

public class HelloWorld {
    
    public String connectStr(String str1,String str2,int flag){
        String resultStr="no str";
        if(flag==1){
            resultStr=str1+"---"+str2;
        }else if(flag==2){
            resultStr=str2+"---"+str1;
        }
        System.out.println(resultStr);
        return resultStr;
    }
}

 

     第四步:右击HelloWorld.java---Web Services---Create Web service.依次点击下一步……finish。此时发现WebContent目录下生成一个wsdl目录,目录下有一个HelloWorld.wsdl
     第五步:测试 web service :右击HelloWorld.wsdl---Web Services---Test with Web Services Explorer---点击方法名connectStr----输入参数mzh,zyd,1---点go.此时会发现控制台输出mzh---zyd,说明 测试成功。WebService没有问题。
      第六步:编写客户端调用类,利用AXIS远程调用HelloWorld.(为了体现远程调用,把此类放到另外一个工程里去)代码如下:

import java.rmi.RemoteException;

import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class HelloWorldTest {

   public String invokeRemoteFuc(){
      String endpoint=
            "http://192.168.1.236:8080/Axis2/services/HelloWorld";
      String result ="no result!";
      Service service = new Service();
      Call call;
      try {
          call=(Call)service.createCall();
          call.setTargetEndpointAddress(endpoint);//远程调用路径
     call.setOperationName("connectStr");//调用的方法名
      //设置参数名:
    
   call.addParameter("str1", //参数名
    org.apache.axis.encoding.XMLType.XSD_STRING,//参数类型:String
    javax.xml.rpc.ParameterMode.IN);//参数模式:'IN' or 'OUT'
    
   call.addParameter("str2", //参数名
    org.apache.axis.encoding.XMLType.XSD_STRING,//参数类型:String
    javax.xml.rpc.ParameterMode.IN);//参数模式:'IN' or 'OUT'
    
   call.addParameter("flag", //参数名
    org.apache.axis.encoding.XMLType.XSD_INT,//参数类型:INT
    javax.xml.rpc.ParameterMode.IN);//参数模式:'IN' or 'OUT'
      //设置返回值类型:
    call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//返回值类型:String
    String str1="mzh";
    String str2="zyd";
    int flag=1;
    result = (String)call.invoke(new Object[]{str1,str2,flag});//远程调用
     } catch (ServiceException e) {
    e.printStackTrace();
     } catch (RemoteException e) {
    e.printStackTrace();
     }
    return result;
   }
//测试:
 public static void main(String[] args){
      HelloWorldTest test = new HelloWorldTest();
      String result = test.invokeRemoteFuc();
      System.out.println(result);
  }

}

 

   注意:1、设置方法名和参数名的时候,必须与被调用的WebService保持一致;2、传递的参数需封装到了一个Object数组里)
    第七步:测试:HelloWorldTest ---Run as---Java application,如果发现控制台正确输出  mzh---zyd.说明测试成功。
     第八步:至此,大功告成!

转载于:https://my.oschina.net/yzbty32/blog/709744

你可能感兴趣的文章
四种DCOM错误的区别,0x80080005 0x800706be 0x80010105 0x
查看>>
深入浅出Docker(三):Docker开源之路
查看>>
同一个PC只能运行一个应用实例(考虑多个用户会话情况)
查看>>
js深拷贝和浅拷贝
查看>>
WPF:在ControlTemplate中使用TemplateBinding
查看>>
loadrunner 参数化数据更新方式
查看>>
AngularJS快速入门指南09:SQL
查看>>
oncontextmenu事件
查看>>
从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构)
查看>>
【转】Ubuntu 修改hosts
查看>>
经典语句,看看让心灵宁静
查看>>
Restive.js – 轻松让网站变成响应式和自适应
查看>>
基于HTML5手机上下滑动翻页特效
查看>>
【转】URL编码(encodeURIComponent和decodeURIComponent)
查看>>
HTML
查看>>
【DataStructure】The description of Java Collections Framework
查看>>
(笔试题)和0交换的排序
查看>>
Linq-语句之Select/Distinct和Count/Sum/Min/Max/Avg
查看>>
打造自己博客(wordpress)的wap手机版本
查看>>
APP-PER-50022: Oracle Human Resources could not retrieve a value for the User Type profile option.
查看>>