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

原文地址:https://www.cnblogs.com/flyingeagle/p/9194130.html

时间: 2024-08-18 08:04:22

NodeJS调用jar包的相关文章

如何制作Jar包并在android中调用jar包

android制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmanifest.xml和res文件夹,就可以了.否则在调用jar包的时候会出现“Error generating final archive: Found duplicate file for APK: AndroidManifes”这个错误. 如果在android用调用jar包,需要在工程的属性的Jav

11.Cocos2dx2.2下使用JNI技术调用jar包里面的一些方法遇到的一些问题及解决方案。

<span style="font-family: Arial, Helvetica, sans-serif;">步骤一:导入JniHelper.h头文件.</span> #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include "JniHelper.h" #endif: 此时会遇到JniHelper.h头文件无法找到的问题,需要添加附加包含目录即可解决问题.具体操作步骤如下:右击项目-

Loadrunner11.0调用Jar包

又好几天不写东西了,是不是意味着最近没有大的进步,时时敲打自己. 今天把loadrunner如何调用Jar包搞定了,现在把配置的过程中需要注意的东西写下来,分享给小伙伴儿,减少他们在前行路上的弯路. 声明:我只对以下环境负责,因为稳定的测试环境对于一个测试人员来说,是非常重要的,所以,我轻易不会用最新东西,因为有太多的兼容性的东西,需要大家扒拉扒拉的去弄. 我使用的是:Loadrunner11.0,Jdk1.6 1.设置Java开发环境: 在操作系统上设置:JAVA_HOME,CLASSPATH

命令行通过入参调用jar包

命令行通过入参调用jar包 最近因为项目需要,需要实现一个功能,即定时执行服务器上的一个脚本去对数据库的数据进行业务处理,要操作的数据库有很多种,mysql.db2.oracle.sqlserver等等,但是shell目前我还不熟悉,所以就先用java去实现,打成一个jar包,通过入参即可调用不同的数据库,满足了要求.网上搜了一下,大家多使用了Apache Commons-CLI包进行命令行参数解析,但是说的都不太清楚,我在这里结合自己的实际操作进行总结,希望能够帮助到有需要的朋友. 我这里因为

C# 调用Jar包的方法

在C#中调用Java生成的jar库文件的方法 一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . 其中test.jar为要生成的jar包:com/ . 为指定的当前目录下的文件夹,该文件夹包括子文件夹及class文件: 二.到IKVM官方网站下载IKVM需要的组件  http://www.ikvm.net/ ikvm-0.42.0.3.zip ikvmbin-

不用ide编译java程序时调用jar包

调用特定目录下的jar包 javac -cp d:\javatest\dom4j.jar Dom4jDemo.java //这部分必须注意,d:\javatest 是Dom4jDemo.class所在的目录,运行时;d:\javatest 必须包括D:\javatest>java -classpath d:\javatest\dom4j.jar;d:\javatest\jaxen.jar;d:\javatest Dom4jDemo(注意jar之后的分号) //如果像下面的写法则会提示未找到Dom

jar包调用jar包内部和外部的配置文件

http://blog.csdn.net/lpftobetheone/article/details/32689467 ******************************************************** public class Config { private static Properties properties; private static Logger logger = Logger.getLogger(Config.class); static { t

shell脚本调用jar包打印乘法表

#声明脚本 #!/bin/bash #打印"------cfb---------"echo "------cfb---------" #java环境变量JAVA_HOME=/usr/java/jdk1.8.0_11CLASSPATH=$JAVA_HOME/bin #指定需要执行jar包的位置,可自行设置 JARPATH=/home/haha/Desktop #环境变量的标准格式 CLASSPATH=$CLASSPATH:$JARPATH/cfb.jar #expor

loadrunner调用jar包方法

环境 win7(32位)/winXP+loadrunner11+JDK 1.6(一定要配置JAVA环境变量) 1.Eclipse中创建com.medivh包 1 package com.medivh; 2 3 public class HelloWord { 4 public void show(String str){ 5 System.out.println("接收参数:"+str); 6 } 7 } 2.导出JAR包 点击file-->export-->JAR fil