2024年2月3日发(作者:)
Webservice接口开发
Author:Geloin
目 录
1
2
准备工作................................................................................................................. 1
服务器端................................................................................................................. 1
2.1 主程序 .......................................................................................................... 1
2.2 .................................................................................................. 2
2.3 传值方式 ...................................................................................................... 3
2.4 打包 .............................................................................................................. 4
2.5 发布 .............................................................................................................. 6
3 客户端..................................................................................................................... 8
3.1 导入包 .......................................................................................................... 8
3.2 示例代码 ...................................................................................................... 8
3.3 代码解析 .................................................................................................... 10
3.3.1 设定服务器地址.............................................................................. 10
3.3.2 设定action ...................................................................................... 10
3.3.3 设定要调用的方法名...................................................................... 11
3.3.4 设定客户端控件.............................................................................. 11
3.3.5 设定命名空间.................................................................................. 11
3.3.6 设定需要传送的值.......................................................................... 11
3.3.7 设定返回数据类型.......................................................................... 11
3.3.8 获取返回结果.................................................................................. 12
1 准备工作
至/axis2/下载axis2的bin及war包,分别解压之,在环境变量中添加AXIS2_HOM,将放置到tomcat/webapps目录下,启动tomcat,用浏览器打开localhost:8080/axis2,如下图所示:
2 服务器端
2.1 主程序
服务器端可以是任何一个程序,例如下面的例子:
public class Test {
// 此程序返回一个字符串
public String test1(String arg) {
}
// 此程序返回一个一维数组
public String[] test2(String arg) {
String[] result = new String[]{arg};
return result;
1 / 15
return arg + “测试”;
}
// 当返回值为多维数组时,将之转化为一维数组返回
public String[] test3(String arg) {
String[] result = new String[]{“测试,” + arg};
}
// 当返回值为其它类型,例如自定义类型、Map、List等时,将其序列化(冷冻或腌成咸菜)后返回
public byte[] test4(String arg) {
}
}
Map
(“测试”, arg);
rayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
bject(map);
return Array();
return result;
2.2
需要在根目录下建立META-INF文件夹,文件夹下放置和文件,最好自己写好文件,不然导出的时候可能会出错。
文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
2 / 15
class="sageReceiver" /> class="sageReceiver" /> class="sageReceiver" /> class="sageReceiver" /> 2.3 传值方式 上文中提及到传值方式,即: class="sageReceiver" />片段,在AXIS2中有两种传值方式,分别为: sageReceiver:即需要客户端传参数过来,又返回值。 nlyMessageReceiver:需要客户端传参数过来,但不返回值。 3 / 15 2.4 打包 在Eclipse下右键点击项目名,Export..,JAR file,在JAR File Specification进行如下勾选: 注意,文件名的后缀为aar,Next后进行如下勾选: 4 / 15 Next后进行如下勾选: 5 / 15 注意,请写好文件,如下所示: Manifest-Version: 1.0 Class-Path: lib/ 2.5 发布 用浏览器打开localhost:8080/axis2,如下图所示: 6 / 15 点击Administration,登录,用户名为admin,密码为axis2,如下图所示: 点击upload Service,如下图所示: 7 / 15 按照提示上传aar文件即可,其中,aar文件是2.4中打包时得到的文件。 3 客户端 3.1 导入包 需要使用的包如下图所示: 3.2 示例代码 import的包如下图所示: 8 / 15 代码如下图所示: // 服务器地址 String serviceAddress = "localhost:8888/axis2/services/testService"; // 服务器对应的action,如果不知道的话随便写,系统运行时会提示你的 String action = ""; // 方法名 String methodName = "test1"; // 客户端控件 RPCServiceClient serviceClient = new RPCServiceClient(); Options options = ions(); EndpointReference targetEPR = new EndpointReference(serviceAddress); (targetEPR); // 命名空间 QName qName = new QName(action, methodName); // 需要传递给服务器的值 Object[] values = new Object[]{license}; // 返回值的类型,基本类型为 Class<?>[] returnType = new Class[]{}; // 返回结果 Object[] result = Blocking(qName, values, returnType); 9 / 15 return result[0].toString(); 3.3 代码解析 3.3.1 设定服务器地址 首先,你需要设定webservice服务器的地址,即: String serviceAddress = "localhost:8888/axis2/services/testService"; 登际localhost:8080/axis2,点击Services,如下图所示: 如上图所示,会列出所有webservice服务的地址及能够使用的方法。 3.3.2 设定action 如以下代码所示: 10 / 15 String action = ""; action的值可以随便写,如有错误,程序在执行过程中会给予提示。 3.3.3 设定要调用的方法名 如以下代码所示: String methodName = "test1"; 这里指的是要调用服务器上的哪个方法。 3.3.4 设定客户端控件 如以下代码所示: RPCServiceClient serviceClient = new RPCServiceClient(); Options options = ions(); EndpointReference targetEPR = new EndpointReference(serviceAddress); (targetEPR); 这一部分为公用代码,直接拷贝即可。 3.3.5 设定命名空间 如以下代码所示: QName qName = new QName(action, methodName); 这一部分为公用代码,直接拷贝即可。 3.3.6 设定需要传送的值 如以下代码所示: Object[] values = new Object[]{license}; 这里设定的是要传递给服务器的参数。 3.3.7 设定返回数据类型 如以下代码所示: Class<?>[] returnType = new Class[]{}; 这里设定的是服务器返回给客户端的值的类型,分为以下几种: 11 / 15 (1) 简单类型的参数,如String、int、long、double等待,使用以下代码: Class<?>[] returnType = new Class[]{ }; Class<?>[] returnType = new Class[]{ }; Class<?>[] returnType = new Class[]{}; (2) 一维数组和二维数组,使用以下代码: Class<?>[] returnType = new Class[]{String[].class}; (3) 复杂数据类型,即通过序列化的数据类型,使用以下代码: Class<?>[] returnType = new Class[]{byte[].class}; 3.3.8 获取返回结果 如以下代码所示: Object[] result = Blocking(qName, values, returnType); return result[0].toString(); 获取服务器返回的结果,有以下几种情况: (1) 简单数据类型,使用以下代码: Object[] result = Blocking(qName, values, returnType); String result = ""; if (null != obj && > 0) { result = obj[0].toString(); } else { } (2) 一维数组,使用以下代码: Object[] obj = Blocking(opQName, values, returnType); String[] result = null; if (null != obj && > 0) { result = (String[]) obj[0]; result = null; } else { } 12 / 15 result = null; (3) 多维数组,使用以下代码: Object[] obj = Blocking(qName, values, returnType); String[] result = null; if (null != obj && > 0) { result = (String[]) obj[0]; // 分解多维数组 for (String s : result) { String[] array = (","); for (String ss : array) { ("<" + ss + "> "); } n(); } } else { result = null; } (4) 复杂对象,传递序列化后的值,需要解冻(回鲜): Object[] obj = Blocking(qName, values, returnType); Map if (null != obj && > 0) { byte[] buffer = (byte[]) obj[0]; ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer)); result = (Map } else { result = null; } 13 / 15
本文发布于:2024-02-03 15:11:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170694429250724.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |