2015-03-23 4 views
0

Творение с помощью Solr ScriptUpdateProcessor, поэтому у меня есть файл javascript, который выполняется без браузера. Я достаточно новичок в этом, что не знаю, как запустить это в отладчике, и ограничено системным протоколированием.Как я могу создать объект javascript, который имеет тип Java.util.Arraylist?

В этом файле 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) 
*/} 

т.д. Ум взорван.

Как я закончил с базовым java-объектом внутри javascript-функции? Что здесь происходит?

Update

Существует некоторая серая область Java-к-и-из-JavaScript, что я не был ранее известно. Окончательный «рабочий код» в тест-ДОПОЛНЕНО 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), но подтвердил поведение.

+0

Никогда не слышал о 'ScriptingUpdateRequestHandler', и Google тоже этого не делал. Можете ли вы предоставить ссылку? Тем не менее, единственный способ добиться этого - кто-то определил класс, который вы используете, и сделал его похожим на Java. – Amadan

+0

Это кажется маловероятным. Неправильное имя утилиты - исправление OP. http://wiki.apache.org/solr/ScriptUpdateProcessor – LizH

+0

Это, похоже, компилируется из javascript в фактическую java. – chapinkapa

ответ

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.

Смежные вопросы