A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

系统与系统之间WebService的应用还是挺多的。尤其是webService其跨平台的特性,更是让人迷恋,既方便又简洁。下面发一下在实际开发过程中所用到的一个webservice接口的实例。

这是一个价格管理系统调用另一个系统的webservice接口。
前台我们采用输入报文然后点击调用接口的方式,我们先来看一下前端页面
在文本框中输入一下报文,点击按钮就会调用webservice接口,与另一系统连接。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bfo="http://bfo.webservice.portal.opp.bfo2.sec.com/">   <soapenv:Header/>   <soapenv:Body>      <bfo:checkBFOIINetwork/>   </soapenv:Body></soapenv:Envelope>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

js代码段

function ToBfoInteface(){        showMask();        var testXmlStr = $("#TestBFOInterface").val();        if(testXmlStr==null||testXmlStr==""){            alert("请填写接口报文!");        }        $.ajax({            url: appUrl + '/test/toBFOInterface',            contentType:'application/xml;charset="UTF-8"',            type:"post",            dataType:"text",            processData: false,            data : testXmlStr,            async:false,            success : function(responseText) {                hideMask();                var text = "";                try{                    text = responseText;                }catch(e){                    text = "error"                }                showMsg(text,"调取bfo接口结果:");                initMenuDataNum();            }        });    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

后台代码段

这是HttpKit类的工具方法    public static Map<String, String> postSoap3(String url, String xml) {        Map<String, String> resultMap = new HashMap<String, String>();        // 返回字符串        String rs = null;        // 返回状态        String resultStatusCode = "";        // 创建httppost        HttpPost httpPost = null;        // 创建参数队列        CloseableHttpClient httpClient = null;        try {            String msg = "";            if(Log.msetlog.isDebugEnabled()){                if(xml.indexOf("<TaskId>") > 0){//审批时调用                    msg = "; 审批时相关TaskId :" + xml.substring(xml.indexOf("<TaskId>")+8, xml.indexOf("</TaskId>"));                }else if(xml.indexOf("<def:EspaId>") > 0){                    msg = "; SEQID:" + xml.substring(xml.indexOf("<def:EspaId>")+12, xml.indexOf("</def:EspaId>"));                }else if(xml.indexOf("<espaId>") > 0){                    msg = "; SEQID:" + xml.substring(xml.indexOf("<espaId>")+8, xml.indexOf("</espaId>"));                }else if(xml.indexOf("<wsse:Username>") > 0){                    msg = "; UserName:" + xml.substring(xml.indexOf("<wsse:Username>")+15, xml.indexOf("</wsse:Username>"));                }            }            if ("https".equals(url.substring(0, 5))) {                // 使用连接池                // httpClient=createSSLInsecureClient();                // 不使用连接池                Log.msetlog.debug("创建https对应httpClient开始时间:"+DateKit.getNowTime()+msg);                httpClient = createSSLClientDefault();                Log.msetlog.debug("创建https对应httpClient结束时间:"+DateKit.getNowTime()+msg);            } else {                // httpClient=HttpClients.custom().setConnectionManager(cm).build();                Log.msetlog.debug("创建httpClient开始时间:"+DateKit.getNowTime()+msg);                httpClient = HttpClients.createDefault();                Log.msetlog.debug("创建httpClient结束时间:"+DateKit.getNowTime()+msg);            }            Log.msetlog.debug("创建httpPost开始时间:"+DateKit.getNowTime()+msg);            httpPost = new HttpPost(url);            Log.msetlog.debug("创建httpPost结束时间:"+DateKit.getNowTime()+msg);            Log.msetlog.debug("设置httpPost属性开始时间:"+DateKit.getNowTime()+msg);            HttpEntity re = new StringEntity(xml, "UTF-8");            httpPost.setHeader("Content-Type",                    "application/soap+xml; charset=utf-8");            httpPost.setEntity(re);            Log.msetlog.debug("设置httpPost属性结束时间:"+DateKit.getNowTime()+msg);            Log.msetlog.debug("最终执行调用接口开始时间:"+DateKit.getNowTime()+msg);            CloseableHttpResponse response = httpClient.execute(httpPost);            Log.msetlog.debug("最终执行调用接口结束时间:"+DateKit.getNowTime()+msg);            if (response != null) {                resultStatusCode = String.valueOf(response.getStatusLine()                        .getStatusCode());            }            try {                HttpEntity entity = response.getEntity();                if (entity != null) {                    rs = EntityUtils.toString(entity, "UTF-8");                }            } finally {                response.close();                httpPost.abort();            }        } catch (Exception e) {            Log.soaplog.debug("error", e);            e.printStackTrace();        } finally {            // 关闭连接,释放资源            try {                httpClient.close();            } catch (Exception e) {                Log.soaplog.debug("error", e);                e.printStackTrace();            }        }        resultMap.put("ResultStatus", resultStatusCode);        resultMap.put("ResultXML", rs);        return resultMap;    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78

下面这段代码用来获取xml报文的某个节点的值

public static String getNodeByXml(String xml, String node) {        Document doc = convertDocFromStr(xml);        if (doc == null) {            return null;        } else {            Node typeNode = doc.selectSingleNode(".//*[local-name()='" + node                    + "']");            if (typeNode == null) {                return null;            } else {                return typeNode.getStringValue();            }        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

返回带参的xml数据

public static String textBfo(String xml){         Map<String, String> resultMap = HttpKit.postSoap3(bfo_webservice_url,xml);        String msg = resultMap.get("ResultXML");//返回XML        String message = HttpKit.getNodeByXml(msg,"message");        return message;    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

controller层

  @RequestMapping("/toBFOInterface")    @ResponseBody    public Object toBFOInterface(HttpServletRequest request,HttpServletResponse response,@RequestBody String requestBody) {        String xml = null;        try {            xml = URLDecoder.decode(requestBody,"UTF-8");        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        String msg = BFOHttpKit.textBfo(xml);//返回XML        return msg;    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

至此,webservice接口已开发完毕。


1 个回复

倒序浏览

很不错,受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马