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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM