首页 > 代码库 > axis2 webService开发指南(3)

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());    }}
View Code

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>
View Code

 

axis2 webService开发指南(3)