zoukankan      html  css  js  c++  java
  • NC凭证接口(Java发送流和处理返回结果)

    问题描述:

      金融行业在系统模块分为财务和业务两个系统,我公司是负责业务模块系统,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     }
  • 相关阅读:
    ruby2.2.2在msvc2010上编译
    msvc2010生成的指令序列有问题,可能跟pgo有关
    Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.
    正则总结
    实现点击按钮全选功能
    轮播图(省代码方法)
    js实现复制URL功能
    字符串的常用方法
    两种文件上传的实现-Ajax和form+iframe
    jquery中attr和prop的区别
  • 原文地址:https://www.cnblogs.com/atp-sir/p/5919655.html
Copyright © 2011-2022 走看看