zoukankan      html  css  js  c++  java
  • 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
    作者:BestNow
    出处:http://www.cnblogs.com/BestNow/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    React生命周期, 兄弟组件之间通信
    React组件式编程Demo-用户的增删改查
    React之this.refs, 实现数据双向绑定
    CCF CSP 201812-4 数据中心
    CCF CSP 201812-4 数据中心
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    Codeforces 1245C Constanze's Machine
    Codeforces 1245C Constanze's Machine
    CCF CSP 201712-4 行车路线
  • 原文地址:https://www.cnblogs.com/tianxue/p/4149589.html
Copyright © 2011-2022 走看看