HTTPConnection调用WebService接口

àì夳堔傛蜴生んèń 2022-08-08 06:44 334阅读 0赞

C#发布WebService接口

Center

使用HTTPConnection直接Post参数进行调用

  1. URL url = new URL(surl);
  2. HttpURLConnection connection = (HttpURLConnection) url
  3. .openConnection();
  4. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
  5. connection.setDoOutput(true);
  6. connection.setRequestMethod("POST");
  7. connection.setDoInput(true);
  8. connection.setRequestProperty("Content-Type",
  9. "text/xml; charset=utf-8");
  10. connection.setRequestProperty("SOAPAction",
  11. "http://tempuri.org/AddMyToReadList");
  12. OutputStreamWriter out = new OutputStreamWriter(
  13. connection.getOutputStream(), "utf-8");
  14. StringBuilder sb = new StringBuilder();
  15. sb.append("<MyToReadListInfo>");
  16. sb.append("<SSIC_ID>" + info.getSsic_id() + "</SSIC_ID>");
  17. sb.append("<URL><![CDATA[" + retURL + "]]></URL>");
  18. sb.append("<OutID><![CDATA[" + strNow + "]]></OutID>");
  19. sb.append("<Infor_Id><![CDATA[" + strNow.substring(8)
  20. + "]]></Infor_Id>");
  21. sb.append("<Stru_ID></Stru_ID>");
  22. sb.append("<Opertor>000000003</Opertor>");
  23. sb.append("<Status>0</Status>");
  24. sb.append("<Title><![CDATA[" + strtitle + "]]></Title>");
  25. sb.append("</MyToReadListInfo>");
  26. StringBuilder header_sb = new StringBuilder();
  27. StringBuilder footer_sb = new StringBuilder();
  28. header_sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
  29. header_sb
  30. .append("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">");
  31. header_sb.append("<soap:Body>");
  32. header_sb
  33. .append("<AddMyToReadList xmlns=\"http://tempuri.org/\">");
  34. header_sb.append("<AppKeyValue>");
  35. header_sb.append("<AppID><![CDATA[" + getProperty("appid")
  36. + "]]></AppID>");
  37. header_sb.append("<AppValue><![CDATA["
  38. + getProperty("appvalue") + "]]></AppValue>");
  39. header_sb.append("</AppKeyValue>");
  40. header_sb.append("<MyToReadListInfoList>");
  41. footer_sb.append("</MyToReadListInfoList>");
  42. footer_sb.append("</AddMyToReadList>");
  43. footer_sb.append("</soap:Body>");
  44. footer_sb.append("</soap:Envelope>");
  45. out.write(header_sb.toString() + sb.toString() + footer_sb); // 直接post的进行调用!
  46. //解析返回的XML字串
  47. out.flush();
  48. out.close();
  49. connection.connect();
  50. InputStream urlStream = connection.getInputStream();
  51. BufferedReader bufferedReader = new BufferedReader(
  52. new InputStreamReader(urlStream));
  53. String ss = null;
  54. String total = "";
  55. while ((ss = bufferedReader.readLine()) != null) {
  56. total += ss;
  57. }
  58. logger.info("接口返回结果");
  59. logger.info(total);
  60. bufferedReader.close();
  61. Document document = DocumentHelper.parseText(total);
  62. Node node = document
  63. .selectSingleNode("/soap:Envelope/soap:Body/*[name()='AddMyToReadListResponse']/*[name()='AddMyToReadListResult']/*[name()='RetCode']");
  64. String retCode = node.getText();
  65. logger.info("retCode = " + retCode);

可以使用XPath来直接读取解析返回的字串,具体路径如果无法准确获知,可通过下面的方法获取节点路径。

  1. public static void treeWalk(Document document) {
  2. treeWalk(document.getRootElement());
  3. }
  4. public static void treeWalk(Element element) {
  5. for (int i = 0, size = element.nodeCount(); i < size; i++) {
  6. Node node = element.node(i);
  7. System.out.println("Name = " + element.getName() + " Path = "
  8. + element.getPath());
  9. if (node instanceof Element) {
  10. treeWalk((Element) node);
  11. } else {
  12. // do something....
  13. }
  14. }
  15. }

发表评论

表情:
评论列表 (有 0 条评论,334人围观)

还没有评论,来说两句吧...

相关阅读