将java对象分配给node.js变量

时间:2014-06-05 10:44:26

标签: javascript node.js soap node-java

这是我使用'java'模块在node.js中创建java对象的代码片段。创建了四个java对象,我希望它们一起作为单个对象。所以我使用变量'args'来保存这些java对象。

var java = require("java");
java.classpath.push("commons-lang3-3.1.jar");
java.classpath.push("commons-io.jar");
var soap = require('soap');

var vehId = java.newInstanceSync("java.lang.Integer", 922);
var lattitude = java.newInstanceSync("java.lang.Double", 8.6717136);
var longitude = java.newInstanceSync("java.lang.Double", 76.8168311);
var GregorianCalendar = java.import('java.util.GregorianCalendar');
var time = new GregorianCalendar(2014,4,29,8,7,6);
console.log('vehId: '+vehId+'\nlattitude: '+lattitude+'\nlongitude '+longitude+'\ntime: '+time+'\n\n');

var args = {
            vehicleId : vehId,
            lat : lattitude,
            lan : longitude,
            packetTime: time
};
console.log(args);

这是我得到的输出。

  
    

vehId:922

         

lattitude:8.6717136

         经度76.8168311

         

时间:     java.util.GregorianCalendar中[时间= ?, areFieldsSet =假,areAllFieldsSet =假,宽大=真,区= sun.util.calendar.ZoneInfo [ID = “亚洲/加尔各答”,偏移= 19800000,dstSavings = 0,useDaylight =假,过渡= 6,lastRule =空],Firstdayofweek可= 1,minimalDaysInFirstWeek = 1,ERA = ?, YEAR = 2014,MONTH = 4,WEEK_OF_YEAR = ?, WEEK_OF_MONTH = ?, DAY_OF_MONTH = 29,DAY_OF_YEAR = ?, DAY_OF_WEEK =? ,DAY_OF_WEEK_IN_MONTH = ?, AM_PM = 0,HOUR = 8,HOUR_OF_DAY = 8,MINUTE = 7,SECOND = 6,微差= ?, ZONE_OFFSET = ?, DST_OFFSET =?]

  
     

{vehicleId:922,

     

lat:8.6717136,

     

lan:76.8168311,

     

packetTime:{}

     

}

任何人请告诉我为什么'args'对象的'packetTime'变量没有赋值'time'值?为什么显示为{} ???

1 个答案:

答案 0 :(得分:1)

一旦转换为JavaScritp对象,GregorianCalendar对象的结构就不明显了。

但它在你的第一个日志中工作的原因是,在这种情况下你将它连接到一个字符串,所以你实际上是在格里高利历中触发toString方法,这似乎使用了Java的实现方法。

换句话说,如果你做了其中任何一个:

console.log('' + time);
console.log(time.toString());
console.log("%s", time);

您将获得预期的输出字符串。

另一方面,console.log(time)不会调用对象的toString方法,而是尝试检索哈希对象中的所有键。看起来GregorianCalendar对象没有任何可见的可枚举属性,这就是为什么你得到一个空结果。

console.log("%j", time);