zoukankan      html  css  js  c++  java
  • httpclient远程调用,返回xml

    /**
         * 解析根据客户查询域名的xml返回域名信息
         * @param 调用客户编号查询域名xml。格式为:
         * <data>
         *      <method>domain</method>
         *        <dnion>
         *            <tGroup />
         *            <cGroup />
         *            <cusnumber>1300000741</cusnumber>
         *            <back>domain</back>
         *        </dnion>
         *</data>
         * yanglei
         * 2015.2.6
         * 得到的是一个map,key是域名id value是一个数组,[0]=类型,[1]=名称,[2]=后台客户id
    */
        public Map getDomainList(String cusnumber)throws CDNBandwidthAPIException {
            Map domainmap = new HashMap();
            //获取xml
            XmlDecryption xmldp = new XmlDecryption();
            String strXml =xmldp.XmlToString(xmldp.buildDomainnameXML(null , null , cusnumber));//根据buildDomainnameXML方法得到xml并且调用XmlToString方法转换成字符串
            if(strXml != null){
                //解析xml获取数据
                InputStream in = getBandwidthStream(strXml, 0);
                SAXBuilder saxbuilder = new SAXBuilder();
                if (null != in) {
                    Document doc = null;
                    try {
                        doc = saxbuilder.build(in);
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                    
                    Element root = doc.getRootElement();
                    Element msg = root.getChild("msg");
                    String code = msg.getChildTextTrim("code");
                    if("100".equals(code)){
                        Element dnion = root.getChild("dnion");
                        Element detail = dnion.getChild("detail");
                        if(detail != null){
                            List<Element> clist = detail.getChildren();
                            for(int i = 0;i < clist.size();i++){
                                String id = clist.get(i).getAttributeValue("dnid");
                                String type = clist.get(i).getAttributeValue("dtype");
                                String name = clist.get(i).getAttributeValue("dname");
                                String custid = clist.get(i).getAttributeValue("custid");
                                String typename [] = new String[3];
                                typename[0] = type;
                                typename[1] = name;
                                typename[2] = custid;
                                domainmap.put(id, typename);
                            }
                        }
                    }
                }
            }
    
            return domainmap;
        }
    
        
        /**
         * 调用CDN带宽查询接口返回流
         * @param xml 请求接口内容
         * @param times 请求次数。默认失败后休眠2秒后重复尝试一次
         * @return
         * @throws CDNBandwidthAPIException
         */
        public InputStream getBandwidthStream(String xml, int times) throws CDNBandwidthAPIException {
            String bandwidthclient_path = System.getProperty("bandwidthclient_path", "http://dcp.dnion.com/dayuDataReport.action");//调用远程服务器的DayuDataReportAction的execute方法
            HttpPost post = new HttpPost(bandwidthclient_path);//用post方式请求
            CloseableHttpClient httpclient = HttpClients.createDefault();
            StringEntity entity = new StringEntity(ParameraterEncryption.parameraterBlur(xml), "UTF-8");//parameraterBlur方法XML参数加密
            post.setEntity(entity);
            CloseableHttpResponse response = null;
            try {
                response = httpclient.execute(post);
                int result = response.getStatusLine().getStatusCode();
                if (result == 200) {
                    InputStream iStream = response.getEntity().getContent();
                    return iStream;
                } 
                else{
                    throw new CDNBandwidthAPIException("Request cdn bandwidth api exception. Remote api return http status code: " + result + " 
     request body: " + xml);
                }
            } catch (IOException e) {
                //接口网络异常,休眠2s后重新尝试一次
                if(times < 1){
                    Threads.sleep(2000);
                    times++;
                    return getBandwidthStream(xml, times);
                }
                e.printStackTrace();
                return null;
            }
            
        }

    设置xml参数,将xml转换成String

    package com.dnion.dayu.zk.cdnbusiness;
    
    import java.io.IOException;
    import java.io.StringWriter;
    
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.output.Format;
    import org.jdom.output.XMLOutputter;
      
    public class XmlDecryption{  
    
        /**
         * 生成好带宽获取接口xml
         * @author yanglei
         * @date 2014.4.30
         * */
        public static Document buildBandwidthXML(String method,String begindate,String enddate,String domain,String outlay,String back){
            Element root = new Element("data");
            Document doc = new Document(root);
            Element method_element = new Element("method").setText(method);
            Element elements = new Element("dnion");
            elements.addContent(new Element("beginDate").setText(begindate));
            elements.addContent(new Element("endDate").setText(enddate));
            elements.addContent(new Element("domain").setText(domain));
            elements.addContent(new Element("outlay").setText(outlay));
            elements.addContent(new Element("back").setText(back));
            root.addContent(method_element);
            root.addContent(elements);
            return doc;
        }
       
        /**
         * 将jdom下的Document转换为xml字符串
         * @param document jdom下的Document
         * */
        public String XmlToString(Document document){ 
            Format format = Format.getPrettyFormat();      
            format.setEncoding("UTF-8");//设置编码格式   
              
            StringWriter out = new StringWriter();    //输出对象  
            String sReturn = ""; //输出字符串  
            XMLOutputter outputter = new XMLOutputter();   
            try {  
               outputter.output(document, out);  
            } catch (IOException e) {  
               e.printStackTrace();  
            }   
            sReturn = out.toString();   
            return sReturn;  
        } 
    }  
  • 相关阅读:
    PS:图像的编辑(三)修复画笔工具
    如何知道自己电脑连接的无线网密码
    ps里“栅格化图层”有啥作用
    如何解决 ERROR Code 1101报错
    Oracle中SCOTT用户的 emp、dept、bonus、salgrade表的属性和结构
    PSCC2019以上版本如何取消等比裁剪
    distinct 多列详解
    银行取款、查询余额、交电话费功能
    银行卡系统,输入密码取钱功能
    根据周长计算不同形状图形的面积
  • 原文地址:https://www.cnblogs.com/kisstear/p/4789155.html
Copyright © 2011-2022 走看看