问题描述:

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

     public String checkNCSendPzFlag(String sendXML) throws Exception {
String result = "";//returne标识
try {
/*********将xml发送到目标服务器*****************/
//将xml保存在本地文件夹
String path = "F:\\xml_voucher\\IMP\\NC.xml";
File file = new File("F:\\xml_voucher\\IMP");
file.mkdirs();//创建父文件夹
File f2 = new File(path);
f2.createNewFile();
FileOutputStream fos = new FileOutputStream(f2);
fos.write(sendXML.getBytes("utf-8"));//写入并设置编码格式
fos.flush();
fos.close(); //获取Servlet连接并设置请求的方法
String url = "http://10.68.3.5:8020/service/XChangeServlet?account=04&groupcode=1";//NC接口地址
URL realURL = new URL(url);
HttpURLConnection connection = (HttpURLConnection) realURL
.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-type", "text/xml");
connection.setRequestMethod("POST"); //将Document对象写入连接的输出流中
BufferedOutputStream out = new BufferedOutputStream(connection
.getOutputStream());
BufferedInputStream input = new BufferedInputStream(
new FileInputStream(path));
int length;
byte[] buffer = new byte[1000];
while ((length = input.read(buffer, 0, 1000)) != -1) {
out.write(buffer, 0, length);
}
input.close();
out.close(); /***************从连接的输入流中取得回执信息***************/
//输入流获取返回的xml,写入Document
InputStream inputStream = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufreader = new BufferedReader(isr);
String xmlString = "";
int c;
while ((c = bufreader.read()) != -1) {
System.out.print((char) c);
xmlString += (char) c;
}
input.close();
Document resDoc = DocumentHelper.parseText(xmlString); /************对回执结果的后续处理…************/
//document转化为xml,并保存
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DocumentSource source = new DocumentSource(resDoc);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
//设置文档的换行与缩进
transformer.setOutputProperty(OutputKeys.INDENT, "YES");
//设置日期格式
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss");
String resFile = "E:\\用友\\回执目录\\BkMsg_会计凭证_"
+ fmt.format(new Date()) + ".xml";
File resDis = new File("E:\\用友\\回执目录\\");
if (!resDis.exists())
resDis.mkdirs();
StreamResult results = new StreamResult(new File(resFile));
transformer.transform(source, results); //jdom解析XML
SAXBuilder builder = new SAXBuilder();
org.jdom.Document doc = builder.build(new File(resFile));
Element foo = doc.getRootElement();
List allChildren = foo.getChildren();
for (int i = 0; i < allChildren.size(); i++) {
System.out.println(" 发送状态:"
+ ((Element) allChildren.get(i)).getChild("resultcode").getText());
System.out.print("测试信息"
+ ((Element) allChildren.get(i)).getChild("resultdescription").getText());
} if (((Element) allChildren.get(0)).getChild("resultcode").getText()
.equals("1")) {
result = "导入成功!";
} else {
result = "导入失败:"
+ ((Element) allChildren.get(0)).getChild(
"resultdescription").getText();
}
} catch (Exception e) {
// TODO: handle exception
result = "导入失败" + e.getMessage();
e.printStackTrace();
}
return result;
}

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 去除特定字段的前导0

    在工作过程中遇到一个需求,要从特定字段中删除前导零,这是一个简单的VARCHAR(10)字段. 例如,如果字段包含"00001A",则SELECT语句需要将数据返回为"1 ...

  2. 2-kvm创建快照以及网卡绑定

    kvm创建快照以及网卡绑定 创建node1 查看node1 进入到kvm的配置文件里 将rhcs文件复制一份取名为node1.xml 通过这个命令随机生成一个uuid 然后就进入node1.xml里修 ...

  3. 1869: Mathematics and Geometry

    这是郑州轻工业学校的一次校赛的校内选拔赛,看名字是计算几何 的题 题目地址: http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1869 Descript ...

  4. Strust OGNL详解

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...

  5. C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器

    必须JobManager初始化 方式1: public void Start()         {             JobManager.AddJob(() => FetchingDa ...

  6. mysql workbench如何把已有的数据库导出ER模型

    mysql workbench的特长是创建表结构的,然后在结构图中,圈圈点点,很容易就利用可视化方式把数据库建好,然后再导入到数据库服务器中,这种办法很效率.但是有时我们有一个需求,事先没有建表结构模 ...

  7. SQLite3源程序分析之虚拟机

    前言 最早的虚拟机可追溯到IBM的VM/370,到上个世纪90年代,在计算机程序设计语言领域又出现一件革命性的事情——Java语言的出现,它与c++最大的不同在于它必须在Java虚拟机上运行.Java ...

  8. Python小白的发展之路之Python基础(一)

    Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...

  9. ViewPager实现引导页

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

  10. [转]SQL 常用函数及示例

    原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...