diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 79c14cc1d94..77211624993 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -195,6 +195,8 @@ Bug Fixes * SOLR-8001: Fixed bugs in field(foo,min) and field(foo,max) when some docs have no values (David Smiley, hossman) +* SOLR-7978: Fixed example/files update-script.js to be Java 7 and 8 compatible. (Erik Hatcher) + Optimizations ---------------------- diff --git a/solr/core/src/test-files/solr/collection1/conf/cross-compatible.js b/solr/core/src/test-files/solr/collection1/conf/cross-compatible.js new file mode 100644 index 00000000000..2fcd6c3baf6 --- /dev/null +++ b/solr/core/src/test-files/solr/collection1/conf/cross-compatible.js @@ -0,0 +1,53 @@ +function get_class(name) { + var clazz; + try { + // Java8 Nashorn + clazz = eval("Java.type(name).class"); + } catch(e) { + // Java7 Rhino + clazz = eval("Packages."+name); + } + + return clazz; +} + +function processAdd(cmd) { + var doc = cmd.getSolrInputDocument(); + + var analyzer = + req.getCore().getLatestSchema() + .getFieldTypeByName("text") + .getIndexAnalyzer(); + + var token_stream = + analyzer.tokenStream("subject", doc.getFieldValue("subject")); + + var cta_class = get_class("org.apache.lucene.analysis.tokenattributes.CharTermAttribute"); + var term_att = token_stream.getAttribute(cta_class); + token_stream.reset(); + while (token_stream.incrementToken()) { + doc.addField("term_s", term_att.toString()); + } + token_stream.end(); + token_stream.close(); + + return true; +} + +// // // + +function processDelete() { + // NOOP +} +function processCommit() { + // NOOP +} +function processRollback() { + // NOOP +} +function processMergeIndexes() { + // NOOP +} +function finish() { + // NOOP +} diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-script-updateprocessor.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-script-updateprocessor.xml index 81f4392aaf2..ee3fde8f293 100644 --- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-script-updateprocessor.xml +++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig-script-updateprocessor.xml @@ -103,10 +103,17 @@ throw.error.on.add.updateprocessor.js + missing.functions.updateprocessor.js + + + cross-compatible.js + + + diff --git a/solr/core/src/test/org/apache/solr/update/processor/StatelessScriptUpdateProcessorFactoryTest.java b/solr/core/src/test/org/apache/solr/update/processor/StatelessScriptUpdateProcessorFactoryTest.java index 191f5fc0e41..c785cc6816f 100644 --- a/solr/core/src/test/org/apache/solr/update/processor/StatelessScriptUpdateProcessorFactoryTest.java +++ b/solr/core/src/test/org/apache/solr/update/processor/StatelessScriptUpdateProcessorFactoryTest.java @@ -268,4 +268,14 @@ public class StatelessScriptUpdateProcessorFactoryTest extends UpdateProcessorTe fail("Did not get exception from script"); } + public void testJavaScriptCompatibility() throws Exception { + final String chain = "javascript-compatibility"; + SolrInputDocument d = processAdd(chain, + doc(f("id", "5"), + f("name", " foo "), + f("subject", "BAR"))); + assertEquals("bar", d.getFieldValue("term_s")); + + } + } diff --git a/solr/example/files/conf/update-script.js b/solr/example/files/conf/update-script.js index 25bfa0360d3..0991c889413 100644 --- a/solr/example/files/conf/update-script.js +++ b/solr/example/files/conf/update-script.js @@ -1,6 +1,15 @@ -/* - See http://wiki.apache.org/solr/ScriptUpdateProcessor for more details. -*/ +function get_class(name) { + var clazz; + try { + // Java8 Nashorn + clazz = eval("Java.type(name).class"); + } catch(e) { + // Java7 Rhino + clazz = eval("Packages."+name); + } + + return clazz; +} function processAdd(cmd) { @@ -69,9 +78,9 @@ function processAdd(cmd) { .getIndexAnalyzer(); var token_stream = - analyzer.tokenStream("content", new java.io.StringReader(doc.getFieldValue("content"))); - var term_att = token_stream.getAttribute(org.apache.lucene.analysis.tokenattributes.CharTermAttribute.class); - var type_att = token_stream.getAttribute(org.apache.lucene.analysis.tokenattributes.TypeAttribute.class); + analyzer.tokenStream("content", doc.getFieldValue("content")); + var term_att = token_stream.getAttribute(get_class("org.apache.lucene.analysis.tokenattributes.CharTermAttribute")); + var type_att = token_stream.getAttribute(get_class("org.apache.lucene.analysis.tokenattributes.TypeAttribute")); token_stream.reset(); while (token_stream.incrementToken()) { doc.addField(type_att.type().replace(/\<|\>/g,'').toLowerCase()+"_ss", term_att.toString());