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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    嘉佣坊
    HTTPS
    OWIN 为WebAPI
    C#并行编程
    ASP.NET 运行
    DocFX
    oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
    Facebook新框架React Native,一套搞定App开发[转]
    MVC 中使用 SignalR 实现推送功能
    生产都消费者模式的一个demo,消费者设置缓存
  • 原文地址:https://www.cnblogs.com/tianxue/p/4149589.html
Copyright © 2011-2022 走看看