问题描述:

  金融行业在系统模块分为财务和业务两个系统,我公司是负责业务模块系统,NC公司负责财务系统。但是财务有时候需要生成凭证,这时候就涉及业务模块了,我方就需要写NC凭证接口。这时候就需要三方交互好,确定规则。简单的说,就是我方发送一个正确的一个XML格式的字符给NC公司,然后NC公司会判断这个XML是不是符合规则,返回一个xml格式结果。好了,不多说,其实就是写一个Java代码,发送xml格式流和获取返回的xml格式的结果处理。

  1. public String checkNCSendPzFlag(String sendXML) throws Exception {
  2. String result = "";//returne标识
  3. try {
  4. /*********将xml发送到目标服务器*****************/
  5. //将xml保存在本地文件夹
  6. String path = "F:\\xml_voucher\\IMP\\NC.xml";
  7. File file = new File("F:\\xml_voucher\\IMP");
  8. file.mkdirs();//创建父文件夹
  9. File f2 = new File(path);
  10. f2.createNewFile();
  11. FileOutputStream fos = new FileOutputStream(f2);
  12. fos.write(sendXML.getBytes("utf-8"));//写入并设置编码格式
  13. fos.flush();
  14. fos.close();
  15.  
  16. //获取Servlet连接并设置请求的方法
  17. String url = "http://10.68.3.5:8020/service/XChangeServlet?account=04&groupcode=1";//NC接口地址
  18. URL realURL = new URL(url);
  19. HttpURLConnection connection = (HttpURLConnection) realURL
  20. .openConnection();
  21. connection.setDoOutput(true);
  22. connection.setRequestProperty("Content-type", "text/xml");
  23. connection.setRequestMethod("POST");
  24.  
  25. //将Document对象写入连接的输出流中
  26. BufferedOutputStream out = new BufferedOutputStream(connection
  27. .getOutputStream());
  28. BufferedInputStream input = new BufferedInputStream(
  29. new FileInputStream(path));
  30. int length;
  31. byte[] buffer = new byte[1000];
  32. while ((length = input.read(buffer, 0, 1000)) != -1) {
  33. out.write(buffer, 0, length);
  34. }
  35. input.close();
  36. out.close();
  37.  
  38. /***************从连接的输入流中取得回执信息***************/
  39. //输入流获取返回的xml,写入Document
  40. InputStream inputStream = connection.getInputStream();
  41. InputStreamReader isr = new InputStreamReader(inputStream, "utf-8");
  42. BufferedReader bufreader = new BufferedReader(isr);
  43. String xmlString = "";
  44. int c;
  45. while ((c = bufreader.read()) != -1) {
  46. System.out.print((char) c);
  47. xmlString += (char) c;
  48. }
  49. input.close();
  50. Document resDoc = DocumentHelper.parseText(xmlString);
  51.  
  52. /************对回执结果的后续处理…************/
  53. //document转化为xml,并保存
  54. TransformerFactory tFactory = TransformerFactory.newInstance();
  55. Transformer transformer = tFactory.newTransformer();
  56. DocumentSource source = new DocumentSource(resDoc);
  57. transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
  58. //设置文档的换行与缩进
  59. transformer.setOutputProperty(OutputKeys.INDENT, "YES");
  60. //设置日期格式
  61. SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss");
  62. String resFile = "E:\\用友\\回执目录\\BkMsg_会计凭证_"
  63. + fmt.format(new Date()) + ".xml";
  64. File resDis = new File("E:\\用友\\回执目录\\");
  65. if (!resDis.exists())
  66. resDis.mkdirs();
  67. StreamResult results = new StreamResult(new File(resFile));
  68. transformer.transform(source, results);
  69.  
  70. //jdom解析XML
  71. SAXBuilder builder = new SAXBuilder();
  72. org.jdom.Document doc = builder.build(new File(resFile));
  73. Element foo = doc.getRootElement();
  74. List allChildren = foo.getChildren();
  75. for (int i = 0; i < allChildren.size(); i++) {
  76. System.out.println(" 发送状态:"
  77. + ((Element) allChildren.get(i)).getChild("resultcode").getText());
  78. System.out.print("测试信息"
  79. + ((Element) allChildren.get(i)).getChild("resultdescription").getText());
  80. }
  81.  
  82. if (((Element) allChildren.get(0)).getChild("resultcode").getText()
  83. .equals("1")) {
  84. result = "导入成功!";
  85. } else {
  86. result = "导入失败:"
  87. + ((Element) allChildren.get(0)).getChild(
  88. "resultdescription").getText();
  89. }
  90. } catch (Exception e) {
  91. // TODO: handle exception
  92. result = "导入失败" + e.getMessage();
  93. e.printStackTrace();
  94. }
  95. return result;
  96. }

NC凭证接口(Java发送流和处理返回结果)的更多相关文章

  1. Java IO流详解(一)——简单介绍

    文件在程序中是以流的形式来传输的.所以用Java来传输文件就得使用到Java IO流. 1.流的概念和作用 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象<Thinkin ...

  2. Java发送http get/post请求,调用接口/方法

    由于项目中要用,所以找了一些资料,整理下来. GitHub地址: https://github.com/iamyong    转自:http://blog.csdn.net/capmiachael/a ...

  3. JAVA发送http get/post请求,调用http接口、方法

    import java.io.BufferedReader; import java.io.IOException;import java.io.InputStream; import java.io ...

  4. java发送短信开发,第三方接口方法

    必备的三个jar包Maven有自己去下: commons-logging commons-logging 1.1 commons-httpclient commons-httpclient 3.1 c ...

  5. Java发送企业微信应用消息

    1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接收到消息后,再 ...

  6. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  7. Java IO流详尽解析

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  8. 【Java基础】Java IO流的总结

    Java IO流分为输入流和输出流,而输入流和输出流中又分字符流和字节流.顾名思义,输入流则是输入到程序中计算,输出流是把程序的结果输出到文件或者设备.而字符流输入输出以字符为单位,字节流则是以字节为 ...

  9. 微信支付之01------获取订单微信支付二维码的接口------Java实现

    [ 前言:以前写过一个获取微信二维码支付的接口,发现最近公司新开的项目会经常用到,现在我又翻出代码看了一遍,觉得还是把整个代码流程记下来的好 ] 借鉴博客: 他这篇博客写得不错,挺全的:https:/ ...

随机推荐

  1. T-SQL 如何获取一个表的列名

    方法1: exec sp_columns [{table_name}],[{schema_name}] 方法2: SELECT * FROM syscolumns WHERE id=OBJECT_ID ...

  2. Python学习笔记5-闭合与生成器

    >>> import re >>> re.search('[abc]','mark') <_sre.SRE_Match object; span=(1, 2) ...

  3. 如何配置远程mysql服务器

    如何配置远程mysql服务器 分配用户权限 可以先看一下目前的用户权限状况: use mysql; select host,user,password from user; 然后分配新的权限给某一用户 ...

  4. jpa+springmvc+springdata(一)

    学习尚硅谷笔记: 首先配置application.xml: <?xml version="1.0" encoding="UTF-8"?> <b ...

  5. Linus:C++是一种糟糕的语言

    本文内容摘自http://blog.csdn.net/turingbook/article/details/1775488 C++是一种糟糕的(horrible)语言.而且因为有大量不够标准的程序员在 ...

  6. dubbox升级spring到4.x及添加log4j2支持

    今天花了点时间,把dubbox依赖的spring从3.x升级成最新版的4.x了,其它一些依赖的组件也顺带升级了,同时dubbo支持的第三方日志组件居然没有log4j2,加了点代码也一并支持了,蛋疼的是 ...

  7. [LeetCode] Implement Stack using Queues 用队列来实现栈

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  8. Android开发之Activity横竖屏切换生命周期重建问题

    当进行横竖屏切换的时候Activity的生命周期会重建,从而导致Activity崩溃等问题,为了避免这一问题,需要在AndroidManifest.xml文件中设置: <activity and ...

  9. ant windows环境配置

    详见如下链接,小蚂蚁builder.xml--apache-ant的配置 http://blog.csdn.net/gaohuanjie/article/details/40142687

  10. ViewPager实现引导页

    1. 要使用ViewPager,必须要创建 PagerAdapter. 这里创建一个 ViewPagerAdapter来继承PagerAdapter public class ViewPagerAda ...