5. 服务调用开发DEMO


5.1 JAVA-SOAP

本章节介绍三种生成调用总线SOAP接口的方式,第一种以eclipse生成客户端代码为例,第二种以CXF wsdl2java生成客户端代码为例,第三种myeclipse生成客户端代码为例,样例以“

获取用户基本信息

”的webservice来进行说明。

5.1.1 示例1:EMAP直接调用

公网上的开发人员,EMAP中调用API之前,先删除app_info.xml 中的开发证书,如下图红框位置。

  1. 创建自定义动作“获取用户信息”

2、首先,把soap接口地址粘贴到“服务地址”,点击输入框

刷新按钮,则方法列表自动展现该soap接口可调用的方法,鼠标点击各个方法,参数列表中自动刷新显示该方法的入参与出参。方法列表勾选代表,该动作调用soap接口的勾选中的方法。每个动作有且只能选择一个方法。

其次,确认右上角勾选WISEDU服务总线,默认勾选。如果是调用非服务总线接口,去掉此选项。

再次,在header中添加开发测试时接口的appId与accessToken两个参数。

使用xml编辑器打开自定义动作

源文件中所有urlStart中地址参数修改成总线访问地址中的域名。

  1. 调用

在动作流中调用:

在前端代码中调用:

5.1.2 示例2:eclipse生成客户端代码并调用接口

生成客户端代码

在eclipse中选择 新建 -> 其它

出现如下对话框,选择Web Service Client,创建一个ws客户端

出现如下对话框,将url复制进文本框

点击next,选择代码生成的位置

然后点击完成(finish)即可生成ws客户端代码,如下:

webservice的调用

获取到实现类之后即可调用webservice中的方法, 样例代码如下:

创建客户端调用测试类ClientTest.java,在ClientTest.java的main方法里面进行调用代码测试:

代码如下(说明:上述代码中,在开发时请将服务地址url、appId和accessToken信息按实际情况填写,核心jar包:axis.jar、commons-discovery-0.2.jar、commons-logging.jar、jaxrpc.jar、saaj.jar、wsdl4j.jar):

import java.net.MalformedURLException;
import java.rmi.RemoteException;
import com.wisedu.mdbservice.api.ws.identity.IdsRequest;
import com.wisedu.mdbservice.api.ws.identity.RedisInfoNew;
import com.wisedu.mdbservice.api.ws.identity.UserInfoNewResponse;
import com.wisedu.mdbservice.web.api.impl.identity.UserInfoAPIImplServiceSoapBindingStub;

public class ClientTest {

        public static void main(String[] args) throws MalformedURLException, RemoteException {
                // WSDL请求地址
                java.net.URL url = new java.net.URL(
                                "http://172.16.7.124:8080/mdm_UserInfoAPIImplService/ProxyService/UserInfoAPIImplServiceProxyService?wsdl");
                UserInfoAPIImplServiceSoapBindingStub stub = new UserInfoAPIImplServiceSoapBindingStub(url, null);
                // appId accessToken Header头文件信息传入
                stub.setHeader("", "appId", "amp");
                stub.setHeader("", "accessToken", "9FB95D66318F36BB00D840E107284CDF");

                // 业务参数传入
                IdsRequest ir = new IdsRequest();
                ir.setIds(new String[] { "ampadmin" }); //数組格式的人员id

            // 接口方法调用(getUsersInfoByIds)
                UserInfoNewResponse u = stub.getUsersInfoByIds(ir);

                // 接口返回数据的解析
                RedisInfoNew[] redisInfos = u.getRedisInfo();
                for (RedisInfoNew redisInfo : redisInfos) {
                        System.out.println(redisInfo.getId() + ":" + redisInfo.getName());
                }
        }

}

以上是调用接口中getUsersInfoByIds的方法,此方法中传参是个IdsRequest对象,对象中setIds是具体人员id的数组。方法返回RedisInfoNew[]对象,解析一下我们可以得到以下结果:

5.1.3 示例3:myeclipse 生成客户端代码并调用接口

生成客户端代码

右击项目新建 -> 其它

新建窗口如下:

点击next,进入下一步,出现如下对话框,将url复制进文本框:

点击next,进入下一步:

直接finish,完成,生成客户端代码

添加soap header赋值类AddSoapHeader.java

依赖核心jar包:Cxf-2.7.3.jar(或者更高的版本)

import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class AddSoapHeader extends AbstractSoapInterceptor {

        public static final String xml_name_uri = "";
        public static final String xml_appId_el = "appId";
        public static final String xml_serviceId_el = "serviceId";
        public static final String xml_accessToken_el = "accessToken";

        private String appId = "";
        private String serviceId = "";
        private String accessToken = "";

        public AddSoapHeader(Map<String, Object> headers) {
                super(Phase.WRITE);
                for (String key : headers.keySet()) {
                        if (key.equals("appId")) {
                                this.appId = (String) headers.get("appId");
                        }
                        if (key.equals("serviceId")) {
                                this.serviceId = (String) headers.get("serviceId");
                        }
                        if (key.equals("accessToken")) {
                                this.accessToken = (String) headers.get("accessToken");
                        }
                }
        }

        public void handleMessage(SoapMessage message) throws Fault {

                Document doc = (Document) DOMUtils.createDocument();
                Element appId = doc.createElement(xml_appId_el);
                appId.appendChild(doc.createTextNode(this.appId));
                Element serviceId = doc.createElement(xml_serviceId_el);
                serviceId.appendChild(doc.createTextNode(this.serviceId));
                Element accessToken = doc.createElement(xml_accessToken_el);
                accessToken.appendChild(doc.createTextNode(this.accessToken));
                Element root = doc.createElementNS(xml_name_uri,
                                "tns:RequestSOAPHeader");
                root.appendChild(appId);
                root.appendChild(serviceId);
                root.appendChild(accessToken);
                SoapHeader head = new SoapHeader(new QName("RequestSOAPHeader"), root);
                List<Header> headers = message.getHeaders();
                headers.add(head);
        }
}

webservice的调用

获取到实现类之后即可调用webservice中的方法, 样例代码如下:

创建客户端调用测试类ClientTest.java,在ClientTest.java的main方法里面进行调用代码测试:

代码如下(说明:上述代码中,在开发时请将服务地址url、appId和accessToken信息按实际情况填写,依赖核心jar包:Cxf-2.7.3.jar(或者更高的版本)、xmlschema-core-2.0.3.jar、neethi-3.0.2.jar、commons-logging-1.1.2.jar、wsdl4j-1.6.3.jar、httpcore-nio-4.2.2.jar、httpasyncclient-4.0-beta3.jar、httpcore-4.2.2.jar、httpclient-4.2.1.jar):

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.message.Message;
import com.wisedu.mdbservice.api.ws.identity.IdsRequest;
import com.wisedu.mdbservice.api.ws.identity.UserConnectInfo;
import com.wisedu.mdbservice.api.ws.identity.UsersConnectInfoResponse;
import com.wisedu.mdbservice.web.api.impl.identity.UserInfoAPI;

public class ClientTest {

        public static void main(String[] args) {
                // WSDL请求地址
                JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
                jaxWsProxyFactoryBean
                                .setAddress("http://172.16.7.124:8080/mdm_UserInfoAPIImplService/ProxyService/UserInfoAPIImplServiceProxyService?wsdl");
                // appId accessToken Header头文件信息传入
                Map<String, Object> header = new HashMap<String, Object>();
                header.put("appId", "amp");
                header.put("accessToken", "9FB95D66318F36BB00D840E107284CDF");
                AddSoapHeader addSoapHeader = new AddSoapHeader(header);
                List<Interceptor<? extends Message>> list = new ArrayList<Interceptor<? extends Message>>();
                list.add(addSoapHeader);
                jaxWsProxyFactoryBean.setOutInterceptors(list);
                // 接口实现类
                jaxWsProxyFactoryBean.setServiceClass(UserInfoAPI.class);
                UserInfoAPI userInfo = (UserInfoAPI) jaxWsProxyFactoryBean.create();
                //业务入参
                IdsRequest ir = new IdsRequest();
                ir.getIds().add("ampadmin");//list 集合
                //接口方法调用(getUsersConnectInfoByIds)
                UsersConnectInfoResponse usersConnectInfo = userInfo.getUsersConnectInfoByIds(ir);
                // 接口返回数据的解析
                List<UserConnectInfo> useList = usersConnectInfo.getUserConnectInfo();
                for(UserConnectInfo user : useList){
                        System.out.println(user.getId()+":"+user.getName());
                }
        }

}

以上是调用接口中getUsersConnectInfoByIds的方法,此方法中传参是个IdsRequest对象,对象中多个人员id以list的方式传递。方法返回UsersConnectInfoResponse对象,解析一下我们可以得到以下结果:

5.1.4 示例4:wsdl2java 客户端代码并调用接口

生成客户端代码

①下载cxf

http://cxf.apache.org/download.html

选择apache-cxf-3.0.5.zip

②生成代码

解压E:\apache-cxf-3.0.5

Cmd进入E:\apache-cxf-3.0.5\bin执行

wsdl2java -p com.wisedu.mdbservice -d E:\eclipseTool\src -client

http://172.16.7.124:8080/mdm_UserInfoAPIImplService/ProxyService/UserInfoAPIImplServiceProxyService?wsdl

③wsdl 参数说明

wsdl2java -p xxx -d xxx -client xxx

-p 指定其wsdl的命名空间,也就是要生成代码的包名:

-d 指定要产生代码所在目录

-client 生成客户端测试web service的代码

-server 生成服务器启动web service的代码

-impl 生成web service的实现代码

-ant 生成build.xml文件

-all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.

命令执行完后会在相应的位置生成客户端代码

添加soap header赋值类AddSoapHeader.java

同2.2.2

webservice的调用

同2.2.3

5.2 JAVA-RESTful

本章节介绍两种调用总线RESTful接口的方式,第一种以apache httpclient为例,第二种以原生调用为例。

5.2.1 示例1:httpclient调用

依赖jar包

commons-beanutils-1.8.3.jar

commons-collections-3.1.jar

commons-lang-2.5.jar

commons-logging-1.1.2.jar

ezmorph-1.0.3.jar

httpclient-4.1.2.jar

httpclient-cache-4.1.2.jar

httpmime-4.1.2.jar

httpcore-4.2.2.jar

json-lib-2.1.jar

客户端调用

创建客户端调用测试类Test.java,在Test.java的main方法里面进行调用代码测试:

代码如下(说明:上述代码中,在开发时请将服务地址url、appId和accessToken信息按实际情况填写,参数替换为实际的情况):以上是调用接口中getUsersConnectInfoByIds的方法,此方法中传参是个IdsRequest对象,对象中多个人员id以list的方式传递。方法返回UsersConnectInfoResponse对象,解析一下我们可以得到以下结果:

5.2.2 示例2:http原生调用

依赖jar包

commons-beanutils-1.8.3.jar

commons-collections-3.1.jar

commons-lang-2.5.jar

commons-logging-1.1.2.jar

ezmorph-1.0.3.jar

httpclient-4.1.2.jar

httpclient-cache-4.1.2.jar

httpmime-4.1.2.jar

httpcore-4.2.2.jar

json-lib-2.1.jar

客户端调用

创建客户端调用测试类Test.java,在Test.java的main方法里面进行调用代码测试:

代码如下(说明:上述代码中,在开发时请将服务地址url、appId和accessToken信息按实际情况填写,参数替换为实际的情况):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import net.sf.json.JSONObject;
import org.apache.http.entity.StringEntity;

public class Test2 {

        // api请求地址url
        private static final String targetURL = "http://172.16.7.124:8080/mdm-new_cs_auth_web-restful-groupReadAPI-getGroupsByUserID/ProxyService/cs_auth_web-restful-groupReadAPI-getGroupsByUserIDProxyService";

        public static void main(String[] args) {

        try {
                // api请求地址url
            URL targetUrl = new URL(targetURL);
            // 打开连接
            HttpURLConnection httpConnection = (HttpURLConnection) targetUrl.openConnection();
            // 参数设置
            httpConnection.setDoOutput(true);
            httpConnection.setRequestMethod("POST");
            httpConnection.setRequestProperty("Content-Type","application/json");
            // appId accessToken Header头文件信息传入
            //httpConnection.setRequestProperty("serviceId", "76b313ab32c9");
            httpConnection.setRequestProperty("appId", "amp");
            httpConnection.setRequestProperty("accessToken","9FB95D66318F36BB00D840E107284CDF");

            // 业务参数
            JSONObject jsonParam = new JSONObject();
            jsonParam.put("userId", "ampadmin");

            StringEntity entity = new StringEntity(jsonParam.toString(), "UTF-8");// 解决中文乱码问题
            entity.setContentEncoding("UTF-8");
            entity.setContentType("application/json");

            OutputStream outputStream = httpConnection.getOutputStream();
            outputStream.write(jsonParam.toString().getBytes("UTF-8"));
            outputStream.flush();

            // 取得输入流,并使用Reader读取调用结果 
            BufferedReader responseBuffer = new BufferedReader(
                    new InputStreamReader((httpConnection.getInputStream())));//设置编码,否则中文乱码 
            String output;
            while ((output = responseBuffer.readLine()) != null) {
                output = new String(output.getBytes(), "UTF-8");
                        break;
            }
            responseBuffer.close();

            // 断开连接 
                httpConnection.disconnect(); 

            System.out.println("Output from Server:\n"+output);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        }

}

以上是调用RESTful接口中的方法,此方法中传参通过jsonParam.put()实现。方法返回通过取得输出流,并使用Reader读取获得json格式的字符串,解析一下我们可以得到以下结果:

5.2.3 照片接口示例3:照片保存

依赖jar包

commons-beanutils-1.8.3.jar

commons-collections-3.1.jar

commons-lang-2.5.jar

commons-logging-1.1.2.jar

ezmorph-1.0.3.jar

httpclient-4.1.2.jar

httpclient-cache-4.1.2.jar

httpmime-4.1.2.jar

httpcore-4.2.2.jar

json-lib-2.1.jar

commons-io-2.0.1.jar

客户端调用

创建客户端调用测试类Test.java,在Test.java的main方法里面进行调用代码测试:

代码如下(说明:上述代码中,在开发时请将服务地址url、appId和accessToken信息按实际情况填写,参数替换为实际的情况):

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.io.FileUtils;

public class Test3 {
        // api请求地址url
        private static final String targetURL = "http://172.16.7.124:8080/mdm_mdb_service_web-restful-hrAPI-savePhoto/ProxyService/mdb_service_web-restful-hrAPI-savePhotoProxyService";

        public static void main(String[] args) {
        try {
            URL targetUrl = new URL(targetURL);
            // 打开连接
            HttpURLConnection httpConnection = (HttpURLConnection) targetUrl.openConnection();
            // 参数设置
            httpConnection.setDoOutput(true);
            httpConnection.setRequestMethod("POST");
            httpConnection.setRequestProperty("Content-Type","application/json");
            // appId accessToken Header头文件信息传入
            httpConnection.setRequestProperty("appId", "amp");
            httpConnection.setRequestProperty("accessToken","9FB95D66318F36BB00D840E107284CDF");
            // 业务参数
            SavePhotoRequest savePhotoRequest = new SavePhotoRequest();
            Photo[] photo = new Photo[1];
            photo[0] = new Photo();
            photo[0].setId("ljwan");
            photo[0].setType(3);//1小标准照 2大标准照  3生活照
            photo[0].setUrl("/ljwan/33");
            byte[] photoByte = FileUtils.readFileToByteArray(new File("D:\\我的新工作文件夹\\我的资料\\我的介绍\\照片1-万陆俭.jpg"));
            photo[0].setZp(photoByte);
            savePhotoRequest.setPhotos(photo);

            OutputStream outputStream = httpConnection.getOutputStream();
            outputStream.write(JsonUtils.toJson(savePhotoRequest).getBytes("UTF-8"));// 解决中文乱码问题
            outputStream.flush();

            if (httpConnection.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + httpConnection.getResponseCode());
            }
            // 取得输入流,并使用Reader读取调用结果
            BufferedReader responseBuffer = new BufferedReader(
                    new InputStreamReader((httpConnection.getInputStream())));
            String output;
            System.out.println("Output from Server:\n");
            while ((output = responseBuffer.readLine()) != null) {
                System.out.println(output);
            }
            httpConnection.disconnect();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        }

}

以上调用方法中用到三个依赖类,分别为:JsonUtils、Photo、SavePhotoRequest,代码分别见附录。执行以上调用我们可以得到以下结果:

附录

Photo

public class Photo {

    private byte[] zp;
    private String id;
    private String url;
    private int type;// sizeType

    public byte[] getZp() {
        return zp;
    }

    public void setZp(byte[] zp) {
        this.zp = zp;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

}

JsonUtils
import java.util.Collection;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JsonUtils {

    private JsonUtils() {
        super();
    }

    public static <T> String toJson(T o) {
        String s = "";
        if (o == null) {
            return s;
        }

        if (o instanceof Collection || o.getClass().isArray()) {
            s = JSONArray.fromObject(o).toString();
        } else {
            s = JSONObject.fromObject(o).toString();
        }
        return s;
    }
}

SavePhotoRequest

public class SavePhotoRequest{
    Photo[] photos;

    public Photo[] getPhotos() {
        return photos;
    }

    public void setPhotos(Photo[] photos) {
        this.photos = photos;
    }

}
5.2.4 照片接口示例4:获取照片URL

依赖jar包

commons-beanutils-1.8.3.jar

commons-collections-3.1.jar

commons-lang-2.5.jar

commons-logging-1.1.2.jar

ezmorph-1.0.3.jar

httpclient-4.1.2.jar

httpclient-cache-4.1.2.jar

httpmime-4.1.2.jar

httpcore-4.2.2.jar

json-lib-2.1.jar

commons-io-2.0.1.jar

客户端调用

创建客户端调用测试类Test.java,在Test.java的main方法里面进行调用代码测试:

代码如下(说明:上述代码中,在开发时请将服务地址url、appId和accessToken信息按实际情况填写,参数替换为实际的情况):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class Test4_2 {
        // api请求地址url
        private static final String targetURL = "http://172.16.7.124:8080/mdm_mdb_service_web-restful-hrAPI-getPhotoById/ProxyService/mdb_service_web-restful-hrAPI-getPhotoByIdProxyService";

        public static void main(String[] args) {
        try {
                // api请求地址url
            URL targetUrl = new URL(targetURL);
            // 打开连接
            HttpURLConnection httpConnection = (HttpURLConnection) targetUrl.openConnection();
            // 参数设置
            httpConnection.setDoOutput(true);
            httpConnection.setRequestMethod("POST");
            httpConnection.setRequestProperty("Content-Type","application/json");
            // appId accessToken Header头文件信息传入
            //httpConnection.setRequestProperty("serviceId", "cb265d6abcd9");
            httpConnection.setRequestProperty("appId", "amp");
            httpConnection.setRequestProperty("accessToken","9FB95D66318F36BB00D840E107284CDF");
            // 业务参数
            PhotoRequest photoRequest = new PhotoRequest();
            String []ids = {"ljwan"};
            photoRequest.setIds(ids);
            photoRequest.setResultType(1);//1获取照片地址  2获取照片blob
            photoRequest.setSizeType(3);//1小标准照 2大标准照  3生活照

            OutputStream outputStream = httpConnection.getOutputStream();
            outputStream.write(JsonUtils.toJson(photoRequest).getBytes("UTF-8"));
            outputStream.flush();

            if (httpConnection.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + httpConnection.getResponseCode());
            }
            // 取得输入流,并使用Reader读取调用结果 
            BufferedReader responseBuffer = new BufferedReader(
                    new InputStreamReader((httpConnection.getInputStream())));
            String output;
            while ((output = responseBuffer.readLine()) != null) {
                    output = new String(output.getBytes(), "UTF-8");
                        break;
            }
            httpConnection.disconnect();

            //解析获取照片url
            System.out.println("Output from Server:");
            JSONObject jb = JSONObject.fromObject(output);
            JSONArray ja = JSONArray.fromObject(jb.get("photos"));
            for(int i=0;i<ja.size();i++){
                    System.out.println("获取照片地址为:"+JSONObject.fromObject(ja.get(i)).get("url"));
            }


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        }
}

以上调用方法中用到四个依赖类,分别为:PhotoRequest、JsonUtils、BaseRequest、Page,代码分别见附录。执行以上调用我们可以得到以下结果:

附录

Page

public class Page {
        private int pageSize;
        private int pageNum;
        private String order;
        private String orderBy;

        public int getPageSize() {
                return pageSize;
        }
        public void setPageSize(int pageSize) {
                this.pageSize = pageSize;
        }
        public int getPageNum() {
                return pageNum;
        }
        public void setPageNum(int pageNum) {
                this.pageNum = pageNum;
        }
        public String getOrder() {
                return order;
        }
        public void setOrder(String order) {
                this.order = order;
        }
        public String getOrderBy() {
                return orderBy;
        }
        public void setOrderBy(String orderBy) {
                this.orderBy = orderBy;
        }

}

BaseRequest

public class BaseRequest {
        private Page page;

        public Page getPage() {
                return page;
        }

        public void setPage(Page page) {
                this.page = page;
        }

}

PhotoRequest

public class PhotoRequest extends BaseRequest {
        private String []ids;
        private int sizeType;
        private int resultType;

        public String[] getIds() {
                return ids;
        }

        public void setIds(String[] ids) {
                this.ids = ids;
        }

        public int getSizeType() {
                return sizeType;
        }

        public void setSizeType(int sizeType) {
                this.sizeType = sizeType;
        }

        public int getResultType() {
                return resultType;
        }

        public void setResultType(int resultType) {
                this.resultType = resultType;
        }

JsonUtils

import java.util.Collection;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JsonUtils {

    private JsonUtils() {
        super();
    }

    public static <T> String toJson(T o) {
        String s = "";
        if (o == null) {
            return s;
        }

        if (o instanceof Collection || o.getClass().isArray()) {
            s = JSONArray.fromObject(o).toString();
        } else {
            s = JSONObject.fromObject(o).toString();
        }
        return s;
    }
}
5.2.5 照片接口示例5:获取照片BLOB

依赖jar包

commons-beanutils-1.8.3.jar

commons-collections-3.1.jar

commons-lang-2.5.jar

commons-logging-1.1.2.jar

ezmorph-1.0.3.jar

httpclient-4.1.2.jar

httpclient-cache-4.1.2.jar

httpmime-4.1.2.jar

httpcore-4.2.2.jar

json-lib-2.1.jar

commons-io-2.0.1.jar

客户端调用

创建客户端调用测试类Test.java,在Test.java的main方法里面进行调用代码测试:

代码如下(说明:上述代码中,在开发时请将服务地址url、appId和accessToken信息按实际情况填写,参数替换为实际的情况):

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import sun.misc.BASE64Decoder;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class Test4_1 {
        // api请求地址url
        private static final String targetURL = "http://172.16.7.124:8080/mdm_mdb_service_web-restful-hrAPI-getPhotoById/ProxyService/mdb_service_web-restful-hrAPI-getPhotoByIdProxyService";

        public static void main(String[] args) {
        try {
                // api请求地址url
            URL targetUrl = new URL(targetURL);
            // 打开连接
            HttpURLConnection httpConnection = (HttpURLConnection) targetUrl.openConnection();
            // 参数设置
            httpConnection.setDoOutput(true);
            httpConnection.setRequestMethod("POST");
            httpConnection.setRequestProperty("Content-Type","application/json");
            // appId accessToken Header头文件信息传入
            //httpConnection.setRequestProperty("serviceId", "cb265d6abcd9");
            httpConnection.setRequestProperty("appId", "amp");
            httpConnection.setRequestProperty("accessToken","9FB95D66318F36BB00D840E107284CDF");
            // 业务参数
            PhotoRequest photoRequest = new PhotoRequest();
            String []ids = {"ljwan"};
            photoRequest.setIds(ids);
            photoRequest.setResultType(2);//1获取照片地址  2获取照片blob
            photoRequest.setSizeType(3);//1小标准照 2大标准照  3生活照

            OutputStream outputStream = httpConnection.getOutputStream();
            outputStream.write(JsonUtils.toJson(photoRequest).getBytes("UTF-8"));
            outputStream.flush();

            if (httpConnection.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + httpConnection.getResponseCode());
            }
            // 取得输入流,并使用Reader读取调用结果 
            BufferedReader responseBuffer = new BufferedReader(
                    new InputStreamReader((httpConnection.getInputStream())));
            String output;
            while ((output = responseBuffer.readLine()) != null) {
                    output = new String(output.getBytes(), "UTF-8");
                        break;
            }
            httpConnection.disconnect();

            //解析获取照片url
            System.out.println("Output from Server:"+output);
            JSONObject jb = JSONObject.fromObject(output);
            JSONArray ja = JSONArray.fromObject(jb.get("photos"));
            for(int i=0;i<ja.size();i++){
                    System.out.println("获取照片流base64:"+JSONObject.fromObject(ja.get(i)).get("zp").toString());
                    BASE64Decoder decoder = new BASE64Decoder();  
                    //Base64解码  
                byte[] b = decoder.decodeBuffer(JSONObject.fromObject(ja.get(i)).get("zp").toString());  
                for(int l=0;l<b.length;++l)  
                {  
                    if(b[l]<0)  
                    {//调整异常数据  
                        b[l]+=256;  
                    }  
                }  
                //生成jpeg图片 
                //存为文件
                String imgFilePath = "d:/test"+i+".jpg";//新生成的图片  
                OutputStream out = new FileOutputStream(imgFilePath);      
                //将字节写入文件
                out.write(b);  
                out.flush();  
                out.close();
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        }
}

以上调用方法中用到四个依赖类,分别为:PhotoRequest、JsonUtils、BaseRequest、Page,代码分别见附录。执行以上调用我们可以得到以下结果:

附录

Page

public class Page {
        private int pageSize;
        private int pageNum;
        private String order;
        private String orderBy;

        public int getPageSize() {
                return pageSize;
        }
        public void setPageSize(int pageSize) {
                this.pageSize = pageSize;
        }
        public int getPageNum() {
                return pageNum;
        }
        public void setPageNum(int pageNum) {
                this.pageNum = pageNum;
        }
        public String getOrder() {
                return order;
        }
        public void setOrder(String order) {
                this.order = order;
        }
        public String getOrderBy() {
                return orderBy;
        }
        public void setOrderBy(String orderBy) {
                this.orderBy = orderBy;
        }

}

BaseRequest

public class BaseRequest {
        private Page page;

        public Page getPage() {
                return page;
        }

        public void setPage(Page page) {
                this.page = page;
        }

}

PhotoRequest

public class PhotoRequest extends BaseRequest {
        private String []ids;
        private int sizeType;
        private int resultType;

        public String[] getIds() {
                return ids;
        }

        public void setIds(String[] ids) {
                this.ids = ids;
        }

        public int getSizeType() {
                return sizeType;
        }

        public void setSizeType(int sizeType) {
                this.sizeType = sizeType;
        }

        public int getResultType() {
                return resultType;
        }

        public void setResultType(int resultType) {
                this.resultType = resultType;
        }

}

JsonUtils

import java.util.Collection;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JsonUtils {

    private JsonUtils() {
        super();
    }

    public static <T> String toJson(T o) {
        String s = "";
        if (o == null) {
            return s;
        }

        if (o instanceof Collection || o.getClass().isArray()) {
            s = JSONArray.fromObject(o).toString();
        } else {
            s = JSONObject.fromObject(o).toString();
        }
        return s;
    }
}

results matching ""

    No results matching ""