WebService是为程序服务的,只在浏览器中访问WebService是没有意义的。因此,在本节使用Java实现了一个控制台程序来调用上一节发布的WebService。调用WebService的客户端代码如下:

package client;

import javax.xml.namespace.QName;

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) throws Exception

{

// 使用RPC方式调用WebService

RPCServiceClient serviceClient = new RPCServiceClient();

Options options = serviceClient.getOptions();

// 指定调用WebService的URL

EndpointReference targetEPR = new EndpointReference(

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

options.setTo(targetEPR);

// 指定getGreeting方法的参数值

Object[] opAddEntryArgs = new Object[] {"超人"};

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

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

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

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

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

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

// 下面是调用getPrice方法的代码,这些代码与调用getGreeting方法的代码类似

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

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

System.out.println(serviceClient.invokeBlocking(opAddEntry, new Object[]{}, classes)[0]);

}

}

运行上面的程序后,将在控制台输出如下的信息:

你好 超人

443

在编写客户端代码时应注意如下几点:

1.客户端代码需要引用很多Axis2的jar包,如果读者不太清楚要引用哪个jar包,可以在Eclipse的工程中引用Axis2发行包的lib目录中的所有jar包。

2.在本例中使用了RPCServiceClient类的invokeBlocking方法调用了WebService中的方法。invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。

3.如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同。

4.在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是元素的targetNamespace属性值,下面是SimpleService类生成的WSDL文件的代码片段:

xmlns:ns="http://ws.apache.org/axis2" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"

xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"

targetNamespace="http://ws.apache.org/axis2">

java axis2 开发webservice_利用Axis2开发WebService(3)—用Java实现调用WebService的客户端程序 | 学步园...相关推荐

  1. python手机app开发_利用python开发app实战的方法

    我很早之前就想开发一款app玩玩,无奈对java不够熟悉,之前也没有开发app的经验,因此一直耽搁了.最近想到尝试用python开发一款app,google搜索了一番后,发现确实有路可寻,目前也有了一 ...

  2. java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用

    在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码.而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI( ...

  3. java调用存储过程sqlserver_Java调用SqlServer存储过程怎么实现 | 学步园

    在使用Java开发时,经常会遇到调用SqlServer存储过程的问题.下面学步园小编来讲解下Java调用SqlServer存储过程怎么实现? Java调用SqlServer存储过程怎么实现 1.数据库 ...

  4. java调c++代码_Java中调用C++代码的实现 | 学步园

    JNI为  Java Native Interface 即Java本地接口,使用此种方式可以对C/C++代码进行调用,其在本质上是对C/C++生成的动态库进行调用而不是直接对C/C++代码进行调用 J ...

  5. android平板开发板,利用开源开发板自制的平板电脑 | 雷锋网

    这款自制"平板电脑"主要部分是一块国产的开源开发板Mixtile(米太),外接一块TFT转接板装上7寸的触摸屏,配上两块亚克力(ACRYLIC)板做为设备的外壳(大家不要太在意整机 ...

  6. java输出体重指数_Android开发–身高体重指数(BIM)计算–完成BMI程序 | 学步园...

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:修改表达用户界 ...

  7. java jmx 监控_利用VisualVm和JMX远程监控Java进程

    在前一篇文章里我们发现通过jstatd + VisualVm的方式,不能获得Java进程的CPU.线程.MBean信息,这时JMX就要登场了. 自Java 6开始,Java程序启动时都会在JVM内部启 ...

  8. java cxf 不使用springmvc_使用cfx与springMVC集成发布与调用webservice

    客户端调用代码 Client.java package com.quickmap.common; import javax.xml.namespace.QName; import javax.xml. ...

  9. php 开发桌面应用,winbinder开发php桌面应用程序 | 学步园

    昨天无意中看到php桌面应用开发,今天特意来测试下. 对于phper来开发桌面小应用,却是不错. 依据example中的demo,改写一个web浏览器,让他定时访问,一些页面. 关键代码: defin ...

最新文章

  1. 使用NetBeans IDE开发C程序
  2. 基于GeoMipmap的地形系统。
  3. isnull pivot server sql_SQLServer行列转换 Pivot UnPivot
  4. 运营商线路细分_呼叫中心各种线路的区分
  5. 判断某一天是这一年的第多少天
  6. 跨平台---udpclient与udpserver
  7. CentOS 6 和 CentOS 7 防火墙的关闭
  8. GDC2016 【巫师3 狂猎】的游戏事件工作流
  9. 3s新闻周刊第9期,本期策划:电子地图的出路
  10. windows系统vbs脚本 恶搞将系统搞崩 死机 以及解决
  11. VC++的链接错误LNK2001zz
  12. linux网页视频黑边,ffmpeg去除视频黑边命令
  13. Zookeeper可以干什么
  14. 双系统卸载Linux,重装Deepin
  15. c语言 矩阵键盘端口定义,3*5矩阵键盘(IO任意定义)
  16. PHP C#-QQ网站bkn算法
  17. 微信小程序地图组件 无限闪烁导致小程序崩溃
  18. SQL server 2008 定义数据类型
  19. 服务注册与发现(上)
  20. 使用Github Actions自动部署vue项目到nginx服务器

热门文章

  1. Windows11 Docker镜像存储路径更改(非C盘路径)
  2. ACM比赛技巧之文件数据输入与输出
  3. 【Python】自动化升级所有pip安装的包
  4. C#LeetCode刷题之#532-数组中的K-diff数对(K-diff Pairs in an Array)
  5. EasyUI中文帮助文档
  6. corba的兴衰_代码广播的兴衰
  7. 编程的第一步都要使能时钟吗_在您的第一份编程工作中要做的11件事
  8. Python IDE 神器,PyCharm 2020.1 稳定版发布
  9. Hadoop 生态系列之 HDFS
  10. anaconda管理环境