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("[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());
    }
}
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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。