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了源码,在运行过程里,有一些共性的问题会问到. 所以本篇打算写一下简单的开发指南,照顾一下不是太看的懂源码的同学,同时也会讲解一下框架 ...
随机推荐
- ResultSet.TYPE_SCROLL_SENSITIVE到底发生了什么?
转自:https://blog.csdn.net/axman/article/details/3984103 这个问题我在几年前说过,但今天再次从CSDN上看到有人问这个问题,可以看出,真正懂这个问题 ...
- UVA11806 Cheerleaders
题意 PDF 分析 如果要求是某行某列没有石子很好算,就一个组合数. 然后要求某行某列有,就用容斥原理就行了. 时间复杂度\(O(k^2 + 16T)\) 代码 #include<iostrea ...
- Cucumber 之Gherkin
1.Gherkin简介: Cucumber是一个解释程序,就像ruby命令执行解释 .rb文件里的Ruby代码一样,Cucumber用来执行解释 .feature文件里的Gehrkin代码. 2. ...
- Hyper-V 手动导入虚机配置实例(转载)
原文转载:http://blog.51cto.com/bobzy/980241 Hyper-V提供了很方便的虚机导入和导出功能.平时假如我们想导出虚机,先选中虚机,然后鼠标右键在出现菜单列表中选中“导 ...
- Dev-C++ 小问题锦集
C++ project cann't debug Your project does not have debugging information, do you want to enable deb ...
- Spring AOP表达式报错:Pointcut is not well-formed: expecting 'name pattern' at character position
问题现象: java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test ...
- zookeeper事件监听
原来有两张表,一张是公司的,一张的产品的,项目中用来查询,不需要增删改.现在增删改交给另一项目去维护,由他们变更时同步数据到zk,我们去取.很明显,这里需要一个监听器,每次他项目发起数据变更时,我方必 ...
- websphere删除概要文件(profiles)的方式
[b]删除概要文件:[/b]方案一:1.找到profileRegistry.xml,在目录IBM\WebSphere\AppServer\properties里,去掉想删除的profile的配置即可. ...
- STL传递比较函数进容器的三种方式
对于STL中的依靠比较排序的容器,均提供了一个模板参数来传递比较函数,默认的为std::less<>. 查阅Containers - C++ Reference可以看到典型的使用比较函数的 ...
- 兼顾FPGA和单片机
当今,FPGA和单片机的应用非常广泛,在有FPGA知识的基础上,笔者认为可以把FPGA作为主要的学习目标,单片机作为辅助技能.其实二者是相互促进的.不管是FPGA还是单片机的开发其实都是基于较强的逻辑 ...