NodeJS调用jar包
我们在实际的生产、开发实践中,其实要和许多第三方服务商进行打交道,这其中包括使用他们提供的批量与联机服务,但与别的互联网企业不大相同的是,银行作为传统企业,其一贯重视安全性,许多在互联网企业看似理所当然的事情,在银行内实践起来就不那么顺畅。比如,最近,因为第三方系统升级(升级改造的原因自然是因为国家监管、政策性要求、保密性要求,否则像XXX第一大行这样的企业,强势是他一贯的作风),导致我们调用服务也需要配合改造,这里面涉及某一个请求字段的加解密,对方提供了一个jar包,明确说明后续升级可能只需要更新jar包即可。而我们整个系统是.net实现的,但因涉及联机字段转换,这个看似简单,其实就要想点心思去想怎么实现以及后续的便捷升级。三种方案:
a.通过IKVM将这个Jar包转换为DLL,然后很方便的去引用,问题是后续升级可能相对比较麻烦。
b.生产上服务器部署WAS或者Tomcat,你只需要基于此Jar包开发一个简单的http接口,问题是代价太大,增加运维负担。
c.基于Node.js开发一个简单的HTTP接口。
我来模拟一个jar包,接口调用我用System.out输出,这样在Node.js中可以比较方便的调用。
import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class Test { public static void main(String[] args) throws UnsupportedEncodingException {
if(args!=null&&args.length == 1){
System.out.print(toParse(args[0]));
}else{
System.out.print("Wrong Args");
}
} static String toParse(String str){
return Base64.getUrlEncoder().encodeToString(str.getBytes());
}
}
然后这里写js代码,就是这个样子,其实就是Node.js中的child_process调用执行这个jar包,注意刚才说了jar包中方法输出用System.out,看下面的exec回调函数中stdout可以访问:
function parserequest(info,res){
logger.debug(info);
var exec = require('child_process').exec, child;
var exec_path = "java -jar Test.jar " + info.id ;
var data;
child = exec(exec_path,function (error, stdout, stderr){
logger.debug(stdout);
data = "{errcode:0,errmsg:'" + stdout +"'}"
res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8;'});
res.end(JSON.stringify(data));
if(error !== null){
logger.debug('stderr: ' + stderr);
logger.debug('exec error: ' + error);
data = "{errcode:500,errmsg:'" + error + "'}"
res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8;'});
res.end(JSON.stringify(data));
}
});
}
部署之后,我们通过页面直接访问,初步看下是否是我们想要的结果,之后在我们的系统中直接HTTP调用,解析JSON字段就可以了。


借用《吐槽大会》池子的话,知识点有没有:Node.js中日志log4js,npm安装之后里面有示例代码,就是下面这样:
var log4js = require('log4js');
log4js.configure({
appenders: [
{
type: "file",
filename: "test.txt",
category: [ 'test','console' ]
},
{
type: "console"
}
],
replaceConsole: false
});
var logger = log4js.getLogger('test');
logger.setLevel('debug');
JSON处理之Node.js中的JSON2,npm装之后

Node.js调用jar,涉及Node.js中child_process接口,比如这里
logger.debug(info);
var exec = require('child_process').exec, child;
var exec_path = "java -jar Test.jar " + info.id ;
就这么愉快的结束了!
文章来源:https://blog.csdn.net/kangkanglou/article/details/69274818
NodeJS调用jar包的更多相关文章
- Unity调用Android的两个方式:其一、调用jar包
unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...
- Loadrunner11.0调用Jar包
又好几天不写东西了,是不是意味着最近没有大的进步,时时敲打自己. 今天把loadrunner如何调用Jar包搞定了,现在把配置的过程中需要注意的东西写下来,分享给小伙伴儿,减少他们在前行路上的弯路. ...
- html实现调用jar包
整体思路:html引用URL protocol-本地注册表key,key对应某一c#写的exe可执行文件,由exe可执行文件调用cmd,cmd执行jar包. 1.添加注册表: Windows Regi ...
- winform调用jar包
因为工作需要,需要做一个数据上传的程序,客户规定的是:数据接口采用http连接,采用JSON-RPC轻量级远程调用协议.所以决定用winform做一个管理界面(其中还包括其他的功能),java完成数据 ...
- (转载)Python 的 JPype 模块调用 Jar 包
Python 的 JPype 模块调用 Jar 包 背景与需求 最近学习并安装使用了HttpRunner框架去尝试做接口测试,并有后续在公司推广的打算. HttpRunner由Python开发,调用接 ...
- Python调用jar包中的方法
[本文出自天外归云的博客园] 需求 最近在后台项目代码中一段自定义的AES加解密的程序在平时的测试工作中应用频繁.因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意.最后转换思路 ...
- 如何制作Jar包并在android中调用jar包
android制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmani ...
- jmeter 调用jar包 本地加密
1.因为加密接口是有我们自己加密方式,所有加密包由开发提供,获得加密包后方式jmeter目录/lib/ext文件夹中 2.选择引入加密包 3.添加BeanShell Sampler和Debug Sam ...
- python实战===用python调用jar包(原创)
一个困扰我很久的问题,今天终于解决了.用python调用jar包 很简单,但是网上的人就是乱转载.自己试都不试就转载,让我走了很多弯路 背景:python3.6 32位 + jre 32位 + ...
随机推荐
- node API buffer
https://cnodejs.org/topic/5189ff4f63e9f8a54207f60c 1.拼接字符串时,String比buffer要快,buffer需要toString().当保存非u ...
- Oracle EBS中有关Form的触发器的执行顺序
http://blog.csdn.net/postfxj/article/details/8135769 触发器执行顺序: 1. 当打开FORM时: (1) PRE-FORM (2) ...
- CSS 温故而知新
如何让文字垂直居中 需要设置div的height,line-height 为一样的值,如下所示: <div class="ui-bar ui-bar-e" style=&qu ...
- EnyimMemcached中用DateTime参数设置过期后赋值有问题的解决.
环境: win10 64位.memcached 1.4.4 64位.EnyimMemcached 2.16.0(ps:2.13.0也有此问题,别的版本就没试了). EnyimMemcached git ...
- 解决微服务网关Ocelot使用AddStoreOcelotConfigurationInConsul后请求404问题
一个小插曲,最近研究 netcore 微服务网关,在使用AddStoreOcelotConfigurationInConsul将配置存到consul后,任何经过网关的请求都出现404,并且没有任何有用 ...
- “全栈2019”Java多线程第二十五章:生产者与消费者线程详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 双11,自动领取优惠券 js 代码
http://www.zhihu.com/question/36426051/answer/67690322 本来我不熟悉 js,正好研究一下 (function(window, document) ...
- (1)RGB-D点云生成
bin文件夹下为生成的可执行文件generate_cloud,执行时和data文件放在同一文件夹下. 图像数据来自小觅相机. src下的源码,包括generatePointCloud.cpp和CMak ...
- 对数组排序三种方式sort、asort与ksort
关联数组是 键值(key)=>值(value)形式. sort只对值进行排序,键值不参与排序: asort对值进行排序,键值参与排序: ksort对键值进行排序,值参与排序: 实例,比如数组: ...
- flask-mysqldb安装时EnvironmentError: mysql_config not found
安装时候的日志如下: sh: : mysql_config: not found Traceback (most recent call last): File , in <module> ...