我们在实际的生产、开发实践中,其实要和许多第三方服务商进行打交道,这其中包括使用他们提供的批量与联机服务,但与别的互联网企业不大相同的是,银行作为传统企业,其一贯重视安全性,许多在互联网企业看似理所当然的事情,在银行内实践起来就不那么顺畅。比如,最近,因为第三方系统升级(升级改造的原因自然是因为国家监管、政策性要求、保密性要求,否则像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

最新文章

  1. springMVC接收参数的几种方式
  2. 使用js脚本批量下载慕课网视频
  3. mui禁止滚动条和禁止滚动
  4. 7-Highcharts曲线图之分辨带
  5. HTML中的<select>标签如何设置默认选中的选项
  6. java中存在的内存泄漏
  7. iOS:iOS开发中用户密码保存位置
  8. virtual pc中添加软盘支持
  9. Git管理工具对照(GitBash、EGit、SourceTree)
  10. jquery拖拽效果
  11. 前端系列之JavaScript基础知识概述
  12. 使用SVM对多类多维数据进行分类
  13. Python11/26--mysql之视图/触发器/事务/存储过程
  14. 逆袭之旅.DAY07东软实训..封装~继承~抽象~final
  15. linux命令学习之:mv
  16. RACCommand中的信号
  17. EPC摘抄
  18. 用html5实现的flappy-bird
  19. poj1273(Edmonds-Karp)
  20. 更换git用户名或密码

热门文章

  1. Flord算法传递闭包
  2. Python: pyinstaller打包exe(含file version信息)
  3. C# 标准事件模式
  4. 浅谈java classloader
  5. Flask 语音分析
  6. C++实现-特征码遍历
  7. js代码上的优化
  8. Elasticsearch Java API简介
  9. Understanding Undefined Behavior
  10. OpenCV2计算机编程手册(二)基于类的图像处理