NC凭证接口(Java发送流和处理返回结果)
问题描述:
金融行业在系统模块分为财务和业务两个系统,我公司是负责业务模块系统,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发送流和处理返回结果)的更多相关文章
- Java IO流详解(一)——简单介绍
文件在程序中是以流的形式来传输的.所以用Java来传输文件就得使用到Java IO流. 1.流的概念和作用 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象<Thinkin ...
- Java发送http get/post请求,调用接口/方法
由于项目中要用,所以找了一些资料,整理下来. GitHub地址: https://github.com/iamyong 转自:http://blog.csdn.net/capmiachael/a ...
- JAVA发送http get/post请求,调用http接口、方法
import java.io.BufferedReader; import java.io.IOException;import java.io.InputStream; import java.io ...
- java发送短信开发,第三方接口方法
必备的三个jar包Maven有自己去下: commons-logging commons-logging 1.1 commons-httpclient commons-httpclient 3.1 c ...
- Java发送企业微信应用消息
1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接收到消息后,再 ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java IO流详尽解析
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- 【Java基础】Java IO流的总结
Java IO流分为输入流和输出流,而输入流和输出流中又分字符流和字节流.顾名思义,输入流则是输入到程序中计算,输出流是把程序的结果输出到文件或者设备.而字符流输入输出以字符为单位,字节流则是以字节为 ...
- 微信支付之01------获取订单微信支付二维码的接口------Java实现
[ 前言:以前写过一个获取微信二维码支付的接口,发现最近公司新开的项目会经常用到,现在我又翻出代码看了一遍,觉得还是把整个代码流程记下来的好 ] 借鉴博客: 他这篇博客写得不错,挺全的:https:/ ...
随机推荐
- CentOS6.x生产环境下一键安装mono+jexus的脚本,自启动,带服务,版本号自控
转自: http://linuxdot.net/bbsfile-3784 1.支持哪些个平台?答:暂时仅支持CentOS6.x平台,7.x未测试,欢迎测试并到群里反馈给我(昵称:无聊人士) 2.一键安 ...
- SQL Server 2008 R2——当前日期下,一年前数据的统计值
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- android px转换为dip/dp
/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...
- Spring基础
一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...
- BZOJ 1984: 月下“毛景树” [树链剖分 边权]
1984: 月下“毛景树” Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1728 Solved: 531[Submit][Status][Discu ...
- excel基本
1,换行:control+option(alt)+enter
- kettle中全局变量的设置
设置全局变量. 找到.properties文件: 在文件中设置值: 在kettle中新建一个job(不用做任何设置): 转换中获取便元的设置: 重启kettle的执行结果:
- ASP.NET MVC - 定制属于你自己的ViewEngine
http://blog.csdn.net/jackvs/article/details/7788743 ASP.NET MVC出来这么久了,心中却又很多的疑惑:为什么所有的View都要放在Views目 ...
- tomcat 8.5.9.0 解决catalina.out过大的问题
先吐嘈一下tomcat这个项目,日志切割这么常见的功能,tomcat这种知名开源项目默认居然不开启,生产环境跑不了几天,磁盘就满了,而且很多网上流传的方法,比如修改conf/logging.prope ...
- 比较.NET程序集(DLL或EXE)是否相同
如何比较两个.NET程序集(DLL或EXE)是否相同呢? 直接比较文件内容?当然没那么简单了,这个你可以去试试,去比较一下两次Build产生的程序集, 就算内容没有改变,产生的程序集的二进制文件也是不 ...