复杂对象类型的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("[email protected]"); 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>
时间: 2024-10-14 15:04:31