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());