java调用百望税控NISEC_SKSC.dll发送xml报文
1.第一个问题:Java调用dll文件
JNative方式调用dll
JNative是一种能够使Java语言使调用DLL的一种技术,对JNI进行了封装,可能有些读者会有这样一个问题,JNative对JNI进行了封装,并且是一种跨语言的使用DLL,会不会在效率方面很不如人意,我可以用我使用Jnative的经验告诉你,不会!因为我用Jnative就是用来处理大量的数据调用,是基于实时数据库接口的调用。而实时数据库的数据量是非常大的。
首先下载JNative,
注意:将JNative解压,并将其中的JNativeCpp.dll拷贝到system32文件夹中,libJNativeCpp.so是linux平台使用的。
(网址:http://blog.csdn.net/a491857321/article/details/51504094)
使用过程出现问题:
1.找不到NISEC_SKSC.dll,出现这个问题是因为我仅仅将NISEC_SKSC.dll文件放到system32下,而NISEC_SKSC.dll有其他dll的引用,所以需要将安装过的税控所有文件拷到system32下
2.找不到JNativeCpp.dll,需要将其放到system32下,同时JNative.jar需要放到jdk和jre目录下面
配置classpath添加JNative.jar的路径
2.第二个问题。xml与bean转换
采用XStream读取返回信息转为bean
3.第三个问题。传递xml报文,编码问题,一定要写成gbk编码
public static String getPKServerResult(String xmlcontent, Object... objs) {logger.info("log输入为======\r" + xmlcontent);Pointer pIn = null;Pointer pOut = null;try {String res = JNAUtil.class.getClassLoader().getResource("NISEC_SKSC.dll").getFile();// 加载动态库及函数JNative jnPKServer = new JNative("NISEC_SKSC.dll", "PostAndRecvEx");byte[] bytes = (xmlcontent + '\0').getBytes("GBK");MemoryBlock memoryBlockIn=MemoryBlockFactory.createMemoryBlock(bytes.length);pIn = new Pointer(memoryBlockIn);// 设置传入参数pIn.setMemory(bytes);jnPKServer.setParameter(0, pIn);// 处理传出参数if (objs != null && objs.length == 1 && objs[0] instanceof Number) {MemoryBlock memoryBlockOut=MemoryBlockFactory.createMemoryBlock(((Number) objs[0]).intValue());pOut = new Pointer(memoryBlockOut);} else {MemoryBlock memoryBlockOut=MemoryBlockFactory.createMemoryBlock(1000000);pOut = new Pointer(memoryBlockOut);}jnPKServer.setParameter(1, pOut);// 执行调用jnPKServer.invoke();// String bak ="";
// String bak =pOut.getAsString();byte[] mm=pOut.getMemory();String bak = new String(mm,"GBK");
// String bak = new String(pOut.getAsByte(0),"GBK");// for(int i=0, sumi=((Number) objs[0]).intValue(); i< sumi; i++){// bak+=((char) pOut.getAsByte(i));
// }logger.info("log输出为======\r" + bak);return bak.trim();} catch (Exception e) {logger.error("Jnative遇到错误", e);} finally {try {if (pIn != null) {pIn.dispose();}if (pOut != null) {pOut.dispose();}} catch (NativeException e) {logger.error("Jnative遇到错误", e);}}return null;}
网址:http://bbs.csdn.net/topics/390806040,String就是一段字符串,需要通过byte[]进行编码的操作
到此技术点基本搞定了,突然有一天客户打电话说网页打不开了,看了一下,tomcat关掉了,开启后,运行一段时间又挂了。。。后来想想可能是因为JNA需要申请内存空间,如果一次申请太多,会导致程序异常,所以将调用接口改为递归形式,每次只读一个开票设备一天的数据。问题解决了,看一下效果吧
java调用百望税控NISEC_SKSC.dll发送xml报文相关推荐
- java调用C或者C++动态库dll
java调用C或者C++动态库dll,本文章使用的是IntelliJ IDEA Community Edition 2021.2.3版本测试的 1.新建项目 linjie.demo,添加类HelloL ...
- Java调用阿里云短信接口,发送短信
Java调用阿里云短信接口,发送短信 1.短信服务这个很简单,只需要知道accessKeyId(AK).accessKeySecret(SK).短信签名.短信模板即可. 2.域名和产品名称是固定的,使 ...
- Java调用C/C++编写的第三方dll动态链接库(zz)
这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...
- 转Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
http://www.cnblogs.com/AnnieKim/archive/2012/01/01/2309567.html 转载于:https://www.cnblogs.com/meetrice ...
- java dll 调用方法_关于Java调用dll的方法 | 学步园
Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C 写好的DLL库时,由于基本数据类型不同.使用字节 ...
- android调用 qt so文件路径,Android Java调用Qt写的so库
有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...
- 明华读卡器 java_Java调用明华RF读写器DLL文件过程解析
这篇文章主要介绍了Java调用明华RF读写器DLL文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先jdk必须得是32位的,IDE也必 ...
- Java调用ocx控件以及dll
2019独角兽企业重金招聘Python工程师标准>>> http://lvqingboy-163-com.iteye.com/blog/769358 通过Java调用OCX控件有几种 ...
- java调用ocx控件获取数据_Java调用ocx控件以及dll
通过Java调用OCX控件有几种方法,JNI.JACOB.Jawin等 1.JNI 最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐. 2.Jawin 尝试了一下,效果不错,但相对来说, ...
最新文章
- bzoj2427: [HAOI2010]软件安装
- Jupyter Notebook——设置远程服务器登陆
- 辽宁省普通话水平测试软件,辽宁普通话水平测试报名入口
- 【Linux系统编程】Linux进程调度
- SAP Spartacus B2B 页面信息提示图标的弹出窗口显示实现逻辑
- delphi打开word文件(刚刚学会的嘿嘿~)
- Java 代码复用 —— 泛型
- 优秀案例UI素材模板|深层解析iPhone手机APP页面怎么设计?
- python爬取微博恶评_Python爬取新浪微博评论数据,了解一下?
- Xcode9使用新体验
- mysql 水晶报表_Crystal Reports 2008(水晶报表) JDBC连接mysql数据库
- 项目管理知识领域--十大知识领域
- 图片放大后很模糊怎么办?
- PySpark处理数据并图表分析
- python docx 字体设置_python docx 中文字体设置
- VB编程:UCase转大写,LCase转小写-4
- 如何实现受管控的安全文件传输MFT?
- Skynet项目搭建
- LaTeX中引用参考文献
- 使用 auto-drawing 画一个鱼骨图
热门文章
- Ubuntu 18.04配置静态IP地址
- nginx: [warn] conflicting server name “xxx“ on 0.0.0.0:80解决
- 进入pe系统 原系统启动服务器,pe和启动系统安装系统教程
- 荧光平均值计算matlab,科学网—使用Image J进行自动荧光定量分析 - 陆绮的博文...
- 解决IDEA : Could not autowire. No beans of ‘xxxx‘ type found
- 前端开发环境搭建(工具使用)
- 天刀手游pc端显示服务器维护,天刀手游电脑版无法更新网络修复工具
- Linux 内核 vs Windows 内核
- Anker—学习成长笔记
- PHP小V脸蛋白线,HPH小v脸蛋白线好不好用?HPH小v脸蛋白线怎么用