axis2 webService开发指南(3)
复杂对象类型的WebService
这次我们编写复杂点的WebService方法,返回的数据是我们定义属性带getter、setter方法JavaBean,一维数组、二维数组等
1、服务源代码
新建一个web project项目
代码如下:
package com.amy.service.imple; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random; import com.amy.model.MUser; /**
* 复杂类型的webservice实现
*
* @author zhujinrong
*
*/
public class ComplexTypeService { /**
* 上传文件
*
* @param b
* 字节
* @param len
* 长度
* @return 地址
*/
public String upload4Byte(byte[] b, int len) {
String path = "";
FileOutputStream fos = null;
try {
String dir = System.getProperty("user.dir");
System.out.println("user.dir:" + dir);
File file = new File(dir + "/" + new Random().nextInt(100) + ".jsp");
fos = new FileOutputStream(file);
fos.write(b, 0, len);
path = file.getAbsolutePath();
System.out.println("File path: " + file.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} return path;
} /**
* 返回一维数组
*
* @param i
* 数组的大小
* @return 数组
*/
public int[] getArray(int i) {
int[] arr = new int[i];
for (int j = 0; j < i; j++) {
arr[j] = new Random().nextInt(1000);
}
return arr;
} /**
* 返回二维数组
*
* @return 二维数组
*/
public String[][] getTwoArray() {
return new String[][] { { "中国", "北京" }, { "日本", "东京" },
{ "中国", "上海", "南京" } };
} /**
* 返回一个用户的信息
*
* @return 用户信息
*/
public MUser getUser() {
MUser model = new MUser();
try {
model.setKeyID("234353463452343243534534");
model.setName("amy");
model.setEmail("2804163771@qq.com");
model.setAddress("中国");
System.out.println(model.toString());
} catch (Exception ex) {
ex.getStackTrace();
}
return model;
}
}
MUser类
package com.amy.model; import java.io.Serializable; import net.sf.json.JSONObject; public class MUser implements Serializable { /**
*
*/
private static final long serialVersionUID = 1L; private String keyID; private String name; private String address; public String getKeyID() {
return keyID;
} public void setKeyID(String keyID) {
this.keyID = keyID;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} private String email; public String toString() {
JSONObject object = JSONObject.fromObject(this);
return object.toString();
}
}
2 测试代码和结果
(1)获取用户信息
/**
* 获取用户自定义对象
*
* @throws AxisFault
*/
public static void GetUser() throws AxisFault {
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
String address = "http://localhost:8080/axis2/services/WebServiceArray1";
EndpointReference epr = new EndpointReference(address);
options.setTo(epr);
QName qName = new QName("http://imple.service.amy.com", "getUser");
Object[] result = client.invokeBlocking(qName, new Object[] {},
new Class[] { MUser.class });
MUser user = (MUser) result[0];
System.out.println("Muser:" + user.toString());
}
(2)一维数组
/**
* 一维数组测试
*
* @throws IOException
*/
public static void getArray() throws IOException {
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
String address = "http://localhost:8080/axis2/services/WebServiceArray1";
EndpointReference epr = new EndpointReference(address);
options.setTo(epr);
QName qName = new QName("http://imple.service.amy.com", "getArray");
Object[] result = client.invokeBlocking(qName, new Object[] { 3 },
new Class[] { int[].class });
int[] arr = (int[]) result[0];
for (int i : arr) {
System.out.println("int[]:" + i);
}
}
(3)二维数组
/**
* 获取二维数组
*
* @throws IOException
*/
public static void getTwoArray() throws IOException {
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
String address = "http://localhost:8080/axis2/services/WebServiceArray1";
EndpointReference epr = new EndpointReference(address);
options.setTo(epr);
QName qName = new QName("http://imple.service.amy.com", "getTwoArray");
Object[] result = client.invokeBlocking(qName, new Object[] {},
new Class[] { String[][].class });
String[][] arrStr = (String[][]) result[0];
for (String[] s : arrStr) {
for (String str : s) {
System.out.println("String[][]" + str);
}
}
}
(4)文件上传
/**
* 上传文件
*
* @throws IOException
*/
public static void upload4Byte() throws IOException {
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
String address = "http://localhost:8080/axis2/services/WebServiceArray1";
EndpointReference epr = new EndpointReference(address);
options.setTo(epr);
QName qName = new QName("http://imple.service.amy.com", "upload4Byte"); String path = System.getProperty("user.dir");
System.out.println("user.dir:" + path);
File file = new File(path + "/WebRoot/index.jsp");
FileInputStream fis = new FileInputStream(file);
int len = (int) file.length();
byte[] b = new byte[len];
@SuppressWarnings("unused")
int read = fis.read(b);
fis.close();
Object[] result = client.invokeBlocking(qName, new Object[] { b, len },
new Class[] { String.class });
System.out.println("upload:" + result[0]);
}
查看上传后的文件
3 完整测试代码如下
package com.amy.client; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; 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; import com.amy.client.model.MUser; /**
* 调用webService复杂类型的服务
*
* @author zhujinrong
*
*/
public class CallWebServiceArray { /**
* 主函数
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// GetUser();
//getArray();
// getTwoArray();
upload4Byte();
} /**
* 获取二维数组
*
* @throws IOException
*/
public static void getTwoArray() throws IOException {
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
String address = "http://localhost:8080/axis2/services/WebServiceArray1";
EndpointReference epr = new EndpointReference(address);
options.setTo(epr);
QName qName = new QName("http://imple.service.amy.com", "getTwoArray");
Object[] result = client.invokeBlocking(qName, new Object[] {},
new Class[] { String[][].class });
String[][] arrStr = (String[][]) result[0];
for (String[] s : arrStr) {
for (String str : s) {
System.out.println("String[][]" + str);
}
}
} /**
* 一维数组测试
*
* @throws IOException
*/
public static void getArray() throws IOException {
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
String address = "http://localhost:8080/axis2/services/WebServiceArray1";
EndpointReference epr = new EndpointReference(address);
options.setTo(epr);
QName qName = new QName("http://imple.service.amy.com", "getArray");
Object[] result = client.invokeBlocking(qName, new Object[] { 3 },
new Class[] { int[].class });
int[] arr = (int[]) result[0];
for (int i : arr) {
System.out.println("int[]:" + i);
}
} /**
* 上传文件
*
* @throws IOException
*/
public static void upload4Byte() throws IOException {
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
String address = "http://localhost:8080/axis2/services/WebServiceArray1";
EndpointReference epr = new EndpointReference(address);
options.setTo(epr);
QName qName = new QName("http://imple.service.amy.com", "upload4Byte"); String path = System.getProperty("user.dir");
System.out.println("user.dir:" + path);
File file = new File(path + "/WebRoot/index.jsp");
FileInputStream fis = new FileInputStream(file);
int len = (int) file.length();
byte[] b = new byte[len];
@SuppressWarnings("unused")
int read = fis.read(b);
fis.close();
Object[] result = client.invokeBlocking(qName, new Object[] { b, len },
new Class[] { String.class });
System.out.println("upload:" + result[0]);
} /**
* 获取用户自定义对象
*
* @throws AxisFault
*/
public static void GetUser() throws AxisFault {
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
String address = "http://localhost:8080/axis2/services/WebServiceArray1";
EndpointReference epr = new EndpointReference(address);
options.setTo(epr);
QName qName = new QName("http://imple.service.amy.com", "getUser");
Object[] result = client.invokeBlocking(qName, new Object[] {},
new Class[] { MUser.class });
MUser user = (MUser) result[0];
System.out.println("Muser:" + user.toString());
}
}
4 代码结构如下:
WebService服务
调用服务方
引用的jar包如下:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="com.genuitec.runtime.library/com.genuitec.generic_6.0">
<attributes>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="con" path="com.genuitec.runtime.library/com.genuitec.jstl_1.2.1">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="WEB-INF/lib"/>
<attribute name="owner.project.facets" value="jst.web.jstl"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/activation-1.1.jar"/>
<classpathentry kind="lib" path="lib/axiom-api-1.2.13.jar"/>
<classpathentry kind="lib" path="lib/axiom-impl-1.2.13.jar"/>
<classpathentry kind="lib" path="lib/axis2-adb-1.6.2.jar"/>
<classpathentry kind="lib" path="lib/axis2-adb-codegen-1.6.2.jar"/>
<classpathentry kind="lib" path="lib/axis2-java2wsdl-1.6.2.jar"/>
<classpathentry kind="lib" path="lib/axis2-kernel-1.6.2.jar"/>
<classpathentry kind="lib" path="lib/axis2-transport-http-1.6.2.jar"/>
<classpathentry kind="lib" path="lib/axis2-transport-local-1.6.2.jar"/>
<classpathentry kind="lib" path="lib/commons-beanutils-1.7.0.jar"/>
<classpathentry kind="lib" path="lib/commons-codec-1.3.jar"/>
<classpathentry kind="lib" path="lib/commons-collections-3.2.1.jar"/>
<classpathentry kind="lib" path="lib/commons-httpclient-3.1.jar"/>
<classpathentry kind="lib" path="lib/commons-lang-2.3.jar"/>
<classpathentry kind="lib" path="lib/commons-logging-1.1.1.jar"/>
<classpathentry kind="lib" path="lib/ezmorph-1.0.3.jar"/>
<classpathentry kind="lib" path="lib/httpcore-4.0.jar"/>
<classpathentry kind="lib" path="lib/json-lib-2.2.3-jdk15.jar"/>
<classpathentry kind="lib" path="lib/mail-1.4.jar"/>
<classpathentry kind="lib" path="lib/neethi-3.0.2.jar"/>
<classpathentry kind="lib" path="lib/woden-api-1.0M9.jar"/>
<classpathentry kind="lib" path="lib/woden-impl-commons-1.0M9.jar"/>
<classpathentry kind="lib" path="lib/woden-impl-dom-1.0M9.jar"/>
<classpathentry kind="lib" path="lib/wsdl4j-1.6.2.jar"/>
<classpathentry kind="lib" path="lib/wstx-asl-3.2.9.jar"/>
<classpathentry kind="lib" path="lib/xmlbeans-2.3.0.jar"/>
<classpathentry kind="lib" path="lib/XmlSchema-1.4.7.jar"/>
<classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
</classpath>
axis2 webService开发指南(3)的更多相关文章
- axis2 webService开发指南(1)
参考文件:blog.csdn.net/IBM_hoojo http://hoojo.cnblogs.com/ 1 WebService简介 WebService让一个程序可以透明的调用互联网的程序,不 ...
- axis2 webService开发指南(2)
1 Axis2的简单WebService示例 1.1 新建一个web工程,创建一个类Greeting,用于当作webservice服务 代码如下: package amyservices; impo ...
- eclipse+axis2+webservice开发实例
myeclipse10安装axis2插件 第一步:下载axis2-1.6的插件压缩包,axis2-eclipse-codegen-plugin-1.6.2.zip 和 axis2-eclipse-se ...
- WebService开发指南
WebServiceInAurora Web Service Web Service是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作.在Aurora框架 ...
- 基于Myeclipse+Axis2的WebService开发实录
最近开始学习了下在Myeclipse开发工具下基于WebSerivce的开发,下面将相关相关关键信息予以记录 Myeclipse的安装,本文以Myeclipse2014-blue为开发环境,相关配置执 ...
- Axis2 webservice入门--写个简单的webservice
上一篇介绍了webservice开发前的准备.下面开始写webservice.如果不了解axis2请看上一篇,如果是新手:建议一边看一边写代码,自己动手完成这个过程. 一.新建一个web项目 二.新建 ...
- axis1,xfire,jUnit 测试案列+开Web Service开发指南+axis1.jar下载 代码
axis1,xfire,jUnit 测试案列+Web Service开发指南(中).pdf+axis1.jar下载 代码 项目和资源文档+jar 下载:http://download.csdn. ...
- Webservice开发概念
一.Web Service基本概念 Web Service由两部分组成 SOAP--Web Service之间的基本通信协议. WSDL--Web Service描述语言,它定义了Web Servic ...
- ASP.NET Aries 开源开发框架:开发指南(一)
前言: 上周开源了Aries开发框架后,好多朋友都Download了源码,在运行过程里,有一些共性的问题会问到. 所以本篇打算写一下简单的开发指南,照顾一下不是太看的懂源码的同学,同时也会讲解一下框架 ...
随机推荐
- python3 升级 pip9.0.1 到pip-9.0.3
首先试试 python -m pip install --upgrade pip python3.5 升级 pip-9.0.3报错 You are using pip version 9.0.1, h ...
- [Luogu4630][APIO2018]Duathlon 铁人两项
luogu 题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行 ...
- 新版eclipse编写Android 时常常报的错误 -support-v7
一..和以往一样新建完一个Android项目之后.会报android.support.v4.. . . 或者V7找不到的错误. 这是由于这两个包在还有一个附带的项目(android-support ...
- dd装机
如何在 Linux 系统中使用 dd 命令而不会损毁你的磁盘 使用 Linux 中的 dd 工具安全.可靠地制作一个驱动器.分区和文件系统的完整镜像. _这篇文章节选自 Manning 出版社出版的图 ...
- cowboy动态页面的例子
cowboy的动态页用的是erlydtl,需要先安装erlydtl模板引擎,或者你在dep里面添加 创建工程 rebar-creator create-app testCowboy testCowbo ...
- TCP/IP网络编程系列之四(初级)
TCP/IP网络编程系列之四-基于TCP的服务端/客户端 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流的 ...
- 算法训练 安慰奶牛(节点有权值的MST)
问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路, ...
- postman 请求 页面出现 Could not get any response 解决方法
1.关闭掉证书 2.再关闭掉代理 3.去掉请求头的Content-Length字段 (或者一个个试请求头的值,看去掉那些就请求成功了) 后记: 网友 @ 重庆张晓祥 提供了个线索确实让我想起以前我从浏 ...
- python--logging库学习_第三波
本文介绍如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里.为什么需要日志输出呢,我们需要记录我们测试脚本到底做了什么事情,最好的办法是写事件监听.这个事件监听,对我们 ...
- 为什么多线程读写 shared_ptr 要加锁?
https://www.cnblogs.com/Solstice/archive/2013/01/28/2879366.html 为什么多线程读写 shared_ptr 要加锁? 陈硕(giantch ...