我怎样才能拥有一个具有Java.util.Arraylist类型的javascript对象?

时间:2015-03-23 02:03:02

标签: java javascript

使用Solr ScriptUpdateProcessor进行修补,因此我有一个没有浏览器的javascript文件。我对此很新,我不知道如何在调试器中运行它,并且仅限于系统日志记录。

在这个javascript文件中,我有一个我认为是数组的对象,但奇怪地错过了javascript数组的基本属性。

所以我用这个函数转储了对象:

function log_object(object) {
  var output = '';
    for (var property in object) {
       output += property + ': ' + object[property]+'; \n';
   }
   logger.info(output);
}

回来的结果看起来像“真正的”Java。最值得注意的是:

class: class java.util.ArrayList;

更多的是:

clone: function clone() {/*
java.lang.Object clone()
*/}
;
toArray: function toArray() {/*
java.lang.Object[] toArray()
java.lang.Object[] toArray(java.lang.Object[])
*/}
;
iterator: function iterator() {/*
java.util.Iterator iterator() 
*/}
;
addAll: function addAll() {/*
boolean addAll(int,java.util.Collection)
boolean addAll(java.util.Collection)
*/}
;
get: function get() {/*
java.lang.Object get(int) 
*/}
;
equals: function equals() {/*
boolean equals(java.lang.Object)
*/}

等。 心灵震撼。

我是如何在javascript函数中结束基本java对象的?这是怎么回事?

更新

我之前从未意识到java-to-and-from-javascript的灰色区域。 test-update-script.js中的最终“工作代码”如下所示:

doc = cmd.solrDoc;  // org.apache.solr.common.SolrInputDocument <- note this is also java?
var contents = []; <-- 'normal' js Array.
vals = doc.getFieldValues(my_multivalued_field); // <--- vals is now java.util.arraylist
jsFriendlyAry = vals.toArray(); // <-- jsFriendlyAry is String[]
for (j = 0; j < jsFriendlyAry.length; j++) {
    contents.push(jsFriendlyAry[j]);
}

因此可以混合使用服务器端的javascript和java。 Oracle's guide to using Java from Scripts中的摘要 似乎需要一个我尚未想到的包含(特别是Java.to和Java.from),但确认行为。

1 个答案:

答案 0 :(得分:0)

默认情况下,使用Java对脚本支持(https://lucene.apache.org/solr/4_7_0/solr-core/org/apache/solr/update/processor/StatelessScriptUpdateProcessorFactory.html

执行更新脚本

Rhino Javascript engine的原始实现中,JS被编译为Java类,并且自1998年以来脚本已被解释。

所以看起来这些脚本似乎是从Java运行的Java,而不是孤立的。这解释了为什么转储对象与POJO的共同点比“普通”JS对象更多。