• JavaWeb 调用接口


    JavaWeb 如何调用接口

    CreateTime--2018年4月2日19:04:29

    Author:Marydon

    1.所需jar包

    2.代码设计

      WebUtils.java

    import java.io.ByteArrayOutputStream;
    import java.net.URL;
    
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    
    import org.codehaus.xfire.client.Client;
    
    /**
     * 
     * @author Marydon
     * @createTime 2018年3月9日上午10:40:01
     * @updateTime
     * @Email:Marydon20170307@163.com
     * @version:1.0.0
     */
    public class WebUtils {
    
    
        /**
         * 接口调用方法 内部使用xfire 调用
         * @param param1
         *            接口传参
         * @param methodName
         *            调用接口方法名
         * @param url
         *            调用接口地址
         * @return String 返回结果
         */
        public static String call(Object[] param1, String methodName, String url) {
            // 调用接口
            if (null == url) {
                throw new RuntimeException("接口地址不能为空!");
            }
            if (!url.endsWith("?wsdl")) {
                url += "?wsdl";
            }
            // 接口名称
            String intefaceName = methodName;
            // 客户端
            Client client;
            Object[] results;
            try {
                client = new Client(new URL(url));
                results = client.invoke(intefaceName, param1);
                if (results != null && results.length > 0) {
                    if (results[0] instanceof String) {
                        return (String) results[0];
                    } else if (results[0] instanceof org.w3c.dom.Document) {
                        org.w3c.dom.Document doc = (org.w3c.dom.Document) results[0];
                        return WebUtils.w3cDocument2String(doc);
                    } else {
                        if (results.length > 1) {
                            System.err.println("返回结果长度:" + results.length);
                        }
                        return String.valueOf(results[0]);
                    }
                }
            } catch (Exception e) {
                // log.error("调用接口失败"+url+":"+methodname,e);
            }
            return null;
        }
    
        /**
         * 将w3c定义的Document对象转换为String字符串
         * 
         * @param doc
         * @return
         * @throws Exception
         */
        public static String w3cDocument2String(org.w3c.dom.Document doc) {
            // 设置源和目标
            DOMSource src = new DOMSource(doc);
            StreamResult sos;
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            try {
                sos = new StreamResult(bos);
                // 转换器
                Transformer t = TransformerFactory.newInstance().newTransformer();
                t.transform(src, sos);
                return bos.toString("UTF-8");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
    
        }
    
    }

    3.测试

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    
    /**
     * 发送webservice请求测试类
     * @author Marydon
     * @createTime 2018年3月9日上午10:51:07
     * @updateTime
     * @Email:Marydon20170307@163.com
     * @version:1.0.0
     */
    public class Test {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
             String url = "http://127.0.0.1:8070/demo/services/IServiceTest?wsdl";
             // 必须指定方法名
             String methodName = "getUserInfo";
    
             StringBuilder sb = new StringBuilder();
             sb.append("<Request><userId>2</userId></Request>");
    
             Document document = DocumentHelper.createDocument(); // 创建Document document 以xml的格式存放返回参数
             Element request = document.addElement("Request"); // 在 document中 新建一个Request节点
             // (具体节点请参考接口文档)
             request.addElement("userId").setText("1");
             // TODO 发送空id
             // request.addElement("id").setText("");
             String data = document.asXML().toString();// 以xml格式进行传输
    
             String res = WebUtils.call(new Object[] { data }, methodName, url);
             System.out.println(res);
             Document dhead;
             try {
                 dhead = DocumentHelper.parseText(res);
                 String userName = dhead.selectSingleNode("//Response/userName").getText().trim();
                 System.out.println(userName);
             } catch (DocumentException e) {
                 e.printStackTrace();
             }
    
        }
    
    } 

    4.说明

       以接口的形式进行传输时,"&"是特殊符号,不能直接传,必须转义成"&amp;",否则报错。

  • 相关阅读:
    简单错误记录
    识别有效的IP地址和掩码并进行分类统
    爬虫必备—BeautifulSoup
    爬虫必备—requests
    Shellinabox安装及使用教程
    Django——REST framework
    SaltStack部署
    使用js在HTML中自定义字符串格式化方法
    3种上传图片并实现预览的方法
    Ajax
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/8696401.html
Copyright © 2020-2023  润新知